【发布时间】:2014-01-13 16:46:10
【问题描述】:
我已经尝试了几天,花了几个小时在网上搜索,但无济于事。我遇到了碰撞问题,我可以检测到碰撞,但我的问题是阻止玩家进入瓷砖。我已经尝试了所有我能想到的。我正在使用 1 表示实体和 0 表示被动检测我的 tilemap 的碰撞
for(int i = 0; i < tiles.size(); i++)
{
if(colMap[tiles[i].y][tiles[i].x] == 1)
{
myrect.setFillColor(sf::Color::Red);
collide = true;
break;
}
else
{
collide = false;
break;
}
}
这工作正常,我的文本播放器一旦与瓷砖碰撞就会变成红色,但我不知道如何阻止玩家进入该瓷砖开始,我当前的设置我试图禁用移动,但发生的只是玩家进入碰撞设置为 true 并禁用控件,导致玩家完全卡住。
我现在的动作很基础
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
if(walking == false)
{
//colCheck();
if(!collide)
{
nextspot = x - tilesize;
move[LEFT] = true;
walking = true;
}else
{
std::cout << "Collsion!" << std::endl;
}
}
}
非常感谢任何帮助。
【问题讨论】:
-
如果移动导致碰撞,将玩家位置恢复到碰撞前的位置。或者,如果移动会导致碰撞,请不要移动玩家。
-
这会更适合游戏开发 (dot) Stack Exchange。
-
只是出于好奇,您是如何绘制地图的?什么操作系统?
-
for循环没有意义;您开始检查每个图块,然后在检查第一个图块后中止。我看不出它是如何工作的,除非tiles[0]恰好与所讨论的瓷砖具有相同的颜色。而且您的“当前运动”似乎不涉及更改x。