2016-09-05 3 views
1

私は3つの三角形と3つの四角形を持っています。それぞれがモンスターを表しています。ランダムなサイコロを一度に1つずつ選択し、選択したモンスターを画面の中央に移動させ(問題なく動作します)、3つのラウンドを戦います。各ラウンドでは、2つのtextFieldにサイコロを表示します1つのテキストエリアでは、「モンスター1がモンスター1に2点のダメージを与える(ダメージ=サイコロの違い)、3ラウンド後にモンスターが戻って移動します。 。この問題は、コードで私は右ここに立ち往生していますので、実装ちょうど私はそれが移動する前に発生した最初の戦いを停止し、許可するように取得するために何をすべきかわからない。私が思うにを介して実行されます。textArea/fieldsとモンスターアニメーションをコードと同期させるにはどうすればいいですか?

public void playTheMonsterGame() { 
    Timeline time = new Timeline(); 
    String[] hydNames = {"Heisenberg", "Jesse", "Todd"}; 
    String[] zexNames = {"Tuco", "Gustavo", "Lydia"};   

    dice.setMonsters1and2();// sets which monster we want for switch 
    switch (dice.monsterNum1) { 
     case 1: 
      trian.moveTri1(); 
      break; 
     case 2: 
      trian.moveTri2(); 
      break; 
     case 3: 
      trian.moveTri3(); 
      break; 
     default: 
      break; 
    } 

    switch (dice.monsterNum2) { 
     case 1: 
      square.moveSquare1(); 
      break; 
     case 2: 
      square.moveSquare2(); 
      break; 
     case 3: 
      square.moveSquare3(); 
      break; 
     default: 
      break; 
    } 

    dice.rollDice(); // random number generator generates all three rounds at once 
    rollBox1 = ("Roll: " + dice.rolls[0][0] + ", " + dice.rolls[0][1] + ", " + dice.rolls[0][2] + ", " + dice.rolls[0][3]); 
    rollBox2 = ("Roll: " + dice.rolls[3][0] + ", " + dice.rolls[3][1] + ", " + dice.rolls[3][2] + ", " + dice.rolls[3][3]); 
    roll1.setText(rollBox1); 
    roll2.setText(rollBox2); //roll is the text field 
    int damage1; 

    if (dice.total1a < dice.total4a) { 
     damage1 = dice.total4a - dice.total1a; 
    } else { 
     damage1 = dice.total1a - dice.total4a; 
    } 
    System.out.println(damage1); 
    trian.shrink(damage1); 
    //jumboTron.setText(names[dice.monsterNum1]); 
} 

私はループ中にそれを持っていましたが、それは明らかに機能しません

ここでまた、3210

uは私が働いているか知っているので、移動のための三角形のクラスです:

public class Triangle { 

public final Timeline timeline = new Timeline(); 

public void moveTri1() { 
    timeline.setCycleCount(1); 
    timeline.setAutoReverse(false); 
    final KeyValue kvX = new KeyValue(tri1.layoutXProperty(), 274); 
    final KeyValue kvY = new KeyValue(tri1.layoutYProperty(), 180); 
    final KeyFrame kf = new KeyFrame(Duration.millis(1000), kvX, kvY); 
    timeline.getKeyFrames().add(kf); 
    timeline.play(); 
} 

public void moveTri2() { 
    timeline.setCycleCount(1); 
    timeline.setAutoReverse(false); 
    final KeyValue kvX = new KeyValue(tri2.layoutXProperty(), 274); 
    final KeyFrame kf = new KeyFrame(Duration.millis(1000), kvX); 
    timeline.getKeyFrames().add(kf); 
    timeline.play(); 
} 

public void moveTri3() { 
    timeline.setCycleCount(1); 
    timeline.setAutoReverse(false); 
    final KeyValue kvX = new KeyValue(tri3.layoutXProperty(), 274); 
    final KeyValue kvY = new KeyValue(tri3.layoutYProperty(), 180); 
    final KeyFrame kf = new KeyFrame(Duration.millis(1000), kvX, kvY); 
    timeline.getKeyFrames().add(kf); 
    timeline.play(); 
} 

public void moveBack() { 
    timeline.setCycleCount(Timeline.INDEFINITE); 
    timeline.setAutoReverse(false); 
    final KeyValue kvX = new KeyValue(tri1.layoutXProperty(), 90); 
    final KeyValue kvY = new KeyValue(tri1.layoutYProperty(), 60); 
    final KeyFrame kf = new KeyFrame(Duration.millis(500), kvX, kvY); 
    timeline.getKeyFrames().add(kf); 
    timeline.play(); 
} 

public void shrink(int damage) { 
    double damPoints = damage/25.0; 
    double damRescale = 25.0 - damPoints; 
    System.out.println(damage+ " "+damPoints +" "+ damRescale); 
    /*if(damRescale<=0) 
     tri1.visibleProperty().setValue(false); 
    else{ 
    tri1.setScaleX(damRescale); 
    tri1.setScaleY(damRescale);}*/ 
} 
} 
+1

あなたが求めていることはあまり明確ではありません。タイムラインの特定のポイントでコードを実行する場合は、[タイムラインとイベントハンドラで時刻を指定する] KeyFrameを作成できます(http://docs.oracle.com/javase/8/javafx/ api/javafx/animation/KeyFrame.html#KeyFrame-javafx.util.Duration-javafx.event.EventHandler-javafx.animation.KeyValue ...-);イベントハンドラは指定された時刻に実行されます。また、['setOnFinished'](http://docs.oracle.com/javase/8/javafx/api/javafx/animation/Animation.html#setOnFinished-javafx.event.EventHandler-)を使用してコードを実行することができます。タイムラインは終了します。 –

+0

あなたはそれをかなり効果的に答えました。私はこのウェブサイトでできる限り明確にすることができるように努力しています。私は助けが必要なので、コミュニティーで話す方法を学んでいます。だから私は答えを感謝します。 – Trend

答えて

0

~~~>パート1

あなたはmoveTri1moveTri2moveTri3moveBack呼び出すたびにTimeLine.Dunnoに新しいkeyFramesを追加していますが、必要であればそれを使用します:

timeline.getKeyFrames().clear(); 

あなたのメソッドの開始時に、タイムラインに存在する以前のKeyFramesをクリアします。あなたが設定されmoveBackメソッドの最初の行でmoveBack方法

1について

~~~>):

timeline.setCycleCount(Timeline.INDEFINITE); 

ので、タイムラインがagain.But再び開始しますモンスターは移動したいと思っています。何度も繰り返されることはありません。次のようにする必要があります:

timeline.setCycleCount(1); 

2)MoveBackのみtriangle1?前方に移動したモンスターがtriangle2だった場合は、そのモンスターに対してmoveBack()メソッドを呼び出す前に、移動したモンスターを保存する必要があります。

+0

この質問を忘れていただきありがとうございますが、それは私のアンドロイドプログラムのlolに役立ちます – Trend

+0

@Trend xaxaxa – GOXR3PLUS

関連する問題