Hello, I’m new here.
I’m coding platform game. I had been stuck on collision detection for 3 days, finally I’ve solved it.
But now I have to pull player down when he doesn’t intersect anything. I did it this way:
Runnable gravity = new Runnable() {
public void run() {
while (true) {
player.y += yspeed;
collide.gravity();
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
//Gravity method:
public void gravity() {
for (int i = 0; i < box.getX().length; i++)
if (player.getBounds().intersects(box.getBounds(i))
&& game.yspeed != 0) {
game.yspeed = 0;
break;
} else {
game.yspeed = 1;
}
}
And it works well, player is going down and stops when collides. But there’s one glitch caused by right-left collision. Player can’t move.
check() method:
public void check() {
// collision from right side
for (int i = 0; i < box.getX().length; i++) {
if (player.getBounds().intersects(box.getBounds(i))
&& player.xspeed > 0) {
setLeft(true);
} else if (!player.getBounds().intersects(box.getBounds(i))
&& player.xspeed < 0) {
setLeft(false);
}
if (player.getBounds().intersects(box.getBounds(i))
&& player.xspeed < 0) {
setRight(true);
} else if (!player.getBounds().intersects(box.getBounds(i))
&& player.xspeed > -1) {
setRight(false);
}
}
}
And methods responsible for movement:
@Override
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch (key) {
case KeyEvent.VK_LEFT:
left = true;
game.collide.check();
move();
break;
case KeyEvent.VK_RIGHT:
right = true;
game.collide.check();
move();
break;
case KeyEvent.VK_UP:
y -= 3;
game.repaint();
break;
case KeyEvent.VK_DOWN:
y += 3;
game.repaint();
break;
default:
break;
}
}
private void move() {
if (left) {
leftSpeed = 1;
xspeed = 1;
scroll();
} else if (right) {
leftSpeed = 1;
xspeed = -1;
scroll();
}
}
public boolean dudeLeftCollision() {
return game.collide.left;
}
public boolean dudeRightCollision() {
return game.collide.right;
}
private void scroll() {
if (dudeLeftCollision() && !dudeRightCollision()) {
leftSpeed = 0;
rightSpeed = -1;
for (int i = 0; i < game.box.getX().length; i++) {
game.box.getX()[i] = game.box.getX()[i];
}
}
if (!dudeLeftCollision() && dudeRightCollision()) {
leftSpeed = 0;
rightSpeed = 1;
for (int i = 0; i < game.box.getX().length; i++) {
game.box.getX()[i] = game.box.getX()[i];
}
}
if (!dudeLeftCollision() && !dudeRightCollision()) {
for (int i = 0; i < game.box.getX().length; i++) {
game.box.getX()[i] += xspeed;
}
}
game.repaint();
}
It’s my story. I have to figure out how to code collision-detection gravity-right-left without any glitches.
Hope you help me,
Thank you,
Szinek
I wonder if my english is very bad.
Oops, wrong board? I should write this in “Game Mechanics”?