我正在設計一個非常簡單的視頻遊戲來幫助學習使用SDL。我遇到了碰撞檢測問題。爲了繪製遊戲地圖(使用拼圖),我在一個名爲Map
的類中創建了一個名爲Tile
的類的指針的二維數組。 Map
類具有一個稱爲set_tiles
的函數,該函數通過從.MAP
文件讀取它們來定義所有圖塊。我還有一個名爲Hero
的課程,其中包含有關英雄的所有功能和變量。所有非常微不足道的。但是,當我嘗試從其他任何地方讀取數組時,它會產生奇怪的結果(通過bug測試,我發現x和y值有數千個關閉,但我可能在那裏犯了錯誤)。這是代碼。閱讀指向一個類的二維數組指針
SDL_Surface* Map::set_tiles (SDL_Surface* tile_image) {
Setup setup;
//Make a temporary map to draw the tiles to
Uint32 rmask, gmask, bmask, amask;
if (SDL_BYTEORDER == SDL_BIG_ENDIAN) {
rmask = 0x00000000;
gmask = 0x00000000;
bmask = 0x00000000;
amask = 0x00000000;
}
else {
rmask = 0x00000000;
gmask = 0x00000000;
bmask = 0x00000000;
amask = 0x00000000;
}
SDL_Surface* temp_map = SDL_CreateRGBSurface(SDL_SWSURFACE, MAP_WIDTH, MAP_HEIGHT, 32, rmask, gmask, bmask, amask);
//Open the map
std::ifstream map ("Test.map");
//Catch any errors
if (map.fail()) return NULL;
//Initialize the tiles
for (int y = 0; y < MAP_HEIGHT/TILE_HEIGHT; y++) {
for (int x = 0; x < MAP_WIDTH/TILE_WIDTH; x++) {
//Determines the tile type
int tile_type = -1;
//Read the tile type from the map
map >> tile_type;
//Make sure it's a real tile
if (tile_type < 0 || tile_type >= TILE_SPRITES) {
map.close();
return NULL;
}
//Error check for the .map file
if (map.fail()) {
map.close();
return NULL;
}
//Add the tile to the array
tile_array[x][y] = &Tile (x, y, tile_type);
//Create the temp. image crop
SDL_Rect* temp_crop = &tile_array[x][y]->get_crop();
//Edit the temp. map
setup.apply_surface (x * TILE_WIDTH, y * TILE_HEIGHT, tile_image, temp_map, temp_crop);
}
}
map.close();
//Return the modified map
return temp_map;
}
現在,如果我嘗試在其他地方讀取它,我有一個問題。 I.E.
bool Hero::collision_check (Map map) {
for (int y = 0; y < MAP_HEIGHT/TILE_HEIGHT; y++) {
for (int x = 0; x < MAP_WIDTH/TILE_WIDTH; x++) {
Tile* tile = map.tile_array[x][y];
if (collision (box, tile->get_box())) {
//Switch the effect based on the tile type
switch (tile->get_type()) {
case TILE_RED:
case TILE_GREEN:
case TILE_BLUE:
return false;
break;
case TILE_CENTER:
case TILE_TOP:
case TILE_TOPRIGHT:
case TILE_RIGHT:
case TILE_BOTTOMRIGHT:
case TILE_BOTTOM:
case TILE_BOTTOMLEFT:
case TILE_LEFT:
case TILE_TOPLEFT:
return true;
break;
default:
return false;
}
}
}
}
return false;
}
我不是指針(或大多數其他事物)的主人。是否有任何明顯的缺陷可以解釋我的問題?
謝謝,我會盡力根據它編輯所有內容。 – 2013-02-20 21:49:33