Pregunta

¿Es posible tener una vista múltiple del mismo objeto de visualización? (por ejemplo, juego multijugador en la misma computadora con pantalla dividida)

A continuación se muestra el código de muestra que no funcionó:

    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);

Pensé que esto haría dos ventanas gráficas ( v1 y v2 ) del mismo objeto ( content ). Pero cuando revisé los documentos, el método DisplayObjectContaner / addChild, dice,

" Si agrega un objeto hijo que ya tiene un contenedor de objetos de visualización diferente como padre, el objeto se elimina de la lista secundaria del otro contenedor de objetos de visualización. "

¿Hay alguna solución para esto?


Resultado obtenido

Resultado obtenido

Resultado esperado (simulado)

Resultado esperado (simulado) http://img337.imageshack.us/img337/ 7914 / 222mq4.png


Renderizar en un mapa de bits como lo sugiere Antti es una gran idea, pero los sprites renderizados no podrán capturar eventos del mouse. ¿Hay alguna manera de redirigir los clics del mouse en el mapa de bits para activar clics en los sprites originales?

¿Fue útil?

Solución

La forma más fácil de hacer esto es tener un mapa de bits que se actualice con el contenido del objeto de visualización original, algo así 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);
}

Otros consejos

Una forma de hacerlo es adoptar un patrón MVC, donde tienes un modelo que controla la lógica del juego, etc., y clases de vista separadas que controlan la visualización. De esta manera, es más manejable tener múltiples vistas de la misma escena.

Si coloca renderizar en un mapa de bits dentro de sprite, puede capturar los clics del mouse.

mike

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top