【发布时间】: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