0

私は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.旅行の終わりに、新しい「イベント」を送信したいと思います。たとえば、新しいポップアップ(またはアラートダイアログ)を表示したり、メソッドを開始したりします。どうやってやるの ?

私の説明で十分に明確だったことを願っています。

ご回答ありがとうございます。

4

1 に答える 1