Ios7 操作完成后重新定位精灵节点

Ios7 操作完成后重新定位精灵节点,ios7,sprite-kit,skaction,Ios7,Sprite Kit,Skaction,我正在尝试在SKAction moveTo操作完成后重新定位我的精灵。我已将敌人编程为从(self.frame.size.width/2,0)进入屏幕。它们仅在y轴上移动。当它们的y位置大于(self.frame.size.height)时,我想将它们重新定位到初始位置,并以相同的方式一次又一次地移动它们,直到玩家杀死所有敌人。我在这一点上苦苦挣扎。我应该添加哪部分代码?有什么想法吗?此代码可能有助于您理解我的实现: -(void) addEnemies { for (int j = 0; j

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

}
—(无效)附录{
对于(int j=0;j<6;j++){
SKSpriteNode*敌人=[SKSpriteNode SPRITENODEWITHIMAGENAME:@“玩家”];
敌方位置=CGPointMake(((自身帧大小.宽度)-20)-j*(敌方帧大小.宽度),0);
CGPoint realDest=CGPointMake((敌方.position.x),(自身.frame.size.height));
浮动速度=50/1.0;
float realMoveDuration=self.size.height/velocity;
SKAction*actionMove=[SKAction moveTo:realDest duration:realMoveDuration];
[敌人行动:行动移动];
[自欺欺人:敌人];
}
}
-(无效)附录{
对于(int j=0;j<6;j++){
SKSpriteNode*敌人=[SKSpriteNode SPRITENODEWITHIMAGENAME:@“玩家”];
敌方位置=CGPointMake(((自身帧大小.宽度)-20)-j*(敌方帧大小.宽度),0);
[自欺欺人:敌人];
[自动移动我的节点:敌人];
}
}
-(void)moveEnemyNode:(SKSpriteNode*)敌人{
敌方.position=CGPointMake(敌方.position.x,0);
浮动速度=50/1.0;
float realMoveDuration=self.size.height/velocity;
SKAction*actionMove=[SKAction-moveToY:self.frame.size.height+敌军.frame.size.height持续时间:realMoveDuration];
[自我运行操作:操作移动完成:^{
[自动移动我的节点:敌人];
}];
}
  • 创建一个复制屋顶->矩形的SKSpriteNode(self.frame.size.width,1)
  • 让它和一个非动态的物理体一起坐在屏幕的顶部边缘
  • 设置“屋顶”和敌人相互联系
  • 在联系人上调用重置其位置并调用SKaction的方法
  • 这使得你可以在每个敌人击中屏幕顶部时直接接近它


    下面是一个如何创建屋顶并让敌人与之交互的示例

    我试过了,但没用。。。敌人甚至没有出现在屏幕上。对不起!它是[敌方runAction:actionMove completion:^{[自移动节点:敌方];}];刚刚经过测试,工作正常。如果你错过了任何敌人,请仔细检查你的协调是的,我错过了5个敌人。现在屏幕上出现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];
        }];
    }