私はJavaが初めてで、Android用の非線形アイドルゲームを開発しようとしています。ゲームで「時間」を管理する方法に少しこだわっています。
線形アイドル ゲームでは、System.currentTimeMillis()
ゲーム中 (アプリケーションを開いたとき) とゲームの再起動時にモデルを更新していました (モデルは線形であるため、経過時間に基づいてモデルを更新する単純な式で十分です)。
しかし、非線形のアイドル ゲームでは、モデルは時間離散でなければならず、ゲームの再起動時にループを実行する必要があります。その後、ゲームの再起動時に、私のモデルは を使用できません System.currentTimeMillis()
。私のアイデアは、ゲームが開かれたときに特定のタイマーを使用してモデルを計算することでした。しかし、私の現在の知識では、すべてのクラスから特定のタイマーにアクセスする方法がわかりません。
たとえば、 Shipを表すクラスには、travel というメソッドがあります。この例では、モデルは線形です。
public class Ship {
double travelStartTime, travelEndTime;
double positionX, positionY;
double maxSpeed = 10;
public Ship(double buildPostionX, double buildPositionY) {
positionX = buildPositionY;
positionY = buildPostionX;
maxSpeed = 10;
travelStartTime = 0;
travelEndTime = 0;
}
public void startTravel(double destX, double destY){
travelStartTime = System.currentTimeMillis();
travelEndTime = System.currentTimeMillis() + travelTime(destX, destY);
}
public double travelTime(double destinationX, double destinationY) {
double currentX = this.getPositionX();
double currentY = this.getPositionY();
//calculate distance in km
double distance = Math.pow(Math.pow(currentX-destinationX, 2) + Math.pow(currentY-destinationY, 2), 0.5);
double time = distance/maxSpeed; //time in seconds
return time;
}
私の質問は次のとおりです。
1.System.currentTimeMillis()
独自のタイマー (アプリケーションが起動するたびに開始)に置き換えたいのですが、どうすればよいですか? モデルのどのクラスも同じタイマーにアクセスする必要があることを知っていますか? または、この問題を管理する他の人はいますか?
2.旅行の終わりに、新しい「イベント」を送信したいと思います。たとえば、新しいポップアップ(またはアラートダイアログ)を表示したり、メソッドを開始したりします。どうやってやるの ?
私の説明で十分に明確だったことを願っています。
ご回答ありがとうございます。