我想SKAction在每次重复时运行重复但随机的值.我在这里读到了这个问题,显示了一种方法.但是,我希望我的精灵动作能够动画,而不是简单地改变它的位置.我提出的一个解决方案是运行一系列操作,最后一个动作以递归方式调用我的move方法:
- (void)moveTheBomber {
__weak typeof(self) weakSelf = self;
float randomX = // determine new "randomX" position
SKAction *moveAction = [SKAction moveToX:randomX duration:0.25f];
SKAction *waitAction = [SKAction waitForDuration:0.15 withRange:0.4];
SKAction *completionAction = [SKAction customActionWithDuration:0 actionBlock:^(SKNode *node, CGFloat elapsedTime) {
[weakSelf moveTheBomber];
}];
SKAction *sequence = [SKAction sequence:@[moveAction, waitAction, completionAction]];
[self.bomber runAction:sequence];
}
Run Code Online (Sandbox Code Playgroud)
递归调用这个方法对我来说感觉'icky',但鉴于我对SpriteKit的经验有限,似乎是最明显的实现方法.
如何在屏幕上永久动画精灵的随机移动?
没有花里胡哨,但我认为这应该会让你顺利:
编辑:对不起它应该是:
SKAction *randomXMovement = [SKAction runBlock:^(void){
NSInteger xMovement = arc4random() % 20;
NSInteger leftOrRight = arc4random() % 2;
if (leftOrRight == 1) {
xMovement *= -1;
}
SKAction *moveX = [SKAction moveByX:xMovement y:0 duration:1.0];
[aSprite runAction:moveX];
}];
SKAction *wait = [SKAction waitForDuration:1.0];
SKAction *sequence = [SKAction sequence:@[randomXMovement, wait]];
SKAction *repeat = [SKAction repeatActionForever:sequence];
[aSprite runAction: repeat];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2702 次 |
| 最近记录: |