2017-04-07 74 views
0

在创建鼠标事件以在矩形中单击时,我将如何重新格式化if语句,以便不再为获取类型为'SDL_Rect'的临时对象的地址而发生错误。我该如何改变我的方法来使用临时对象的地址?

//Get the mouse offsets 
x = event.motion.x; 
y = event.motion.y; 
SDL_Point point ={x, y}; 
bool isPointInTileMap = false; 

for (int i = 0; i < TILE_HEIGHT; i++) 
{ 
    for (int j = 0; j < TILE_WIDTH; j++) 
    { 
     if (SDL_PointInRect(&point, &(tileMap_[i][j].getBoundRect()))) 
     { 
      isPointInTileMap = true; 
      break; 
     } 
    } 
} 

回答

1

只需使用一个本地:

for(int y = 0; y < TILE_HEIGHT; y++) 
{ 
    for(int x = 0; x < TILE_WIDTH; x++) 
    { 
     SDL_Rect rect = tileMap_[y][x].getBoundRect(); 
     if(SDL_PointInRect(&point, &rect)) 
     { 
      isPointInTileMap = true; 
      break; 
     } 
    } 
} 

这可以进一步简化:

for(int y = 0; y < TILE_HEIGHT; y++) 
for(int x = 0; x < TILE_WIDTH; x++) 
{ 
    SDL_Rect rect = tileMap_[y][x].getBoundRect(); 
    if(isPointInTileMap = SDL_PointInRect(&point, &rect)) break; 
} 

不要担心配置为SDL_Rect是 “POCO”(纯醇” C Object)struct,所以它存在于堆栈中并自动回收 - 只要确保你不会在其范围外使用&rect的值,因为它将是悬挂指针。

+0

完美,谢谢 – Vyff

相关问题