switch(nChar)
       {
      case VK_LEFT:
          // if(mitu[i-1][j]==0)
  // {
   center.x-=29;  
//    i=(center.x-38)/38;
  // }
              break;
       case VK_RIGHT:
         //  if(mitu[i+1][j]==0)
 //  { 
   center.x+=29;
//    i=(center.x-38)/38;
 //  }
              break;            
       case VK_UP:
      //  if(mitu[i][j-1]==0)
// {
center.y-=26.9;
// j=(center.y-33)/33;
// }
              break;
       case VK_DOWN:
       //    if(mitu[i][j+1]==0)
//   {
   center.y+=27;
//    j=(center.y-33)/33;
  // }
              break;

解决方案 »

  1.   

    看楼主的代码应该是
    地图是个二维数组
    值为0代表可以走,
    为1代表有障碍物
    i=(center.x-38)/38;先算去对应的数组下标
    j=(center.y-33)/33;switch(nChar)
      {
      case VK_LEFT:
       if(mitu[i-1][j]==0)
      {
       center.x-=29;   
      }
      break;
      case VK_RIGHT:
       if(mitu[i+1][j]==0)
      {  
    center.x+=29;
      }
      break;   
      case VK_UP:
       if(mitu[i][j-1]==0)
      { 
    center.y-=26.9;
      }
      break;
      case VK_DOWN:
       if(mitu[i][j+1]==0)
      {
       center.y+=27;
      }
      break;这样试试..
      

  2.   

    int mitu[10][10]=
    {
    {1,1,1,1,1,1,1,1,1,1},
    {1,0,0,0,0,1,0,0,0,1},
    {1,1,0,1,0,0,0,1,1,1},
    {1,0,0,1,0,1,0,0,0,1},
    {1,1,0,0,0,0,1,0,1,1},
    {1,0,0,1,0,0,0,0,1,1},
    {1,1,0,1,0,1,1,0,0,1},
    {1,1,0,0,0,0,0,0,1,1},
    {1,0,0,1,0,0,1,0,0,1},
    {1,1,1,1,1,1,1,1,1,1}
    };我的数组是这样的,i,j我在view里面初始化的了 但是还是没效果 而且走的方式不对
    switch(nChar)
           {
          case VK_LEFT:
               if(mitu[i-1][j]==0)
       {
       center.x-=38;
       }
                  break;
           case VK_RIGHT:
              if(mitu[i+1][j]==0) 
      {
      center.x+=38;
      }
                  break;            
           case VK_UP:
       if(mitu[i][j-1]==0)
       {
                 center.y-=33;
       }
                  break;
           case VK_DOWN:
       if(mitu[i][j+1]==0)
       {
                 center.y+=33;
       }
                  break;
    }
      

  3.   

    j=(center.x-38)/38;
    i=(center.y-33)/33;由坐标算下标 这个反了.i是数组里面的行,对应坐标应该是Y方向的...
    举一个左移的例子
    你里面的case VK_LEFT:
      if(mitu[i][j-1]==0)//改为这样,,
    {
    center.x-=38;
    }
      break每个方向的都改改看..再试试看..