У меня проблема с javafx 8. Я пытаюсь создать игру и теперь пытаюсь стрелять. Я думаю, что все хорошо, но у меня нет стрелять.
paint
не используется в моем коде. Как я могу использовать paint()
в public void initialize
? Это возможно или правильно?
Я думаю, что это должно быть так!
Jet: моя машина для стрельбы. Движение струи работает хорошо.
Это не мой основной класс.
Спасибо за ваш ответ.
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
import java.util.ResourceBundle;
public class gameMain implements Initializable {
@FXML
ImageView jet;
@FXML
Label friendName;
@FXML
Label mySocer;
@FXML
Label friendSocer;
@FXML
Label myFuel;
@FXML
Button up;
@FXML
Button right;
@FXML
Button down;
@FXML
Button left;
@FXML
Button pause;
@FXML
Button btnUseKeyBoardKeys;
private boolean goRight , goUp , goLeft , goDown;
private int jetX = 500; // Loctaion Jet
private int jetY = 500; // Location Jet
private int BulletX[] = new int[10];
private int BulletY[] = new int[10];
private boolean[] isShot = new boolean[10];
private int BulletNo = 0;
private Image bullet = new ImageIcon("/view/img/bullet.png").getImage();
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
runGame();
controls();
}
private void runGame(){
for(int i=0;i<BulletY.length;i++){
isShot[i] = false;
BulletX[i] = jetX+40;
BulletY[i] = jetY-20;
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while (true){
for(int i=0;i<BulletY.length;i++){
if (isShot[i]) BulletY[i]-=5;
if (BulletY[i]<0){
isShot[i] = false;
BulletX[i] = jetX+40;
BulletY[i] = jetY-20;
}
}
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (goUp){
jetY-=5;
}
if (goDown){
jetY+=5;
}
if (goRight){
jetX+=5;
}
if (goLeft){
jetX-=5;
}
jet.setLayoutX(jetX);
jet.setLayoutY(jetY);
}
}
});
thread.start();
}
public void paint(Graphics g){
for (int i=0;i<BulletY.length;i++){
if(isShot[i])
g.drawImage(bullet,BulletX[i],BulletY[i],null);
}
}
private void controls() {
// Mouse
up.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
goUp = true;
}
});
up.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
goUp = false;
}
});
down.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
goDown = true;
}
});
down.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
goDown = false;
}
});
right.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
goRight = true;
}
});
right.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
goRight = false;
}
});
left.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
goLeft = true;
}
});
left.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
goLeft = false;
}
});
// Keyboard
btnUseKeyBoardKeys.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
switch (event.getCode()){
case W:
goUp = true;
break;
case S:
goDown = true;
break;
case D:
goRight = true;
break;
case A:
goLeft = true;
break;
case SPACE:
isShot[BulletNo] = true;
BulletX[BulletNo] = jetX+40;
BulletY[BulletNo] = jetY-20;
++BulletNo;
if (BulletNo > BulletY.length-1)
BulletNo = 0;
break;
}
}
});
btnUseKeyBoardKeys.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
switch (event.getCode()){
case W:
goUp = false;
break;
case S:
goDown = false;
break;
case D:
goRight = false;
break;
case A:
goLeft = false;
break;
case SPACE:
isShot[BulletNo] = false;
BulletX[BulletNo] = jetX+40;
BulletY[BulletNo] = jetY-20;
++BulletNo;
if (BulletNo > BulletX.length-1)
BulletNo = 0;
break;
}
}
});
}
}