1

ハノイの塔に基づいて、各動きのアニメーションを含むアプリを作成しています。すべての長さは 1 秒未満です。手動でパズルを解くオプションと、プログラム自体がパズルを解いてすべてのアニメーションを表示するオプションがあります。私の問題は、プログラムがパズル自体を解こうとしたときに発生します。handler.postDelayed次のアニメーションを開始する前に、パズルが各アニメーションに終了時間を与えるために使用する再帰的な方法で使用しようとしています。

int autoSolveCount = 0;

public void playHanoi(int n, String from , String other, String to) {
    Handler handler = new Handler();
    if (n == 0)
    {
        autoSolveCount++;
        return;
    }
    if (n > 0){
        playHanoi(n-1, from, to, other);
        image.get(from).performClick();
        image.get(to).performClick();
        handler.postDelayed(new RunAutoSolve(n-1, other, from, to), 1000*(autoSolveCount+1));
    }
}

public class RunAutoSolve implements Runnable{

    int num;
    String other = "";
    String from = "";
    String to = "";

    public RunAutoSolve(int n, String o, String f, String t){
        num = n;
        other = o;
        from = f;
        to = t;
    }

    @Override
    public void run(){
        playHanoi(num, other, from, to);
    }
}

image.get(to)image.get(from)対象となるタワーのクリック可能な ImageView を返します。それらがクリックされると、他のメソッドが適切なアニメーションを実行します。手動でパズルを解いてみると、何の問題もないので、クリック可能な画像やアニメーションに問題があるとは思えません。問題は、プログラムが 2 番目のアニメーションを開始する前に最初のアニメーションの実行を終了するのに十分な時間がないことです。私のメソッドの設定方法では、アニメーションが終了する前にアニメーションを開始しようとするとクラッシュします。(これは手動実行中の問題ではありません。) プログラムを実行すると、最初のアニメーションの前に長い一時停止があり、そのアニメーションが完了した直後にクラッシュします。では、これはどこに遅延を配置するか、タイミング、またはその他の問題ですか? 私のコードをもっと見る必要がある場合は、尋ねてください。前もって感謝します!

4

0 に答える 0