2008-10-10 6 views
1

Возможно ли иметь несколько видов одного и того же экранного объекта? (Например, тот же компьютер многопользовательские игры с помощью разделенного экрана)Несколько видовых экранов одного и того же DisplayObject

Пример кода, который не смог работать следующим образом:

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://img530.imageshack.us/img530/4611/111jd8.png

Ожидаемый результат (имитация)

Expected result (simulated) http://img337.imageshack.us/img337/7914/222mq4.png


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

ответ

2

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

 
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); 
} 
+0

Да, вы можете иметь несколько видовых экранов, используя Papervision3D (3d api), и способ, которым он работает, - это преобразование всего изображения в растровое изображение. – defmeta 2008-10-10 17:04:43

0

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

микрофон

1

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

+0

Я согласен, что это лучший подход. – fenomas 2008-10-14 03:41:49

Смежные вопросы