1

つまり、CCSPRITEタイルのアンカーポイントと回転速度をランダム化したのですが、これは衝突を台無しにします。アンカーポイントでの回転からオブジェクトが回転しているときに、オブジェクトのバウンディングボックスを計算するにはどうすればよいですか。

-(void)rotateTiles
{
    int aheadcount = [asteroids count];
    CCSprite *tileonPos[aheadcount];
    NSValue *tilecoord1;
    NSValue *spin;
    //NSLog(@"%d",aheadcount);
    for(int v=0; v<aheadcount; v++)
    {
        tilecoord1 = [self.asteroids objectAtIndex:v];
        spin = [self.spinvalues objectAtIndex:v];
        CGPoint spinint = [spin CGPointValue];

        CGPoint cgp = [tilecoord1 CGPointValue];
        tileonPos[v] = [bglayer tileAt:cgp];


        tileonPos[v].rotation+=spinint.x;
        tileonPos[v].anchorPoint=ccp(0,spinint.y);
    }

}
-(void)findTiles
{
    CGPoint tilecoord1;
    int tileGid1;

    for(int x = 0; x<30; x++)
    {
        for(int y = 0; y<20; y++)
        {
            tilecoord1 = ccp(x+(480*currentlevel),y);
            tileGid1 = [bglayer tileGIDAt:tilecoord1];
            if(tileGid1 == 1)
            {
                int randomanchorx = ( (arc4random() % (5+5+1)) -5 );
                int randomspin = ( (arc4random() % (5+5+1)) -5 );

                [self.asteroids addObject:[NSValue valueWithCGPoint:CGPointMake(x,y)]];
                [self.spinvalues addObject:[NSValue valueWithCGPoint:CGPointMake(randomspin,randomanchorx)]];
            }

        }
    }


}
4

1 に答える 1

0

アンカーポイントの移動は、そのアンカーポイントがそのスプライトの位置の基準とも考えられるため、大変です。

あなたの小惑星は長方形ではないと仮定しているので、とにかく衝突を検出しようとするとき、バウンディングボックスはあまり役に立ちません。

小惑星がランダムなアンカー ポイントで回転している場合、基本的にはアンカー ポイントの周りに円である衝突領域が作成され、半径はアンカー ポイントから小惑星の端までの最長距離になります。これはかなり簡単に計算でき、ccpDistance()他のオブジェクトからの距離を計算するために使用できます。また、衝突を計算しているオブジェクトの半径を計算に追加することもできます。基本的にif ( ccpDistance ( point1, point2 ) <= asteroid.radius + collisionObject.radius ) { // collide

この計算に複雑さと現実感を加えるために、衝突を検出しようとしているオブジェクトの角度に応じて変化する半径を使用できます。したがって、オブジェクトがM_PI_4小惑星からの角度である場合、その角度での半径を計算します (小惑星の寸法、アンカー ポイント、および回転に従って)。小惑星の回転速度によっては、これはやり過ぎかもしれません。

もう 1 つのオプションは、ゲームを単純化し、常にアンカー ポイントを作成することccp( .5, .5 )です。このようにして、回転するオブジェクトのすべての側面で半径が均一になる可能性が高くなります。これは、物理学の観点からもより理にかなっています。なぜなら、オブジェクトは本当に自然に重心の周りを回転するだけだと思う​​からです。

于 2013-03-05T17:24:18.887 に答える