Hi! A little introduction, my name is Seb and I just started doing Java this past week. I have experience with C++ and Flash/ Actionscript which helps me a lot, so I jumped straight into game developing with Java
So a little background, my friend tried giving me a challenge: make a car that you can drive from top view, and have it get more and more damaged as you hit the walls. So I took it as a good way to learn by trial and error how to do it !
This is what I have so far:
It works great so far ! Except: for the collision detecting on the walls. If you hit the wall in certain ways, sometimes it will float off through the wall into non-existence, or get stuck. But I realize thats because on a rotating car, I just made a rectangle around it and checked if it x.intercepts(y);
Ideally what I would love to do, is to make a front collision bumper on it and a back one for when you're driving forwards or backwards, but I have no idea how to place it at the right spot as the car is turning. This is where I need help
Here's my coding for the collision detection:
Board.java
public void checkCollisions() { Rectangle r3 = car.getBounds(); collide = false; //WALLS for (int i = 0; i < walls.size(); i++) { Wall b = (Wall)walls.get(i); //walls objects in an ArrayList Rectangle r2 = b.getBounds(); //return rectangle from the wall obj if (r3.intersects(r2)) { //ctest car.collision(); collide = true; } } if (!collide) { car.resetCollision(); } }
Car.java
(walls.class has the same function)
car.collision() just sets 'collision' to be true in car so when its checked in the car's loop it does this:
car.java
if (collision) { rotation -= 90; //face the rotation towards the sprite if (accel >0) { accel = accel/accel; } if (accel < 0) { accel = -accel/accel; } //bounce car back away from the wall x += Math.cos(Math.toRadians(rotation))*-(accel*2); y += Math.sin(Math.toRadians(rotation))*-(accel*2); rotation += 90; }
now, as far as the car control goes, I have:
car.java (keyboard input)
if (key == KeyEvent.VK_LEFT) { if (accel != 0) { rotation -= 6; makeTire(); } }
car.java (car's loop)
Board.java (in paint loop)
g2d.rotate(Math.toRadians(car.getRotation()), car.getX() + (car.getWidth()/2), car.getY() + (car.getHeight()/2)); //rotate the from its origin g2d.drawImage(car.getImage(), car.getX(), car.getY(), this); //draw the car at its position g2d.setTransform(at);
(I tried to limit the code i paste to just whats necessary to get the point across.. if you'd like to see more just request)
So any help or suggestions/concepts on how to go about getting better collision would be helpful !