Несколько видовых экранов одного и того же DisplayObject - PullRequest
1 голос
/ 10 октября 2008

Можно ли иметь несколько видов одного и того же экранного объекта? (например, многопользовательская игра на одном компьютере с использованием разделенного экрана)

Ниже приведен пример кода, который не работает:

    var content: Sprite = new Sprite();
    var v1: Sprite = new Sprite();
    var v2: Sprite = new Sprite();

    with(content.graphics) {
        lineStyle(2, 0xff0000);
        drawCircle(100, 100, 80);

        lineStyle(5, 0x009999);
        drawRect(50, 80, 200, 30);
    }

    v1.addChild(content);
    v1.x = 0;
    v1.y = 0;
    v1.scrollRect = new Rectangle(0, 0, 100, 100);
    addChild(v1);

    v2.addChild(content);
    v2.x = 100;
    v2.y = 0;
    v2.scrollRect = new Rectangle(0, 0, 100, 100);
    addChild(v2);

Я думал, что это сделает два окна просмотра (v1 и v2) одного и того же объекта (content). Но когда я проверил документы, метод DisplayObjectContaner / addChild, он говорит,

"Если вы добавляете дочерний объект, у которого уже есть другой контейнер экранного объекта, в качестве родительского, объект удаляется из списка дочерних объектов другого контейнера экранного объекта."

Есть ли решение для этого?


Полученный результат

Obtained result

Ожидаемый результат (смоделированный)

Ожидаемый результат (смоделированный) http://img337.imageshack.us/img337/7914/222mq4.png


Отличная идея - рендеринг в растровое изображение, предложенный Антти, но визуализированные спрайты не смогут перехватывать события мыши. Есть ли способ перенаправить щелчки мыши по растровому изображению, чтобы вызвать щелчки по оригинальным спрайтам?

Ответы [ 3 ]

2 голосов
/ 10 октября 2008

Самый простой способ сделать это - иметь растровое изображение, обновленное с исходным содержимым экранного объекта, что-то вроде:

var bitmap:Bitmap = new Bitmap(new BitmapData(1,1));
addChild(bitmap);

addEventListener(Event.ENTER_FRAME,enterFrameHandler);

function enterFrameHandler(event:Event):void {
    bitmap.bitmapData.dispose();
    bitmap.bitmapData = new BitmapData(displayObject.width, displayObject.height, true, 0x00000000);
    bitmap.bitmapData.draw(displayObject);
}
1 голос
/ 13 октября 2008

Один из способов, которым вы могли бы пойти, - это принять шаблон MVC, где у вас есть модель, управляющая игровой логикой и т. Д., И отдельные классы представлений, управляющие отображением. Таким образом, более легко управлять несколькими видами одной сцены.

0 голосов
/ 13 октября 2008

Если вы поместите рендер в растровое изображение внутри спрайта, вы можете захватывать щелчки мыши.

микрофон

...