Più viewport dello stesso DisplayObject
-
08-07-2019 - |
Domanda
È possibile avere una vista multipla dello stesso oggetto di visualizzazione? (ad es. gioco multigiocatore per lo stesso computer con schermo diviso)
Segue il codice di esempio che non ha funzionato:
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);
Ho pensato che questo avrebbe reso due viewport ( v1
e v2
) dello stesso oggetto ( content
).
Ma quando ho controllato i documenti, il metodo DisplayObjectContaner / addChild, dice,
" Se aggiungi un oggetto figlio che ha già un contenitore di oggetti di visualizzazione diverso come genitore, l'oggetto viene rimosso dall'elenco figlio dell'altro contenitore di oggetti di visualizzazione. "
C'è una soluzione per questo?
Risultato ottenuto
Risultato atteso (simulato)
Risultato atteso (simulato) http://img337.imageshack.us/img337/ 7914 / 222mq4.png
Il rendering su una bitmap come suggerito da Antti è un'ottima idea, ma gli sprite renderizzati non saranno in grado di catturare eventi del mouse. C'è un modo per reindirizzare i clic del mouse sulla bitmap per attivare i clic sugli sprite originali?
Soluzione
Il modo più semplice per farlo è avere una bitmap che viene aggiornata con i contenuti dell'oggetto di visualizzazione originale, qualcosa del tipo:
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); }
Altri suggerimenti
Un modo in cui potresti andare è quello di adottare un modello MVC, in cui hai un modello che controlla la logica di gioco, ecc., e classi di vista separate che controllano il display. In questo modo è più gestibile avere più viste della stessa scena.
Se si mette il rendering su una bitmap all'interno di sprite, è possibile acquisire i clic del mouse.
mike