在 SKAction 完成后重新定位精灵节点
Posted
技术标签:
【中文标题】在 SKAction 完成后重新定位精灵节点【英文标题】:Reposition sprite nodes after SKAction is completed 【发布时间】:2014-06-27 14:11:24 【问题描述】:我正在尝试在 SKAction moveTo 动作完成后重新定位我的精灵。我已将敌人编程为从 (self.frame.size.width/2, 0) 进入屏幕。它们仅在 y 轴上移动。当它们的 y 位置大于 (self.frame.size.height) 时,我想将它们重新定位到初始位置,并以相同的方式一次又一次地移动它们,直到玩家杀死所有敌人。我在这一点上苦苦挣扎。我应该添加哪一部分代码?有任何想法吗?这段代码可能会帮助你理解我的实现:
-(void) addEnemies
for (int j = 0; j < 6; j++)
SKSpriteNode* enemy = [SKSpriteNode spriteNodeWithImageNamed:@"player"];
enemy.position = CGPointMake(((self.frame.size.width) -20) - j * (enemy.frame.size.width) , 0);
CGPoint realDest = CGPointMake((enemy.position.x), (self.frame.size.height));
float velocity = 50/1.0;
float realMoveDuration = self.size.height / velocity;
SKAction * actionMove = [SKAction moveTo:realDest duration:realMoveDuration];
[enemy runAction:actionMove];
[self addChild:enemy];
【问题讨论】:
【参考方案1】:-(void)addEnemies
for (int j = 0; j < 6; j++)
SKSpriteNode* enemy = [SKSpriteNode spriteNodeWithImageNamed:@"player"];
enemy.position = CGPointMake(((self.frame.size.width) -20) - j * (enemy.frame.size.width) , 0);
[self addChild:enemy];
[self moveEnemyNode:enemy];
-(void)moveEnemyNode:(SKSpriteNode *)enemy
enemy.position = CGPointMake(enemy.position.x, 0);
float velocity = 50/1.0;
float realMoveDuration = self.size.height / velocity;
SKAction *actionMove = [SKAction moveToY:self.frame.size.height + enemy.frame.size.height duration:realMoveDuration];
[self runAction:actionMove completion:^
[self moveEnemyNode:enemy];
];
【讨论】:
我试过了,但它不起作用......敌人甚至没有出现在屏幕上。 对不起!它是 [enemy runAction:actionMove 完成:^ [self moveEnemyNode:enemy]; ]; 刚刚测试并按预期工作。如果您错过任何敌人,请仔细检查您的坐标 是的,我错过了 5 个敌人。现在 1 个敌人出现在屏幕上。正如你所说,我会检查坐标!谢谢!【参考方案2】:-
创建一个复制屋顶的 SKSpriteNode -> Rectangle(self.frame.size.width,1)
让它沿着屏幕的顶部边缘放置一个非动态物理体
设置“屋顶”与敌人相互接触
在联系人上调用一个方法来重置位置并调用 SKaction
这使您可以直接在每个敌人击中屏幕顶部时直接访问它。
这是一个如何创建屋顶并让敌人与之互动的示例。 https://***.com/a/24195006/2494064
【讨论】:
如有进一步的疑问,请随时发表评论。链接的代码经过测试,已帮助许多处于类似情况的用户。 这看起来很有希望。我会检查出来的!谢谢你的回答:-)以上是关于在 SKAction 完成后重新定位精灵节点的主要内容,如果未能解决你的问题,请参考以下文章
多个 SKSpriteNode 的 SpriteKit 多个 SKActions - 等待全部完成
sprite kit:如何根据距离改变 skaction 持续时间?
使用带有完成处理程序的循环在多个节点上执行单个 SKAction 动画