0

cocos2D でボール ゲームを作成しています。ボールをある方向にスライドさせると、壁に衝突するまでボールが移動します。ボールをある方向にスワイプすると、衝突検出で「アサーション エラー」が発生します。

レベルを作成するために tiledmap を使用しています。

私がコーディングした方法は、ボールが入っているタイルサイズを見つけてから、for ループで、ボールの周りにウォール スプライトがあるかどうかを確認することです。

うまくいかないアイデアはありますか?

-(void)callEveryFrame:(ccTime)dt{

     //Error Here vvv (Assertion Failure in -[CCTMXLayer tileAt:])


     NSLog(@"First Touch x:  /%f  Last Touch x: /%f  First Touch y: /%f   Last Touch y:       /%f", firstTouch.x, lastTouch.x, firstTouch.y, lastTouch.y);

     if(swipeLeft || swipeRight || swipeDown || swipeUp)
     {
         bool collision = false;
         int ballTileX = (player.position.x / level1.tileSize.width);
         int ballTileY = (player.position.y / level1.tileSize.width);
         int collisionAreaX = ballTileX-1;
         int collisionAreaY = ballTileY-1;

         for(int i = 0; i < 9; i++)
         {
             bool tilePresent = [background tileAt:CGPointMake(collisionAreaX, collisionAreaY)] != NULL;

             if(tilePresent && CGRectIntersectsRect(CGRectMake(collisionAreaX*level1.tileSize.width, collisionAreaY*level1.tileSize.height, level1.tileSize.width, level1.tileSize.height), CGRectMake(ballTileX*level1.tileSize.width, ballTileY*level1.tileSize.height, level1.tileSize.width, level1.tileSize.height)))
             {
                 collision = true;
                 break;
             }

             if(i % 3 == 0)
             {
                 collisionAreaX -= 2;
                 collisionAreaY++;
             }
             else
             {
                 collisionAreaX++;
             }
         }

         if(collision) {
             swipeLeft = false;
             swipeRight = false;
             swipeDown = false;
             swipeUp = false;
         }
    }
 }
4

0 に答える 0