我已经制作了一个蛇游戏,并且效果很好,然而,当蛇到达屏幕边缘时,我让它循环回来。 问题是,当他回过头来时,似乎跳过一块?
我不知道如何这样说,所以这里有一段视频。 https://youtu.be/fxuEYsrIZMU
它不会仅仅出现在边缘上,而是跳过1到2个图块。 以下是代码段:
void update(std::vector<sf::RectangleShape>& food) {
std::cout << body.size();
for(int i = body.size() - 1; i > 0; i--) {
checkBounds(body.at(i)); // Check Snake is in screen.
/* ... */
}
checkBounds(body.at(0));
/* ... */
}
void checkBounds(sf::RectangleShape& point) {
if(point.getPosition().x < 0) point.move(WIDTH, 0);
if(point.getPosition().y < 0) point.move(0, HEIGHT);
if(point.getPosition().x > WIDTH) point.move(-WIDTH, 0);
if(point.getPosition().y > HEIGHT) point.move(0, -HEIGHT);
}
WIDTH,HEIGHT是屏幕W.和H.
身体是std::vector<sf::RectangleShape>
这是完整的代码:
https://pastebin.com/sr4Tbrin
答案 0 :(得分:2)
假设您有一块10格的电路板
当你决定换行时,蛇的头部将是11岁
但是他将被移到11-10 = 1,而不是0。
你需要:
if(point.getPosition().x > WIDTH) point.move(-(WIDTH+1), 0);
if(point.getPosition().y > HEIGHT) point.move(0, -(HEIGHT+1));