【问题标题】:SpriteKit SKAction group is running, but the SKSpriteNode image isn't being affectedSpriteKit SKAction 组正在运行,但 SKSpriteNode 图像不受影响
【发布时间】:2015-05-18 20:12:59
【问题描述】:

我创建了一个 SKAction 组,它可以在播放声音效果的同时改变 SKSpriteNode 图像(alpha 和旋转)。但是,当我运行Action:时,声音效果会播放,但图像保持固定。

在我的子类 SKSpriteNode(绵羊)中,我有以下代码添加另一个 SKSpriteNode(食物)作为孩子:

-(void)setupEatingAction
{
    _grassEating = [SKSpriteNode spriteNodeWithImageNamed:@"SheepFood"];
    _grassEating.size = self.size;
    _grassEating.anchorPoint = CGPointMake(0.5, 0.5);
    _grassEating.alpha = 0.5;
    _grassEating.zPosition = -1;

    SKAction *fadeIn = [SKAction fadeInWithDuration:0.01];
    SKAction *soundFX = [SKAction playSoundFileNamed:@"Munching2s.mp3" waitForCompletion:NO];
    SKAction *rotate = [SKAction sequence:@[[SKAction rotateToAngle:degsToRads(-20.0) duration:kMovementAnimationInterval/4.0],[SKAction rotateToAngle:degsToRads(0.0) duration:kMovementAnimationInterval/4.0]]];
    SKAction *eatAction = [SKAction group:@[fadeIn,soundFX,rotate]];

    _grassEating.userData = [NSMutableDictionary dictionaryWithObject:eatAction forKey:KEY_EatAction];

    [self addChild:_grassEating];
}

然后,当我希望操作组运行时,我执行以下操作:

-(void)eat
{
    if(![_grassEating actionForKey:KEY_EatAction])
    {
        [_grassEating runAction:[_grassEating.userData objectForKey:KEY_EatAction] withKey:KEY_EatAction];
    }
}

_grassEating 是我父节点的属性:

@property (nonatomic,retain) SKSpriteNode *grassEating;

正如我所说,我可以听到播放的音效,但图像没有改变?!?对于我的生活,我无法弄清楚为什么,我花了很多时间试图弄清楚发生了什么......有什么想法吗?

我还应该指出(虽然我不认为与它有任何关系)这个问题出现在模拟器和硬件上 - 都运行 iOS7。

不知道这是否相关iOS Spritekit Cannot Run SKAction on a Subclassed SKSpriteNode

但是,这是我能找到的最接近的问题,而且似乎不是同一个问题(表面上)。

【问题讨论】:

  • 你试过不保存到 userData 吗?
  • 是的。我最初就是这样做的。然后在查看了我链接的线程后,我将其更改为我提出的方法。两种方法都给出了相同的结果 - 有声音但没有图像变化。
  • 您是否尝试过检查_grassEating 是否有效?尝试将其设置为隐藏或将其从其父级中删除,以查看对精灵的引用是否正确。
  • _grassEating 有一个地址,我可以“po”它。我检查 userData 是否包含一个对象,大概是我放入其中的 SKAction。这就是你所说的有效吗?
  • 来自@Wraithseekerr 建议的有趣开发。我现在尝试在 setupEatingAction 中初始创建精灵时隐藏它。然后在调用 eat 时取消隐藏。调用 eat 时精灵无处可见,但您仍然可以听到声音 FX...

标签: sprite-kit skspritenode skaction


【解决方案1】:

发现问题。这是一个逻辑问题。正在添加 SKSpriteNode 并开始播放声音 FX,但在下一帧左右,精灵被删除了。 结果,精灵似乎没有显示,但没有时间进入视图。声音 FX 继续播放,因此出现混乱。

【讨论】:

    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2016-03-07
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多