我希望在山脉移动的背景标题屏幕上产生视差效果。我要做的“技巧”是当一座山走到屏幕的尽头,而不是破坏节点并在开始位置再次创建它,我只是想将它的位置改为开始位置并循环其余的动作。为此,我在createSceneContents()函数的开头创建了我的山脉精灵,我将精灵传递给一个方法animate(),它永远都是同样的动作组合:向右动画,然后当它在x位置时,改变mountain.position.x到开始...
-(void)createSceneContents{
//crear
SKSpriteNode *mountain = [SKSpriteNode spriteNodeWithImageNamed:@"mountain.png"];
mountain.name = @"mountain";
//initial position
mountain.position = CGPointMake(-161.5,15);
//animate
SKAction *animRight = [SKAction moveToX:801.5 duration:4];
SKAction *comboActions = [SKAction repeatActionForever:[SKAction performSelector:@selector(animate:mountain) onTarget:@"mountain"]];
这里我有我的方法声明:
- (void) animate:(SKSpriteNode*)mountain
{
// code....
}
我的问题是我总是在我的方法中传递SKSpriteNode *山时出错 我疯狂地尝试着。
答案 0 :(得分:0)
您可以使用此类自定义操作来避免performSelector操作。
SKAction* parallaxMoveAction = [SKAction sequence:@[[SKAction moveToX:801.5 duration:4.0f],[SKAction customActionWithDuration:0 actionBlock:^(SKNode* node, CGFloat elapsedTime){
[node setPosition:CGPointMake(-161.5,15)];
}]]];
如果您将自定义操作持续时间设置为0,则只会执行一次。
另一方面,执行选择器操作应如下所示:
[SKAction performSelector:@selector(animate:) onTarget:self]
据我所知,你无法传递论据。