是否可以拥有同一显示对象的多个视图? (例如使用分屏的同一台计算机多人游戏)

无效的示例代码如下:

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

我认为这会产生同一对象( content )的两个视口( v1 v2 )。 但是,当我检查文档,DisplayObjectContaner / addChild方法时,它说,

"如果添加一个已经具有不同显示对象容器的子对象作为父对象,则该对象将从另一个显示对象容器的子列表中删除。“

有解决方法吗?


获得结果

预期结果(模拟)

预期结果(模拟)http://img337.imageshack.us/img337/ 7914 / 222mq4.png


按照Antti的建议渲染到位图是一个好主意,但渲染的精灵将无法捕获鼠标事件。有没有办法重定向鼠标点击位图以触发对原始精灵的点击?

有帮助吗?

解决方案

最简单的方法是使用原始显示对象的内容更新位图,例如:

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

其他提示

你可以采用的一种方法是采用MVC模式,你有一个控制游戏逻辑等的模型,以及控制显示的单独视图类。这样,拥有同一场景的多个视图就更易于管理。

如果将渲染放到精灵内部的位图中,则可以捕获鼠标点击。

麦克

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top