我试图与矩形进行简单的碰撞。当两个物体发生碰撞时,游戏会重置。使用此代码,如果某个对象被另一个具有左角的对象击中,我的游戏将重置。我试图做if-else陈述,但我不确定为什么我没有得到理想的结果。
public boolean hitByObstacles(ObstaclesCars obstaclesCars) {
boolean isHit = false;
for (Car car : obstaclesCars.ObstaclesCarsList) {
if (car.position.dst(position) < Constants.HUMANPLAYER_RADIUS) {
isHit = true;
}
}
return isHit;
}
这是我整个Car类:
public class Car {
public static final String TAG = Car.class.getName();
Vector2 position;
Vector2 velocity;
public Car (Vector2 position){
this.position = position;
this.velocity = new Vector2();
}
public void update (float delta) {
velocity.lerp(Constants.CAR_ACCELERATION,delta);
position.mulAdd(velocity, delta);
}
public void render (ShapeRenderer renderer){
renderer.setColor(Constants.CAR_COLOR);
renderer.set(ShapeRenderer.ShapeType.Filled);
renderer.rect(position.x,position.y,Constants.CAR_WIDTH, Constants.CAR_HEIGHT);
}
HUMANPLAYER_RADIUS
public static final float HUMANPLAYER_RADIUS = 0.5f;
答案 0 :(得分:0)
在不知道你在做什么的情况下,这是一个边界框碰撞的例子:
在要检查碰撞的对象上,您应该有一个Rectangle对象,该对象将成为该对象的边界框。
所以Player类看起来像这样:
public class Player{
public Rectangle bound;
public Player(float width, float height, float posX, float posY){
bound = new Rectangle(width, height, posX, posY);
}
}
对于你的Car类来说完全一样。
然后检查碰撞:
public boolean checkForCollision(Car car, Player player){
if(car.bound.overlaps(player.bound))return true;
return false;
}