2011-03-09 47 views
0

我想blit我在兩個類中創建的曲面。一個叫Map,它包含相關的地圖矢量以及其他一些東西。另一個是Tile類。我運行該程序時出現問題。C++和SDL問題

我沒有得到任何錯誤,程序按照它應該運行。有任何想法嗎?這可能是一個愚蠢的錯誤。

Map populate 

    void map::Populate(map M) 
    for(int x=0;x<=19;x++) 
    { 
     for(int y=0;y<=15;y++) 
     { 
      int y2 = (y*32); 
      int x2 = (y*32); 
      Tile T(x2,y2); 
      M.AddToMap(&T); 
      printf("Added Tile"); 

Render 

    void map::Render(SDL_Surface* screen) 
    { 
    for(int x=0;x<grid.size();x++) 
    { 
      printf("test"); 
      Tile* T = grid[x]; 
      SDL_Surface* k = T->GetIcon(); 
      SDL_Rect dstrect; 
      dstrect.x = (screen->w - k->w)/2; 
      dstrect.y = (screen->h - k->h)/2; 
      SDL_BlitSurface(k, 0, screen, &dstrect); 
+0

你說你的代碼運行或不運行?如果運行,問題在哪裏? – 2011-03-09 16:47:06

回答

1

你不說明什麼問題實際上是,只是程序「運行,因爲它應該。」

問題在你的代碼:

int x2 = (y*32);應該有可能是X * 32。

void map::Populate(map M)按值按價值 - 這複製您傳遞的地圖,並且任何更改將不會在傳遞的地圖中可見。 map & M傳遞參考,所以更改將會在您通過的地圖中看到。

M.AddToMap(&T)增加一個指針本地瓷磚變量,它會在內部循環的每次迭代中失效。更有可能的是你想要new Tile(T),或者更好的是一個智能指針,比如boost的shared_ptr。請記住,如果您不使用智能指針,則還需要delete這些Tiles。

新代碼:

void map::Populate(map & M) 
for(int x=0; x<20; x++) 
{ 
    for(int y=0; y<16; y++) 
    { 
     int y2 = (y*32); 
     int x2 = (x*32); 
     M.AddToMap(new Tile(x2,y2)); 
     printf("Added Tile"); 
+0

哦,我忘了。抱歉。在解決了你所看到的問題之後,在光明的一面。我非常感謝。 – Head 2011-03-09 17:04:10

0

要添加引用到一個局部變量來你在填充地圖。如果方法沒有創建輸入的副本,這很可能是錯誤的。製作副本(按值傳遞)或將智能指針存儲到您的Tile。當然,你可以存儲一個普通的舊指針,但一定要刪除這些瓷磚!

0

假設您的問題是圖像沒有顯示出來,您可能需要發佈屏幕和曲面的設置代碼,以便我們可以看到這是否是問題所在。