我目前正在用java编写一些简单的贪吃蛇游戏。蛇对象有一个充满身体部位的数组。这些身体部位都包含一个矩形。
蛇的更新方法是这样的:
public void update() {
if(isMoving) {
if(System.currentTimeMillis() - moveTimer > moveSpeed) {
if(parts.get(0).getX()+dx*size >= 0+GameView.GRID_PADDING_LEFT && parts.get(0).getY()+dy*size >= 0+GameView.GRID_PADDING_TOP && parts.get(0).getX()+dx*size <= ((GameView.GRID_WIDTH-1)*size)+GameView.GRID_PADDING_LEFT && parts.get(0).getY()+dy*size <= ((GameView.GRID_HEIGHT-1)*size)+GameView.GRID_PADDING_TOP) {
for(int i = parts.size()-1; i > 0; i--) {
parts.get(i).setLocation((int)(parts.get(i-1).getX()), (int)(parts.get(i-1).getY()));
}
parts.get(0).setLocation(parts.get(0).getRect().left+dx*size, parts.get(0).getRect().top+dy*size);
moveTimer = System.currentTimeMillis();
}else {
die();
}
}
}
}
总而言之,蛇将其头部移动到dx方向乘以一个细胞空间(大小)-->dx*size和dy*size。然后身体的其余部分移动,头部后面的部分获得头部的坐标,该部分后面的部分从他前面的部分获得坐标,等等。
现在我正试图与蛇本身发生一些碰撞。我尝试了几种方法,例如:
if(parts.size() > 2) {
for(int i = 3; i < parts.size(); i++) {
if(parts.get(0).getRect().intersect(parts.get(i).getRect())) {
die();
}
}
}
但是一旦 bodypart 数组达到 2 个部分的限制,die() 方法就会被调用。我不知道为什么,因为第二部分应该位于头部后面的两个身体部位,这使得它不可能与头部矩形相交。
我的问题在哪里?
,这是我在这里做的一个非常大的失败。添加新零件时,新零件将获取头部的坐标。当然,当它在创建时获得它的坐标时会与头部相交!!
不过,感谢您的回复!
新的addPart方法,更正了parts.get(0) --> parts.get(parts.size()-1)
public void addPart(int amount) {
for(int i = 0; i < amount; i++) {
parts.add(new BodyPart(parts.get(parts.size()-1).getX(), parts.get(parts.size()-1).getY(), parts.get(parts.size()-1).getHue()-5));
}
}