0

ドローアブル オブジェクトに onDraw メソッドがあるという点で Android View クラスに似た、標準の Canvas ドローイングに基づくカスタム ゲーム エンジンの構築を実験しています。アイデアは、ゲーム要素にそれ自体を描画する Canvas が与えられ、それがメイン ビューに組み込まれるというものです。標準の Android ビューの舞台裏で同様のことが起こっていると思います。

小さなキャンバスを子オブジェクトに渡し、それらのキャンバスを独自の描画に組み込むことができる「マスター ビュー」を作成するにはどうすればよいですか?

注: 子オブジェクトはビューのサブクラスではありませんが、「マスター」ビューはビューにすることができます

4

1 に答える 1

2

のAndroidソースコードを読んだ後、これがどのように行われるかViewViewGroup発見しました。システムが画面にビューを描画すると、画面全体のラスターである Canvas が生成されます。その Canvas は「切り取られ」てサブビューに与えられて描画されるのではなく、各ビューに対応するように変換およびクリップされます。

特定のビューが描画される前に、その親は Canvas を子の位置に移動し、Canvas を子のサイズにクリップしてから、.draw(Canvas)そのビューを呼び出します。ビューはキャンバスが変更されたことを認識せず、各ビューはあたかも (0,0) にあるかのように描画します。子が描画を終了すると、Canvas は元の位置に戻されます。抽象的には、すべてのビューはそれが唯一のビューであると考えていますが、実際には各親がキャンバスを適切な場所に配置およびサイズ変更しています。

したがって、私の状況では、次のように各子オブジェクトを反復処理するだけで済みました。

for(MyObject mob : mobjects) {
   final int restoreTo = canvas.save();

   canvas.translate(mob.getX(), mob.getY());
   canvas.clipRect(0, 0, mob.getWidth(), mob.getHeight());
   mob.onDraw(canvas);

   canvas.restoreToCount(restoreTo);
}
于 2012-11-19T23:35:21.843 に答える