1

我正在尝试在 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];
}

}
4

2 回答 2

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];
    }];
}
于 2014-06-27T15:16:15.830 回答
0
  1. 创建一个复制屋顶的 SKSpriteNode -> Rectangle(self.frame.size.width,1)
  2. 让它沿着屏幕的顶部边缘放置一个非动态物理体
  3. 设置“屋顶”与敌人接触
  4. 调用一个方法来重置那里的位置并调用 SKaction

这使您可以准确地在每个敌人击中屏幕顶部时直接访问它。

这是一个如何创建屋顶并让敌人与之互动的示例。 https://stackoverflow.com/a/24195006/2494064

于 2014-06-27T18:24:00.170 回答