gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:11:27 24 4
gpt4 key购买 nike

就上下文而言,我正在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com