我最近一直在使用 C++ 和 SFML 最新版本开发一个简单的游戏,但我遇到了一个问题,即碰撞检测不是很好,例如即使敌人没有碰到玩家玩家也会死亡然而,但就在他附近。这是具有移动功能和碰撞检测代码的玩家类代码以及敌人类的移动:
`class PlayerA : public CircleShape { 公共(public):
//Constructor:
PlayerA(float xposition, float yposition, float radius, float s)
{
setRadius(radius);
setFillColor(Color::Yellow);
setOutlineColor(Color(00,80,00));
setOutlineThickness(-2);
setPointCount(3);
setSpeed(s);
setPosition(xposition,yposition);
}
//Movements of the player:
void up()
{
move(0,-10*speed);
}
void down()
{
move(0,10*speed);
}
void right()
{
move(10*speed,0);
}
void left()
{
move(-10*speed,0);
}
void checkA(ObsA *obs1=NULL,ObsA *obs2=NULL, ObsA *obs3=NULL, ObsA *obs4=NULL, ObsA *obs5=NULL)
{
if(obs2==NULL)
{
if(getGlobalBounds().intersects(obs1->getGlobalBounds()))
{
relevel();
}
}
private:
float speed=0.00;
void obs()
{
if(speed > 0)
{
rotate(0.5*speed);
}
else
{
rotate(0.5*speed);
}
}
private:
float speed = 0.00;
void obs()
{
if(speed > 0)
{
rotate(0.5*speed);
}
else
{
rotate(0.5*speed);
}
}
private:
float speed = 0.00;
是不是代码有问题,如何解决,谢谢!
最佳答案
intersects
函数只是检查两个矩形是否相交。如果您想在 SFML 中进行像素完美碰撞检测,则必须自己编写。
基本上,从 intersects
开始,如果为真,则获取相交矩形并检查两个原始矩形中是否有任何像素包含重叠的相关像素。 p>
关于c++ - SFML 中的碰撞不是那么好,如何改进它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38227166/