2008-10-10 56 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); 

我认为这将使得同一对象的两个视(v1v2)( content)。 但是,当我检查了文档DisplayObjectContaner/addChild方法时,它说,

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

有没有解决方案呢?


得到的结果

Obtained result http://img530.imageshack.us/img530/4611/111jd8.png

预期结果(模拟)

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


渲染到由安蒂提出了一个位图是一个伟大的想法,但渲染的精灵将无法使用捕捉鼠标事件。有没有办法将位置上的鼠标点击重定向到触发原始精灵的点击?

回答

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