Java 碰撞检测在Snake游戏中不起作用
我一直在写一个蛇游戏(复古街机游戏),在实现碰撞检测时,我意识到它根本不起作用。这不是我第一次不得不使用碰撞检测,所以我认为问题不在那里(但它可以!)。相反,我认为它与外部类和一些关于坐标不更新的东西有关,但也可能是其他东西。代码如下: 注意:这不是完整的代码,但为了避免混淆。。。这是所有课程的列表(是的,我知道,有很多……但我喜欢组织) 主要 看法 模型 移动动作 实体(接口) 食物 段 蛇 方向(枚举) 模型 分段Java 碰撞检测在Snake游戏中不起作用,java,collision-detection,game-physics,Java,Collision Detection,Game Physics,我一直在写一个蛇游戏(复古街机游戏),在实现碰撞检测时,我意识到它根本不起作用。这不是我第一次不得不使用碰撞检测,所以我认为问题不在那里(但它可以!)。相反,我认为它与外部类和一些关于坐标不更新的东西有关,但也可能是其他东西。代码如下: 注意:这不是完整的代码,但为了避免混淆。。。这是所有课程的列表(是的,我知道,有很多……但我喜欢组织) 主要 看法 模型 移动动作 实体(接口) 食物 段 蛇 方向(枚举) 模型 分段 import java.awt.Color; import
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
public class Segment {
Point location;
Point oldLocation;
public Segment(Point location) {
this.location = location;
}
public Dimension getSize() {
return new Dimension(20, 20);
}
public void setLocation(Point location) {
oldLocation = location;
this.location = location;
}
public Point getLocation() {
return location;
}
public Point getOldLocation() {
return oldLocation;
}
public void paint(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(location.x, location.y, 20, 20);
}
}
Snake
import java.awt.Graphics;
import java.awt.Point;
public class Snake implements Entity {
Point location;
Segment[] segments;
int segmentCount = 0;
public Snake(Point location) {
this.location = location;
segments = new Segment[25];
segments[segmentCount] = new Segment(new Point(location.x, location.y));
segmentCount++;
}
public void increaseSegmentCount(int relativeTo) {
// TODO Add code to make it add the new Segment correctly
segments[segmentCount] = new Segment(
new Point(segments[segmentCount - 1].getLocation().x + segments[segmentCount - 1].getSize().width,
segments[segmentCount - 1].getLocation().y + segments[segmentCount - 1].getSize().height));
if (relativeTo == 1) {
}
segmentCount++;
}
public Segment[] getSegments() {
return segments;
}
public int getSegmentCount() {
return segmentCount;
}
@Override
public void paint(Graphics g) {
for (Segment segment : segments) {
if (segment != null) {
segment.paint(g);
}
}
}
}
您需要在update方法中的某个位置调用checkFoodCol方法,例如
public void update() {
Segment snakeHead = snake.getSegments()[0];
checkFoodCol(snakeHead);
changeHeadLoc(snakeHead);
changeSegmentLoc();
}
您需要在update方法中的某个位置调用checkFoodCol方法,例如
public void update() {
Segment snakeHead = snake.getSegments()[0];
checkFoodCol(snakeHead);
changeHeadLoc(snakeHead);
changeSegmentLoc();
}
我没有看到上面任何调用checkFoodCol的代码。这应该在你的更新方法中吗?天哪。。。我怎么会错过呢?很抱歉浪费了你的时间,我还是一个程序员新手,所以这种事情经常发生。没问题。作为答案添加。很高兴能提供帮助:)我没有看到上面任何调用checkFoodCol的代码。这应该在你的更新方法中吗?天哪。。。我怎么会错过呢?很抱歉浪费了你的时间,我还是一个程序员新手,所以这种事情经常发生。没问题。作为答案添加。很高兴为您提供帮助:)
public void update() {
Segment snakeHead = snake.getSegments()[0];
checkFoodCol(snakeHead);
changeHeadLoc(snakeHead);
changeSegmentLoc();
}