私の重力クラスに問題があります。ユーザがジャンプするたびにベースに達するまでy座標を変更する必要がありますが、ジャンプボタン(W)を繰り返し押すとバグが発生し、キューブはベース。Javaの重力バグ
メインクラス:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@SuppressWarnings("serial")
public class Frame extends JFrame implements Runnable{ //main class
static Panel panel;
static Frame frame;
//CONSTRUCTOR
Frame(){ //constructor
super("Game Frame");
setLayout(new GridLayout(1,1));
panel = new Panel();
add(panel);
} //constructor
public static void main (String args[]){ //main method
frame = new Frame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(true);
frame.setSize(500,300);
frame.setLocationRelativeTo(null);
Thread T1 = new Thread(frame);
T1.start();
} //main method
public void run(){ //run method
frame.addKeyListener(new KeyListener(){ //key listener method
@Override
public void keyPressed(KeyEvent arg0) { //key pressed
switch(arg0.getKeyChar()){
//A (LEFT)
case 'a':
panel.x -= 10;
panel.repaint();break;
//D (RIGHT)
case 'd':
panel.x += 10;
panel.repaint();break;
//W (UP)
case 'w':
panel.y -= 40;
panel.repaint();
Thread T1 = new Thread(new Gravity());
T1.start();
} //switch
} //key pressed method
@Override
public void keyReleased(KeyEvent arg0) {}
@Override
public void keyTyped(KeyEvent arg0) {}
}); //key listener method
} //run method
} //main class
Panelクラス:
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
@SuppressWarnings("serial")
public class Panel extends JPanel{ //class
static BufferedImage bg;
static int x = 20;
static int y = 195;
//PAINT METHOD
public void paint(Graphics g){ //method
super.paint(g);
g.setColor(Color.ORANGE);
this.setBackground(Color.BLACK);
//IMPORTING IMAGES
try {
bg = ImageIO.read(getClass().getResourceAsStream("Background.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//DRAWING GAME
g.drawImage(bg, 0, 0,500,275,null);
g.fillRect(x, y, 50, 50);
} //method
} //class
重力クラス:
public class Gravity implements Runnable{ //class
@Override
public void run() { //run method
while(Frame.panel.y != 195){ //while loop
try {
Thread.sleep(100);
} catch (InterruptedException e) { //catch exception
// TODO Auto-generated catch block
e.printStackTrace();
} //catch exception
Frame.panel.y += 5;
Frame.panel.repaint();
} //while loop
} //run method
} //class
これをデバッガに入れたり、println文を書き出してどうしたの。ここの人々は特定の質問には満足していますが、一連のコードをとり、デバッグするのはあまりうれしくありません。 – arcy
ありがとうございましたarcy。私はこれをここに投稿しようとした理由を長年解決しようとしました。私はJavaでトレーステーブルのようなものを使用することができます何らかの方法はありますか?構文は問題ないので、論理エラーのちょっとした並べ替え –
あなたは興味深い部分も表示していないようです。 'Gravity'はどこに使われますか?私がお勧めするのは、実際にどのように動作しているのか分からなければ、 'Thread'sをすべてスキップすることです。シミュレーションを作成する最も簡単な方法は、 'paint'、' doPhysics'、 'paint'、' doPhysics'などをインターリーブすることです。 – pingul