2008-10-10 49 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