임 내 중력 클래스에 문제가있어서 사용자가 점프 할 때마다베이스에 도달 할 때까지 y 좌표를 변경해야하지만 점프 버튼 (W)을 반복해서 누르면 버그가 발생하고 큐브는 베이스.자바 중력 버그
메인 클래스 :
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
패널 클래스 :
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. 나는 오랫동안 그것을 해결하려고 노력했다. 그래서 나는 이것을 여기에 올리려고했다. 자바에서 추적 테이블과 같은 것을 사용할 수있는 방법이 있습니까? 문법이 괜찮 으면 논리적 인 오류 일뿐입니다. –
흥미로운 부분도 보이지 않는 것 같습니다. 'Gravity'는 어디에 사용됩니까? 내 권고안은 그들이 어떻게 작동하는지 정말로 모른다면'Thread's를 모두 건너 뛰는 것이다. 시뮬레이션을 만드는 가장 간단한 방법은 'paint','doPhysics','paint','doPhysics' 등을 인터리브하는 것입니다. – pingul