同じDisplayObjectの複数のビューポート
-
08-07-2019 - |
質問
同じ表示オブジェクトの複数のビューを持つことは可能ですか? (例:分割画面を使用した同一コンピューターのマルチプレイヤーゲーム)
動作に失敗したサンプルコードは次のとおりです。
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
)の2つのビューポート( 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); }
他のヒント
1つの方法は、ゲームロジックなどを制御するモデルと、表示を制御する個別のビュークラスを備えたMVCパターンを採用することです。このように、同じシーンの複数のビューを持つ方が管理しやすいです。
スプライト内のビットマップにレンダリングを配置すると、マウスクリックをキャプチャできます。
マイク