2
지금 제가 일하는 팩맨 운동에 약간의 문제가 있습니다.팩맨 자바 무브먼트 이슈
저는 원래의 팩맨 운동과 비슷한 움직임을 만드는 방법을 찾을 수 없습니다. 어떻게 움직여야하는지 설명하기 위해이 그림을 업로드했습니다. 지금 상태로는
, 나는 노란색 사각형과 파란색 벽 사이에 작업 충돌을 만들었습니다. 문제는 내가 그림에서와 같이 왼쪽으로 움직여서 위쪽 화살표를 클릭했을 때 멈추지 말고 계속 이동 한 다음 여유 공간이있을 때 올라간다는 것입니다. 당신이 위로를 클릭하면 지금
, 노란색 사각형은 다음과 같이 화살표 중지 : 충돌이있을 때내 보드 클래스에서 내 팩맨 내 움직임을 포함 클래스 및 코드를 업로드 감지 됨. 보드 클래스
Rectangle r5 = pacman.getOffsetBounds();
for (int j = 0; j<barriers.size(); j++) {
Barrier b = (Barrier) barriers.get(j);
Rectangle r4 = b.getBounds();
if (r5.intersects(r4)) {
pacman.setDx(0);
pacman.setDy(0);
break;
}
}
pacman.move();
}
에서
팩맨 클래스
public class Pacman {
private String pacmanup = "pacmanup.png";
private String pacmandown = "pacmandown.png";
private String pacmanleft = "pacmanleft.png";
private String pacmanright = "pacmanright.png";
private int dx;
private int dy;
private int x;
private int y;
private int width;
private int height;
private boolean visible;
private Image imageup;
private Image imagedown;
private Image imageleft;
private Image imageright;
public Pacman() {
Thread thread = new Thread();
thread.start();
ImageIcon i1 = new ImageIcon(this.getClass().getResource(pacmanup));
imageup = i1.getImage();
ImageIcon i2 = new ImageIcon(this.getClass().getResource(pacmandown));
imagedown = i2.getImage();
ImageIcon i3 = new ImageIcon(this.getClass().getResource(pacmanleft));
imageleft = i3.getImage();
ImageIcon i4 = new ImageIcon(this.getClass().getResource(pacmanright));
imageright = i4.getImage();
width = imageup.getWidth(null);
height = imageup.getHeight(null);
visible = true;
x = 27;
y = 27;
}
public int getDx() {
return dx;
}
public void setDx(int dx) {
this.dx = dx;
}
public int getDy() {
return dy;
}
public void setDy(int dy) {
this.dy = dy;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public Image getImageup() {
return imageup;
}
public Image getImagedown() {
return imagedown;
}
public Image getImageleft() {
return imageleft;
}
public Image getImageright() {
return imageright;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
public boolean isVisible() {
return visible;
}
public Rectangle getBounds() {
return new Rectangle(x, y, width, height);
}
public Rectangle getOffsetBounds() {
return new Rectangle(x + dx, y + dy, width, height);
}
public void move() {
x += dx;
y += dy;
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
dx = -1;
dy = 0;
}
if (key == KeyEvent.VK_RIGHT) {
dx = 1;
dy = 0;
}
if (key == KeyEvent.VK_UP) {
dx = 0;
dy = -1;
}
if (key == KeyEvent.VK_DOWN) {
dx = 0;
dy = 1;
}
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT) {
}
if (key == KeyEvent.VK_RIGHT) {
}
if (key == KeyEvent.VK_UP) {
}
if (key == KeyEvent.VK_DOWN) {
}
}
코드는 노란색 사각형이 이동하고 어떤 방향 감지 내 보드 클래스 내부에 문자열이라는 방향을 만들었습니다.
는
이미 몇 가지 코드를 작성하려고했으나 작동하지 않았 "아래" "위로" "오른쪽"또는 "왼쪽". 가 왼쪽으로 이동하고 당신이 클릭 할 때이 // moving to the left and tried go up
else if (pacman.getDx() == 0 && pacman.getDy() == -1 && direction.equals("left")) {
pacman.setDy(0);
pacman.setDx(-1);
break;
글쎄, 그것은 왼쪽으로 이동 계속하지만 :)
을해야으로 늘 여유 공간에 올라가 : 여기에 내가 뭘하려keydapter/pressed 키를 사용하면 뭔가가 있습니까? 어쩌면 눌러 진 키가 활성화되지 않았거나 u를 클릭했을 때 무엇인가?
나는 Key Bindings를 위해'KeyListener'를 피할 것입니다. [키 바인딩 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html). 그러나 키 프레스를 감지하면 플레이어가 그 방향으로 이동할 수 있는지 결정해야하며, 가능한 경우 델타를 그대로두고 이동 델타 만 업데이트하십시오 – MadProgrammer
확인할 논리를 추가하면 어떻게됩니까? dy를 즉시 감소시키지 않고 상승 움직임이 실제로 발생할 수 있는지 (collision == false)? – MarsAtomic