2011-07-22 58 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)的開箱碰撞檢測..它需要一點時間學習,但會給你一個強大的解決方案....

這就是我的意見..