私はアンドロイドゲームを作ろうとしています。なぜ、view.invalidateが、アンドロイドゲームで画面を直ちに再描画しないのですか?
私はアクティビティを拡張し、すべてのユーザー入力を処理するゲームクラスを持っています。次に、私は、ビューを拡張し、画面上にレベルを描画するmissionViewクラスを持っています。
ユーザーがドアをクリックすると、アニメーションを追加したいと思います。
何が起こるか:ゲームはdoor.openを呼び出します。 view.onDraw関数がドアを半開きにするように状態を変更します。ゲームはview.invalidateを呼び出し、画面を再描画します。その後、ゲームは0.5秒間スリープ状態になります。それから、再びdoor.openを呼び出します。 2回目に関数が呼び出されると、状態を変更するので、view.onDraw関数はドアを完全に開くようにします。その後、ゲームはview.invalidateを再度呼び出します。
問題は、view.invalidateになると画面を再描画しないことです。行にブレークポイントを設定し、デバッガを実行してstepをクリックすると、view.onDraw関数に入ることはありません。実行中のコードを表示することさえできません。
私は何を持っていることは次のとおりです。 ドアクラス:
public boolean open()
{
if (doorState == DoorState.Closed)
{
doorState = DoorState.Opening;
return true;
}
else if (doorState == DoorState.Opening)
{
doorState = doorState.Open;
return true;
}
else
{
return false;
}
}
ゲームクラス:
if (tile instanceof DoorTile)
{
DoorTile doorTile = (DoorTile) tile;
Door door = doorTile.getDoor();
if (door.isClosed())
{
door.open();
selectedEntity.openDoor();
view.invalidate(); // This line does not work
try
{
Thread.sleep(500);
}
catch (InterruptedException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
door.open();
// Handled touch event so break switch statement
break;
}
}
私はこのディスカッションを読んだことがありますが、自分のコードを動作させるために何をすべきか理解していませんでした。 "Handler"と "Message"の使い方を理解できませんでした。 –
http://stackoverflow.com/questions/2801877/android-why-wont-invalidate-update-my-buttons-immediatelyで関連するディスカッションをお楽しみになることがあります。 –