Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 碰撞检测在Snake游戏中不起作用_Java_Collision Detection_Game Physics - Fatal编程技术网

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();
}