Chest
의 벡터를 저장하는 클래스를 만들려고합니다. Chest
은 내가 만든 사용자 정의 클래스입니다. 여기 ItemManager.h
의 중요한 부분이다C++ - 벡터의 객체를 수정할 수 없습니다.
class ItemManager
{
public:
...
void GenerateItems(sf::Vector2u currentPos);
void CheckCollisions(Collider& collider);
...
private:
std::vector<Chest> chests;
};
는 그리고 여기 (관련 부분) ItemManager.cpp
이다
void ItemManager::GenerateItems(sf::Vector2u currentPos)
{
if (rand() % 50 == 0)
chests.push_back(Chest(sf::Vector2f(16 * currentPos.x + 1, 16 * currentPos.y - 4 - 2)));
}
void ItemManager::CheckCollisions(Collider & collider)
{
for (Chest chest : chests)
if (collider.CheckCollision(chest.getCollider(), 1.0f))
chest.OnInteract();
}
지금 chest.OnInteract()
가 CheckCollisions()
에서 호출되는 경우에도 있다는 데 문제 , 가슴에 아무것도 일어나지 않습니다. 그러나 GenerateItems()
메서드에서 chest.OnInteract()
을 호출하면 가슴에 예상되는 내용이 적용되므로 메서드에 문제가 없습니다. 내 생각에, 다른 메서드에서 로컬 변수를 만들어서 vector
을 추가하기 때문에 추가되는 개체가 범위를 벗어나 더 이상 참조 할 수 없습니다. 그러나 vector
에 추가하면 사본이 생성되므로 문제가되지 않는다고 믿는 것이 좋습니다. 어떤 도움을 주셔서 감사합니다.
void Chest::OnInteract()
{
open = true;
chest.setSize(sf::Vector2f(14, 16));
chest.move(sf::Vector2f(0, -2));
chest.setTextureRect(sf::IntRect(14, 0, 14, 16));
}
곳 open
및 chest
이 Chest
의 멤버 변수입니다
편집
여기 내 OnInteract()
방법이다.
좋아, 나는 그 라인을 따라 뭔가있을 것이라고 생각했다. 그러나, 나는 당신이 말한 것을 시도해 보았지만 어떤 차이점도없는 것처럼 보였습니다. 루프 내에서 가슴을 어떻게 참조하는지 편집해야합니까? –
아니요, 나머지는 정상입니다. 'OnInteract()'메소드는 어떻게 생겼습니까? – simpel01
또한'if' 문의 조건이'true'를 반환 할 것입니까? 'If'가 절대 사용되지 않기 때문에 당신의 프로그램이 결코'OnInteract()'메소드를 실행하지 않을 수도 있습니다. – simpel01