我试图使用重叠方法来确定两个精灵是否发生碰撞,但出于某些原因它根本不起作用。即使我清楚地看到精灵相互碰撞,它总是返回false。
有趣的是,这不是我第一次遇到这种情况。我不知道为什么重叠方法不起作用。
这是我的英雄类,它有一个名为isCollided的方法:
package world_objects;
import helpers.Values;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Rectangle;
/* Created by David Lasry : 10/25/14 */
public class Hero{
public enum HeroState {
Walking_Forward,
Walking_Left,
Walking_Right,
Dead
}
public HeroState state;
private Rectangle body;
private float x,y;
public Hero() {
x = Values.SCREEN_WIDTH/5;
y = Values.SCREEN_HEIGHT/5;
body = new Rectangle(x, y, Values.Hero_Width, Values.Hero_Height);
state = HeroState.Walking_Forward;
}
public Rectangle getBody() {
return body;
}
public boolean isCollided(Rectangle rect) {
Gdx.app.log("Collision Detected", ""+body.overlaps(rect));
return rect.overlaps(body);
}
public HeroState getState() {
return state;
}
public float getX() {
return x;
}
public float getY() {
return y;
}
public void setX(float x) {
this.x = x;
}
public void setY(float y) {
this.y = y;
}
}
你看,我试图通过找出返回值是什么来调试它。每次它都是false,即使它应该是true。
我能做什么?有没有其他方法可以使用?
编辑:经过一点调试和尝试实时确定两个对象(Hero, Object)的值后,我得到了这个屏幕截图:http://i.gyazo.com/852fea520b060870a4cb5731c21fa833.png。 这两个对象在完全相同的位置上的值是( X/Y 在左下角):
**Hero X/Y: 64.5,283.40985**
**Hero WIDTH/HEIGHT: 25,50**
**Square X/Y: 76.25,0.0**
**Square WIDTH/HEIGHT: 47.5,309.13348**
正如您所看到的,这些值是非常正常的。我不明白问题出在哪里。