나는 던전 게임에서 몇 명의 친구들과 일하면서 길 찾기를하고있다. 이 게임은 타일 기반 및 우리가 구현할 계획하고 길 찾기이 있습니다 :벡터지도, 나쁜 접근 자
클래스 PathMapper 모든 타일
클래스의 몬스터가 특정 방향으로 여행이 그리드를 사용하여 주어진 타일에서있는 거리의 격자를 생성 타일 (당장은 항상 플레이어)
우리는 4 명의 플레이어를 가질 계획이지만 우리는 스크립트에서 동적 인 번호를 지원하고 싶습니다. 각 플레이어는 정수 형태의 ID를 가지고 있습니다.
각 플레이어마다 PathMapper로 생성 된 하나의 그리드가 필요하며 모든 몬스터가이를 공유 할 수 있습니다. 그리드를 생성하는 속도가 느려지므로 모든 몬스터에 대해 플레이어 당 한 번만 수행하면 길 찾기에 적합한 솔루션처럼 보입니다.
필자는 "PathMapper"라는 클래스를 가지고 있습니다.이 클래스는 시작, 타일의 타일을 거리의 격자로 생성합니다. 이론적으로, 이들 중 4 개가 생성 될 것입니다 - 각 플레이어마다 하나. 플레이어가 길을 찾을 때, 플레이어의 ID를 물어볼 것이고, 길 찾기에 사용할 타일의 격자를 물어볼 것입니다. 서버는 이러한 그리드를 "createMap (playerID, playerXPosition, playerYPosition)"로 업데이트합니다.
그래서 각 격자는이 벡터의 - 벡터 개인지도 "경로 맵"에서 플레이어의 ID에 매핑, 괴물에 액세스 할있는 값 "getLocalPath은()"문제가 있다는 것입니다입니다 ("pathMap [ID] [x] .push_back (9000);") 나는 "EXE_BAD_ACCESS"를 얻습니다. "9000"을 넣으 려 시도하기 전에 약 12 번의 반복을 거친다는 것을 알아 두어야합니다. 던전 -> 너비와 지하 감옥 -> 높이가 맞습니다 (두 가지 모두 20입니다. 실제 게임), ID의 '정확성'이 코드의 접근 자에 영향을 주어서는 안됩니다. 맞습니까? 여기
reserve(20)
for(i=0; i<20; i++)
reserve(20)
for(j=0; j<20; j++)
access(i,j) // error!?
코드입니다 :
나는 조금 내가 무엇을 내가 뭘 생각하는 것은 C를 그것을 통해 반복, 공간을 확보하고, 난 그냥 예약 된 메모리에 액세스하려고/B, 당황 해요 :
class PathMapper{
public:
PathMapper(Dungeon* d);
void createMap(int ID, int x, int y);
// returns values of the surrounding tiles (up, right, down, left)
std::vector<int> getLocalPath(int ID, int x, int y);
private:
Dungeon* dungeon;
std::vector< std::vector<bool> > wallBitmap;
std::map<int, std::vector< std::vector<int> > > pathMap;
}
PathMapper::PathMapper(Dungeon* d) {
dungeon = d;
wallBitmap = dungeon->getWalls(); // bools tell if there is a wall on a tile
}
void PathMapper::createMap(int ID, int x, int y) {
pathMap[ID].reserve(dungeon->width());
for(int x=0; x<dungeon->width(); x++) {
pathMap[ID][x] = std::vector<int>();
pathMap[ID][x].reserve(dungeon->height());
for(int y=0; y<dungeon->height(); y++) {
if(wallBitmap[x][y]) {
pathMap[ID][x].push_back(9000); // error is here
}
else {
pathMap[ID][x][y] = -1;
}
}
}
// code to calculate values here; shouldn't affect the code above
}
이 조금 장황. 오류 및 오류를 일으키는 코드에 집중할 수 있습니까? – jww