2011-03-09 110 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

假设您的问题是图像没有显示出来,您可能需要发布屏幕和曲面的设置代码,以便我们可以看到这是否是问题所在。