Vários viewports do mesmo DisplayObject
-
08-07-2019 - |
Pergunta
É possível ter visão múltipla do mesmo objeto de exibição? (Por exemplo, do mesmo computador jogo multi-player com tela dividida)
O código de exemplo que falhou ao trabalho seguinte:
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);
Eu pensei que este faria dois visores (v1
e v2
) do mesmo objeto (content
).
Mas quando eu chequei os docs, método DisplayObjectContaner / addChild, diz,
"Se você adicionar um objeto filho que já tenha um contêiner de objetos de exibição diferente como pai, o objeto é removido da lista de filhos do outro recipiente do objeto de exibição."
Existe uma solução para isso?
resultado obtido
Resultado Esperado (simulado)
Resultado Esperado (simulado) http://img337.imageshack.us/img337/ 7914 / 222mq4.png
Renderização para um bitmap como sugerido por Antti é uma ótima idéia, mas os sprites prestados não será capaz de capturar eventos do mouse. Existe uma maneira de redirecionar os cliques do mouse sobre o bitmap para cliques de gatilho sobre os sprites originais?
Solução
A maneira mais fácil de fazer isso é ter um bitmap que é atualizado com o conteúdo do objeto de exibição original, algo como:
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); }
Outras dicas
Uma maneira que você poderia ir é adotar um padrão MVC, onde você tem um modelo que controla a lógica do jogo etc, e vista classes separadas que display de controlo. Desta forma, é mais gerenciável para ter várias vistas da mesma cena.
Se você colocar render a um dentro de bitmap do sprite, então você pode capturar cliques do mouse.
Mike