我目前正在用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方向乘以一个单元格空间(大小) - &gt; dx *尺寸和dy *尺寸。 然后身体的其余部分移动,头部后面的部分得到头部的坐标,该部分后面的部分从他面前的部分获得coodrinates等。
现在我正试图与蛇本身发生一些碰撞。我尝试了几种方法,例如:
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()方法。我不知道为什么,因为第二部分应该在头部后面放置两个体部,这使得它不可能与头部矩形相交。
我的问题在哪里?
答案 0 :(得分:0)
哦,这是我在这里做的一个非常大的失败。 添加新零件时,新零件将获取头部的坐标。当它在创建时得到它的坐标时,当然会与头相交!
尽管如此,感谢回复!
新的addPart方法,更正了parts.get(0) - &gt; 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));
}
}