【问题标题】:collision with anchorpoints与锚点碰撞
【发布时间】:2013-03-05 01:47:49
【问题描述】:

所以我所做的是我为我的 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)]];
            }

        }
    }


}

【问题讨论】:

    标签: iphone objective-c cocos2d-iphone collision-detection


    【解决方案1】:

    移动锚点变得很困难,因为锚点也可以被认为是精灵位置的基础。

    我假设你的小行星不是矩形,所以边界框在尝试检测碰撞时没有多大帮助。

    如果小行星在随机锚点上旋转,它基本上会创建一个围绕锚点的圆形碰撞区域,半径将是从锚点到小行星边缘的最长距离。这可以很容易地计算出来,您可以使用ccpDistance() 来计算与其他对象的距离。您还希望将计算碰撞的对象的半径添加到计算中。基本上是if ( ccpDistance ( point1, point2 ) &lt;= asteroid.radius + collisionObject.radius ) { // collide

    要增加此计算的复杂性和真实性,您可以使用根据您尝试检测碰撞的对象的角度而变化的半径。因此,如果物体与小行星的角度为M_PI_4,您将计算该角度的半径(根据小行星的尺寸、锚点和旋转)。根据小行星旋转的速度,这可能有点过头了。

    另一个选择可能是简化您的游戏,并始终将锚点设为ccp( .5, .5 )。这样,您的半径将更有可能在旋转物体的所有侧面上保持一致。从物理学的角度来看,这也更有意义,因为我认为物体只会自然地围绕它们的加权中心旋转。

    【讨论】:

      猜你喜欢
      • 2017-04-08
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多