问题描述
在SpriteKit游戏中,我使用永久重复的SKAction moveTo:
在Sprite上显示金属光泽。它基本上是一个SKCropNode
遮罩,它从一个位置移动到另一个位置,暂停,然后移回到其起始位置,然后重复。 maskNode
本身的动画方向相反。
即使数百个屏幕上运行了数百个小时,这仍然可以正常工作。
但是,当应用程序转到后台并返回时,这些节点的所有位置都已更改。动画仍然继续,但是位置错误。屏幕上的任何地方都有金属光泽,但应有的地方除外。
我没有更改UIApplication
委托方法中的任何内容。即使我在应用程序处于后台时pause
SKView
,也会发生完全相同的事情。
// create the shine node
SKSpriteNode *shine = [SKSpriteNode spriteNodeWithTexture:@"metal_shine"];
shine.size = self.size;
// create the mask node
SKSpriteNode *maskNode = [SKSpriteNode spriteNodeWithTexture:@"disk_mask"]];
maskNode.size = self.size;
// create the crop node
SKCropNode *cropNode = [[SKCropNode alloc] init];
[cropNode addChild:shine];
cropNode.maskNode = maskNode;
cropNode.maskNode.position = CGPointMake(self.size.width * 0.5,self.size.height * -0.5);
cropNode.position = CGPointMake(self.size.width * -0.5,self.size.height * 0.5);
[self addChild:cropNode];
// add actions
SKAction *delayAction = [SKAction waitForDuration:1.0];
SKAction *pauseAction = [SKAction waitForDuration:3.0];
SKAction *resetActionMaskNode = [SKAction moveTo:CGPointMake(self.size.width * 0.5,self.size.height * -0.5) duration:0];
SKAction *moveActionMaskNode = [SKAction moveTo:CGPointMake(self.size.width * -0.5,self.size.height * 0.5) duration:0.6];
SKAction *resetActionCropNode = [SKAction moveTo:CGPointMake(self.size.width * -0.5,self.size.height * 0.5) duration:0];
SKAction *moveActionCropNode = [SKAction moveTo:CGPointMake(self.size.width * 0.5,self.size.height * -0.5) duration:0.6];
SKAction *repeatActionMaskNode = [SKAction repeatActionForever:[SKAction sequence:@[resetActionMaskNode,moveActionMaskNode,pauseAction]]];
SKAction *repeatActionCropNode = [SKAction repeatActionForever:[SKAction sequence:@[resetActionCropNode,moveActionCropNode,pauseAction]]];
// go
[cropNode.maskNode runAction:[SKAction sequence:@[delayAction,repeatActionMaskNode]] withKey:@"idleAnimation"];
[cropNode runAction:[SKAction sequence:@[delayAction,repeatActionCropNode]] withKey:@"idleAnimation"];
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)