2011-07-22 14 views
0

私は迷路の中にあなたを追いかけるこの悪役がいます。私は現在、衝突検出は一種のこのようなIB変数である各壁とのXcodeのCGRectsIntersectsRect機能によって実行されたのOpenGL ESやタイルマップを使用していないiphone app - maze solving

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; 
     } 
     } 
// ... 
} 

私はタイルマップを使用していないので、ハンターの試行を表現するために配列を使うことができないので、これは予想通り、ハンターの行動が非常に馬鹿になります。ハンターが正しい経路を見つけることを可能にする 迷路?

私は数多くの数学で苦労しました。私の脳は現在機能していません。あなたが何か考えているなら、私を助けてください。 CGRectIntersectsRectを使用して

答えて

2

衝突検出は本当に悪い考えです...あなたはあなたの移動スプライトの周りのすべてのオブジェクトを追跡し、RECT交差点Averyの時間をチェックする必要がありますので...

あなたはおそらくやっていますこれはあなたが既にUIKit/CoreGraphicsに精通しているので、OpenGLESの急な学習曲線を取りたくないからです。

Cocos2Dのようなサードパーティのライブラリからは、デフォルトで衝突検知(または一般的な物理)を使用できます。 ..それは少し時間がかかりますが、堅牢なソリューションを提供します....

thatsちょっと意見が..