如何以给定模式排列SKSpriteNodes

时间:2013-12-13 12:05:21

标签: ios sprite-kit skspritenode

我有几个类似的SKSpriteNodes,我想在屏幕上以特定的模式排列。具体来说,我希望它们围绕另一个中心SKSpriteNode排列。

我将每个x,y放在一个数组中并使用setPostion:CGPointMake(x,y)放在屏幕上:

NSInteger DotX_Pos[] = {50,200,350,500};

NSInteger DotY_Pos[] = {50,200,350,500};

[sprite setPosition:CGPointMake(DotX_Pos[i],DotY_Pos[i])];

虽然这种方法有效,但效率并不高,而且随着游戏关卡的推进,我希望安排越来越多的精灵。

如何完成这项任务?

感谢, 富

1 个答案:

答案 0 :(得分:0)

这是一个方法,它将返回一个NSValues集合,每个NSValues包含一个具有适当位置的CGPoint。您可以传入半径,原点x和y以及所需的精灵数量,并将它们均匀地围绕圆圈展开。要从NSValue *值中提取CGPoint,请使用[value CGPointValue]。祝你好运。

-(NSArray*)getPositionsForCircleWithRadius:(uint)radius originXPos:(int)originXPos originYPos:(int)originYPos andNumberOfItems:(uint)numberOfItems
{
    NSMutableArray* positions = [[NSMutableArray alloc]initWithCapacity:numberOfItems];
    CGFloat angle = 0;
    CGFloat angleIncrement = 2*M_PI/numberOfItems;

    for (int i = 0; i < numberOfItems; i++)
    {
        int pointX = originXPos + radius*cos(angle);
        int pointY = originYPos + radius*sin(angle);

        CGPoint position = CGPointMake(pointX, pointY);

        [positions addObject:[NSValue valueWithCGPoint:position]];

        angle += angleIncrement;
    }

    return positions;
}