在这段代码中,我试图在敌人(不断移动)和玩家之间进行碰撞检测。我这样设定,以便敌人在被击中时会朝向对方方向。但是当两个人从不同的方向相互撞击时,就会出现一个错误:敌人会被困在玩家中,直到我移动他为止。我知道,我应该改变所以它远离玩家,而不是向相反的方向移动,但我不知道如何。请帮帮我!
public Enemy(float x, float y, ID id, Handler handler) {
super(x, y, id);
this.handler = handler;
vely = -6;
velx = -6;
}
protected void tick(LinkedList<Object> object) {
x += velx;
y += vely;
if(x <= 0){
if(velx < 0) velx = velx * -1;
}
if(y <= 0) {
if(vely < 0) vely = vely * -1;
}
if(x >= 605){
if(velx > 0) velx = velx * -1;
}
if(y >= 418) {
if(vely > 0) vely = vely * -1;
}
collision();
}
private void collision() {
for(int i = 0; i < handler.object.size(); i++) {
Object obj = handler.object.get(i);
if(obj.getId()== id.Player) {
if(getBound().intersects(obj.getBound())) {
velx = velx * -1;
vely = vely * -1;
}
}
}
}
protected void render(Graphics g) {
g.setColor(Color.BLACK);
g.fillOval((int)x, (int)y, 30, 30);
}
public Rectangle getBound() {
return new Rectangle((int)x, (int)y, 30, 30);
}
答案 0 :(得分:0)
如果敌人位于玩家的左侧,则将敌人的velx
设置为否定,否则为正。类似地,vely
如果敌人高于玩家。
// on collision...
velx = Math.abs(velx);
vely = Math.abs(vely);
if ( enemy_left_of_player() )
velx = -velx;
if ( enemy_above_player() )
vely = -vely;
精确的左/上逻辑将取决于播放器的大小(它也是30像素?)