私は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]);
}
私はループ中にそれを持っていましたが、それは明らかに機能しません
ここでまた、3210uは私が働いているか知っているので、移動のための三角形のクラスです:
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);}*/
}
}
あなたが求めていることはあまり明確ではありません。タイムラインの特定のポイントでコードを実行する場合は、[タイムラインとイベントハンドラで時刻を指定する] 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-)を使用してコードを実行することができます。タイムラインは終了します。 –
あなたはそれをかなり効果的に答えました。私はこのウェブサイトでできる限り明確にすることができるように努力しています。私は助けが必要なので、コミュニティーで話す方法を学んでいます。だから私は答えを感謝します。 – Trend