이 GIF 제발 봐 이동 얻을 수 있습니다 충돌이 감지하지만 버그 - 내부와하지 영향 플랫폼
충돌이 제대로 감지되어 있지만, 그 고장이 날 성가 시게 ... 사각형이 다른 사각형 안에 얻을 수있다 . 직사각형이 x 축에 충돌 할 때 (그리고 오른쪽 - 왼쪽 화살표가 아직 남아있는 경우) 영향을받지 않는 것은 움직입니다. 아이디어를 얻으려면 어떻게해야합니까? 의 keyPressed,의 keyReleased, 이동() 및 checkCollision() 메소드 :
@Override
public void keyPressed(KeyEvent k) {
int key = k.getKeyCode();
switch (key) {
case KeyEvent.VK_LEFT:
left = true;
game.physic.xVel = 2;
break;
case KeyEvent.VK_RIGHT:
right = true;
game.physic.xVel = 2;
break;
case KeyEvent.VK_SPACE:
//jump
break;
default:
break;
}
}
/*
* game.lvl1.getX()[i] to ablica z współrzędnymi platform
*/
public void move() {
if (left) {
switch (game.currentLevel()) {
case 1:
for (int i = 0; i < game.lvl1.getX().length; i++)
game.lvl1.getX()[i] += game.physic.xVel;
break;
}
} else if (right) {
switch (game.currentLevel()) {
case 1:
for (int i = 0; i < game.lvl1.getX().length; i++)
game.lvl1.getX()[i] -= game.physic.xVel;
break;
}
}
}
public void checkCollision() {
switch (game.currentLevel()) {
case 1:
for (int i = 0; i < game.lvl1.getX().length; i++) {
if (game.man.getBounds().intersects(game.lvl1.getBounds(i))) {
if (game.man.getBounds().getY() < game.lvl1.getBounds(i)
.getY() && !game.man.isOnGround) {
/*
* collision above platform
*/
game.man.setyPos(-2);
game.man.isOnGround = true;
break;
} else if (game.man.getBounds().getY() > game.lvl1
.getBounds(i).getY() && isJumping) {
/*
* collision below
*/
game.man.setyPos(2);
game.man.isOnGround = false;
break;
} else if (game.man.getBounds().getX() < game.lvl1
.getBounds(i).getX() && right) {
/*
* collision from left
*/
game.lvl1.getX()[i] += 2;
right = false;
break;
} else if (game.man.getBounds().getX() > game.lvl1
.getBounds(i).getX() && left) {
/*
* collision from right
*/
game.lvl1.getX()[i] -= 2;
left = false;
break;
}
} else {
game.physic.xVel = 2;
game.man.isOnGround = false;
}
}
}
}
@Override
public void keyReleased(KeyEvent k) {
int key = k.getKeyCode();
switch (key) {
case KeyEvent.VK_LEFT:
left = false;
game.physic.xVel = 0;
break;
case KeyEvent.VK_RIGHT:
right = false;
game.physic.xVel = 0;
break;
case KeyEvent.VK_SPACE:
break;
default:
break;
}
}
paintLevel()는 paintComponent에 호출된다. 그리고 paintComponent는 gameloop에서 호출됩니다.
private void paintLevel(Graphics2D g2d) {
switch (currentLevel()) {
case 1:
for (int i = 0; i < lvl1.getX().length; i++) {
g2d.draw(lvl1.getBounds(i));
}
break;
}
}
paintLevel() 코드도 제공 할 수 있습니까? – rtheunissen
@ paranoid-android, done –
고마워, 내가 보자. 멋진 gif btw. – rtheunissen