현재 학교 프로젝트를 위해 C++로 게임 엔진을 만들고 있습니다. 내가 모든 이동 객체의 정적 벡터를 포함하는 방법을 생각 게임에서 이동 객체 말을 업데이트하려면 다음과 같이 이동 객체가 생성 될 때정적 벡터로 객체 호출하기 C++
- , 그것은 모든 이동에 의해 공유되는 정적 벡터에 자신을 추가합니다.
- 모든 이동 가능한 객체에서 메소드 (이 경우 updatePosition)를 호출해야 할 때 정적 벡터에 액세스합니다.
Movable.h :
class Movable {
private:
static vector<Movable*> movables;
public:
Movable();
static vector<Movable*> getMovable();
virtual void updatePosition() = 0;
};
Movable.ccp는
#include "Movable.h"
vector<Movable*> Movable::movables;
Movable::Movable() {
movables.push_back(this);
}
vector<Movable*> Movable::getMovable() {
return movables;
}
그래서, 기본적으로 이동을 생성 할 때마다 그것이 벡터 자체를 민다. 내 GameScene 클래스에서이 벡터에 액세스하려고합니다.
void GameScene::updateLogic() {
for (Movable* movable : Movable::getMovable()) {
movable->updatePosition();
}
}
내 문제는 게임을 실행할 때 세그먼트 오류가 발생한다는 것입니다. 각 이동 가능한 대상물 차례로 각각 2 명 동산을 포함하는 벡터를 갖는 2 개 이동 가능한 물체를 포함하는 이동 벡터를 갖는 것처럼 ..... 같습니다 Debug output
이동은 벡터 자체를 가산하여를 생성 것을 의미 새로운 무언가 또는 무언가? 그래서 그것은 무한히 추가되지만 unfortuneatly 나는이 오류의 원인을 찾을 수 없습니다, 그래서 내가 여기 물었다. 어떤 도움이 appretiated, 감사합니다!
EDIT :
class Tank : public Drawable, public Entity, public Movable, public Collidable {
private:
...
public:
...
void updatePosition() override ;
};
및
class HumanTank : public Tank {
private:
...
public:
...
};
이 상기 GameScene 클래스의 생성자에서 생성된다 :
를 가동 상속 객체가 생성 될 때 가동을 만든GameScene::GameScene(bool isAi, sf::Vector2u windowSize) {
sf::Vector2f tank1SpawnPoint {windowSize.x/20, windowSize.y - windowSize.y/8};
HumanTank tank1 = HumanTank(tank1SpawnPoint, "tank1.png", "pipe1.png", "Tank 1", 100);
}
'정적 인'벡터는 클래스의 모든 객체가 공유한다는 것을 의미합니다. 따라서 모든 객체에서 볼 수있는 것은 동일한 * 벡터입니다. –
아마도 push_back 이후에 객체가 다른 메모리 위치로 이동했을 수 있습니다. 그러면 벡터의 포인터가 무효화되고 segfault가 설명됩니다. – emlai
@BoPersson 나는 그것이 모든 이동 가능한 객체가 그 벡터에 추가 될 수 있고 또 다른 클래스로부터 얻을 수 있도록 정적 벡터를 사용하는 이유임을 알고있다. – Binbon