所以,我决定在我的游戏中创建一个碰撞检测功能,然后把它放入敌人类中。然后我把它放到“enemy.cpp”,我使用“this”指针。 代码:
if(((this->sprite.getPosition().y + this->sprite.getTextureRect().height) >= blocklist[i].sprite.getPosition().y) &&
(this->sprite.getPosition().y <= blocklist[i].sprite.getPosition().y))
这给了我SIGSEGV分段错误。我无法找到这一行中的问题,这里是敌人类供参考。
class enemyclass
{
public:
sf::Sprite sprite;
sf::Sprite bubble;
//PROPERTIES
float xspeed, yspeed;
int x, y;
float health;
bool colR, colL, colU, colD;
int skin;
void detectCollisions(int blocksize);
};
和我制作了一个用作敌人列表的矢量的块类:
class blockclass
{
public:
sf::Sprite sprite;
int x, y;
};
我会非常感谢你的回答,因为我无法找出问题所在。
答案 0 :(得分:0)
正如其他人所说,如果某些复杂的指令导致错误,请将其拆分为较小的部分并查看错误产生的部分:
if( this->x == 0) // changes nothing
x = 0; // but validates 'this'
int thisy = sprite.getPosition().y;
int thish = sprite.getTextureRect().height;
sf::Sprite &that = blocklist[i].sprite;
if( that.x == 0) // validate 'that'
that.x = 0;
int thaty = that.getPosition().y;
if(thisy + thish >= thaty && thisy <= thaty) {
// ......
}