ios - 在循环中以相同名称编程创建的 SKSpriteNodes 上使用 repeatActionForever?

标签 ios objective-c sprite-kit

就上下文而言,我正在 iOS 中制作一个打砖 block 游戏,并且希望我创建的所有积木都随着球在场景中弹跳而反复向左和向右移动。

我的代码中有一个方法,在呈现场景时调用一次,将几行 Sprite 节点作为积木添加到场景中,如下所示

-(void) addBricks:(CGSize)size {    

    // add a new row of bricks
    for (int j = 1; j <= 3; j++) {

        // add top column of bricks
        for (int i = 0; i < 5; i++) {


            SKSpriteNode *brick = [SKSpriteNode spriteNodeWithImageNamed:@"brick"];

            brick.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:brick.frame.size];
            brick.physicsBody.dynamic = NO;
            brick.physicsBody.categoryBitMask = brickCategory;

            int xPos = ((brick.frame.size.width / 2) + 20) + ((brick.frame.size.width / 2) + 30) * i;
            int yPos = size.height - (30 * j);


            // generate the sequence that the brick will perform
            SKAction *moveHorizontal = [SKAction moveToX:xPos + 20 duration:1.0f];
            moveHorizontal.timingMode = SKActionTimingEaseOut;
            SKAction *moveBack = [moveHorizontal reversedAction];
            SKAction *wait = [SKAction waitForDuration:0.4f];
            SKAction *backAndForth = [SKAction sequence:@[moveHorizontal, wait, moveBack, wait]];
            SKAction *repeatHorizMove = [SKAction repeatActionForever:backAndForth];


            brick.position = CGPointMake(xPos, yPos);

            // add the brick
            [self addChild:brick];

            // make it move back and forth
            [brick runAction:repeatHorizMove];
        }

    }
}

我的问题是,虽然所有的积木都会在场景开始时向右移动,但它们不会像我希望的那样向后移动并一遍又一遍地重复 Action 。我认为这可能与在以编程方式创建它们时赋予它们相同的名称有关,但我知道场景保留了所有的砖 block ,尽管它们具有相同的名称。

我怎样才能让我创建的所有 SpriteNode(砖 block )永远来回移动?

最佳答案

moveToX action不可逆。始终检查引用文献中是否有这样的评论。

这应该可以解决:

        SKAction *moveHorizontal = [SKAction moveToX:xPos + 20 duration:1.0f];
        moveHorizontal.timingMode = SKActionTimingEaseOut;
        SKAction *moveBack = [SKAction moveToX:xPos duration:1.0];

关于ios - 在循环中以相同名称编程创建的 SKSpriteNodes 上使用 repeatActionForever?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22821452/

相关文章:

ios - 不同时间的本地通知重复

ios - 如何从视频中获取单个图像?

ios - 为什么 CoreLocation 无法获取新的 GPS 数据而 Mapkit 显示旧的 GPS 数据

ios - SKLableNode - 使用图像作为颜色模式

ios - NSDateComponent 中的小时是 12 小时还是 24 小时格式?

ios - 在两点/触摸之间拉伸(stretch) SKSpriteNode

swift - 为什么不能在初始化函数中设置 SKSprite 的名称?

objective-c - 水平镜像 SKSpriteNode 纹理

ios - 传递给另一个类时,NSString 的 id 返回 null

ios - 如何在Swift中从观察对象中提取字符串值