是否可以拥有同一显示对象的多个视图? (例如使用分屏的同一台计算机多人游戏)
无效的示例代码如下:
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);
我认为这会产生同一个对象(v1
)的两个视口(v2
和content
)。
但是,当我检查文档,DisplayObjectContaner / addChild方法时,它说,
“如果添加一个已经有不同显示对象容器的子对象作为父对象,则该对象将从另一个显示对象容器的子列表中删除。”
有解决方法吗?
获得结果
预期结果(模拟)
Expected result (simulated) http://img337.imageshack.us/img337/7914/222mq4.png
按照Antti的建议渲染到位图是一个好主意,但渲染的精灵将无法捕获鼠标事件。有没有办法重定向鼠标点击位图以触发对原始精灵的点击?
答案 0 :(得分: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); }
答案 1 :(得分:1)
你可以采用的一种方法是采用MVC模式,你有一个控制游戏逻辑等的模型,以及控制显示的单独视图类。这样,拥有同一场景的多个视图就更易于管理。
答案 2 :(得分:0)
如果将渲染放到精灵内部的位图中,则可以捕获鼠标点击。
麦克