Sprite kit 同名精灵

Sprite kit 同名精灵,sprite-kit,skspritenode,Sprite Kit,Skspritenode,嘿,我试图同时移动一些精灵,它们都是相同类型的精灵。所以我只是使用for循环在游戏中添加精灵,但当我尝试移动所有精灵时,只有一个移动 我试图模拟跑步,当用户轻敲石头时,石头会向下移动,另一块石头会出现在顶部,有4块石头,因此当一块石头向下移动时,另一块石头会出现在顶部,其余的石头会向下移动。我在移动屏幕顶部的石头时遇到了麻烦,因为石头不像其他石头那样移动 下面是一些代码: self.Stone = [Stone spriteNodeWithColor:[SKColor blackColor] s

嘿,我试图同时移动一些精灵,它们都是相同类型的精灵。所以我只是使用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块石头,每次你点击石头时,它们都会向下移动。

精灵的名字与移动的识别没有真正的关系。您可以使一个精灵成为父精灵,并将所有其他精灵附加为子精灵。这样做会在移动父对象时使所有子对象移动,或者可以将所有精灵转储到一个数组中,并在循环中分别移动每个精灵

更新以包含父/子示例

下面是一个父/子示例。轻触屏幕时,父精灵在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

您好,欢迎来到Stack Overflow,如果您提供一个代码示例,这样我们就可以针对您的情况给您提供建议,这会很有帮助。我仍然不明白您想做什么。视图顶部有4个对象(石头)。如果轻按一个对象,假设所有4个都向下移动并移出视图,然后4个新的石头出现在视图顶部?不在视图顶部好的,这样想屏幕上有一个4乘4的网格1个石头在每行的1个位置第二列是当你点击石头时点击石头的位置所有石头包括你点击的石头向下移动一行最后一行的一块石头被移除,一块新石头被添加到最上面一行的场景中。这将一直持续到玩家点击背景而不是石头。我也没有删除代码中的精灵,我让它们离开屏幕,这似乎会删除它们。这跟它有关系吗?跟什么有关系?如果精灵移出屏幕,它不会被“移除”。只有发出命令[spriteName removeFromParent]才能做到这一点。你知道如何实现我提出的两个建议吗?是的,我尝试了数组一,它甚至没有移动任何东西,父数组一的效果与以前相同。当它移出屏幕时,节点计数会下降,所以我假设它已被删除。我添加了一个父/子代码示例。您看到的节点数是视图中当前显示的精灵(节点)数。如果一个精灵移出视图,则节点数减去1,但实际上并没有移除该节点。在我的例子中,您的示例不起作用的原因是,我只需要精灵移动,游戏将永远继续,除非用户单击背景,否则每次单击当前精灵时,它都会插入一个新的精灵。您的示例最终将主精灵从场景中移除。我需要主精灵保持静止,所有其他精灵执行其他操作。