同名的精灵

时间:2014-04-24 23:24:23

标签: sprite-kit skspritenode

嘿我试图同时移动一些精灵,它们都是相同类型的精灵。所以我只是使用for循环在游戏中添加精灵但是当我尝试仅移动所有精灵时一举一动。

我正在尝试模拟跑步,当用户点击石头时,石头会向下移​​动而另一块石头会出现在顶部会有4块石头,所以当一块石头落下时另一块将会出现在另一块石头上石头会向下移​​动。我很难移动屏幕顶部的石头,石头不会像其他石头一样移动。

以下是一些代码:

self.Stone = [Stone spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(80, 142)];


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];


self.node =[self nodeAtPoint:location];

if ([self.node.name isEqualToString:@"stone"]) {
    SKAction *hey = [SKAction moveToY:self.Stone.position.y - 142 duration:1];
    [self runAction:hey];
}

它们基本上会在屏幕上显示4块石头,每次点击石块都会向下移动。

1 个答案:

答案 0 :(得分:0)

精灵的名称与移动识别无关。您可以将一个精灵作为父级,并将所有其他精灵作为子级附加。这样做会使所有孩子在移动父项时移动,或者您可以将所有精灵转储到一个数组中并在循环中单独移动每个子项。

已更新以包含父/子示例

以下是父母/子女的一个例子。点击屏幕时,父精灵在x和y上移动+10。孩子将与父母一起移动。

请记住,子位置与父级相关,而与视图无关。

#import "MyScene.h"

@implementation MyScene
{
    SKSpriteNode *mainSprite;
}

-(id)initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size])
    {
        self.physicsWorld.contactDelegate = self;

        mainSprite = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(50, 50)];
        mainSprite.position = CGPointMake(100, 100);
        [self addChild:mainSprite];

         SKSpriteNode *child1 = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(20, 20)];
         child1.position = CGPointMake(40, 40);
        [mainSprite addChild:child1];
    }
    return self;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     mainSprite.position = CGPointMake(mainSprite.position.x+10, mainSprite.position.y+10);
}

-(void)update:(CFTimeInterval)currentTime
{
    //
}

@end