2011-07-22 55 views
0

我正在与一群迷宫一起在iPhone游戏上,并且有这个小人在迷宫里追逐你。iphone应用程序 - 迷宫解决

我不使用的OpenGL ES也不瓦片地图,所以目前是由xcode中的CGRectsIntersectsRect功能与每个壁是一个IB变量,种这样执行碰撞检测:

float hunterdiffx = abs(hunter.center.x - hunterDest.x); 
float hunterdiffy = abs(hunter.center.y - hunterDest.y); 

if((hunterdiffx!=0.0)&&(hunterdiffx>(1.0*diffy))&&(!hunterCollided)){ 
    //NSLog(@"diffx >"); 
    hunterVel.y = 0; 
    if(hunterDest.x>(hunter.center.x+3)){ 
     //NSLog(@"x >"); 
     hunterVel.x = 3; 
    } 
    else if(hunterDest.x<(hunter.center.x-3)){ 
     //NSLog(@"x <"); 
     hunterVel.x= -3; 
    } 
    //when rabbit reaches the destination 
    else if((hunter.center.x>(hunterDest.x-3)) && (hunter.center.x < (hunterDest.x+3))){ 
     //NSLog(@"x ="); 
     //NSLog(@"one side reach"); 
     hunterVel.x = 0; 
     hunterVel.y = 0; 
    } 
} 

if(CGRectIntersectsRect(hunter.frame, border1.frame){ 
    hunterCollided = TRUE; 

    if(hunterVel.x==0){ 

     NSLog(@"vertical collision"); 
     if(hunterVel.y>0){ 
      hunter.center = CGPointMake(hunter.center.x, hunter.center.y -10); 
     } 
     if(hunterVel.y<0){ 
      hunter.center = CGPointMake(hunter.center.x, hunter.center.y +10); 
     } 
     hunterVel.y=0; 
     if(hunterDest.x > hunter.center.x){ 
      hunterVel.x=3; 
     } 
     if(hunterDest.x < hunter.center.x){ 
      hunterVel.x=-3; 
     } 
     } 
// ... 
} 

这和预期的一样,导致了猎人的一个非常愚蠢的行为,现在我想知道,因为我没有使用瓷砖地图,并且不能仅仅使用数组来表示猎人的尝试,是否可以有任何算法方法让猎人找到正确的道路 迷宫?

我已经挣扎了很多数学,现在我的大脑出现了故障。如果您有任何想法,请帮助我。

回答

2

碰撞检测使用CGRectIntersectsRect是一个非常糟糕的主意......因为你必须跟踪每一个对象在你移动精灵,检查矩形交集艾利时间...

你可能做的这是因为你已经熟悉UIKit/CoreGraphics,并且不想采用OpenGLES的陡峭的学习曲线......

但是你可以使用第三方库(如Cocos2D)的开箱碰撞检测..它需要一点时间学习,但会给你一个强大的解决方案....

这就是我的意见..