我的代碼有問題。有一種方法可以在遊戲中拍攝子彈並更新UI。問題是:我的代碼不工作,因爲我曾想象過,子彈創建了一個traiectory和Parabolic路徑,但並不總是計算的函數適用於此程序。我認爲這顯然是問題在數學公式,但我不明白如何調試。請幫幫我!!!感謝和抱歉,但在代碼中有些變量是意大利語,請耐心等待我,我是一名學生。子彈運動物理和數學到Java(Javafx)
public class NuovoGiocoController {
Cannone cannone;
Aereo aereo;
double vel = 100;
Proiettile pro;
int CAR = 10;
int raf = 2;
@FXML
private Rectangle canna;
@FXML
private Rectangle iconaAereo;
@FXML
private Circle P;
@FXML
private AnchorPane MP;
void Aggiorna() throws InterruptedException { //Aggiorna = Update
//vel = Slider.getValue();
double angle = canna.getRotate();
boolean morto = false;
double Gravity = 10;
while (morto == false) {
double X = P.getLayoutX();
double Y = P.getLayoutY();
if (X > 1 && Y > 1 && X < MP.getWidth() && Y < MP.getHeight()) {
System.out.println("x: " + X + " y: " + Y + " maxX: " + MP.getWidth() + " maxY: " + MP.getHeight());
angle = Math.abs(angle);
double x = P.getLayoutX();
double y = P.getLayoutY();
P.setLayoutX(x += (Math.tan(angle)-(Gravity/(2*vel*vel)*(Math.cos(angle)))));
P.setLayoutY(y -= (Math.tan(angle)+(Gravity/(2*vel*vel)*(Math.cos(angle)))*(x*x)));
System.out.println("VIVO");
TimeUnit.MILLISECONDS.sleep(100);
} else {
System.out.println("MORTO");
P.setLayoutX(pro.posX);
P.setLayoutY(pro.posY);
morto = true;
}
}
}
void nuovoProcesso() { // nuovoProcesso = newProcess
Task task = new Task<Void>() {
@Override
public Void call() throws InterruptedException {
for (int i = 1; i <= raf; i++) {
if (isCancelled()) {
break;
}
Aggiorna();
}
return null;
}
};
new Thread(task).start();
}
@FXML
void Spara(ActionEvent event) throws InterruptedException {//Spara=shoot
if (raf <= CAR) {
this.CAR -= raf;
//car.setText(String.valueOf(CAR));
nuovoProcesso();
}
if (CAR <= 0) {
//metodo che fà uscire e andare allo score
System.exit(0);
}
}
移動子彈的公式爲:this
public void spostaCannaDestra(ActionEvent event) {
if (canna.getRotate() < + 60) {
canna.setRotate(canna.getRotate() + 10);
}
}
public void spostaCannaSinistra(ActionEvent event) {
if (canna.getRotate() > - 60) {
canna.setRotate(canna.getRotate() - 10);
}
}
@FXML
public void initialize() {
cannone = new Cannone(0);
canna.setLayoutX(cannone.getPosX());
canna.setLayoutY(cannone.getPosY());
canna.setWidth(cannone.getX());
canna.setHeight(cannone.getY());
pro = new Proiettile(16, 16, 300, 340, vel);
P.setLayoutX(pro.posX);
P.setLayoutY(pro.posY);
}
速度等雙初始化取決於大炮的旋轉在屏幕的中心的角度vel = 100;(如果這是你的意思)
你打算使用什麼公式?這是一個初始速度,只有在重力的影響下?什麼是角度? – matt
我改進的問題回答你的評論!感謝您的關注和您的幫助 –
看起來您的角度可能會在動畫過程中發生變化,這意味着您的公式不正確。然後,如果我明白你的方程是從哪裏來的,那麼x應該每次更新一個常數值,這對你的所得是正確的。那麼你應該根據X計算Y,你不應該使用+ =。 – matt