Tag: skaction

使用自定义SKAction的EaseOut动作

我有以下自定义SKAction工作,但作为一个EaseIn而不是EaseOut。 我想要它EaseOut! 我很失败地用网上find的各种缓解方程来纠正它。 let duration = 2.0 let initialX = cameraNode.position.x let customEaseOut = SKAction.customActionWithDuration(duration, actionBlock: {node, elapsedTime in let t = Double(elapsedTime)/duration let b = Double(initialX) let c = Double(targetPoint.x) let p = t*t*t*t*t let l = b*(1-p) + c*p node.position.x = CGFloat(l) }) cameraNode.runAction(customEaseOut) 任何帮助将不胜感激。 谢谢

在SpriteKit中animationpath绘制

我正在尝试使用SpriteKit在path上绘制一个笔画的animation。 我已经使用SKActions和一个单独的实现使用CABasicAnimations实现了一个工作解决scheme。 SKAction解决scheme不是很优雅, 它在SKAction.repeatAction(action:count :)调用的每次迭代中创build并抚摸一条新path,每个新path比前一个更加完整。 func start() { var i:Double = 1.0 let spinAction:SKAction = SKAction.repeatAction(SKAction.sequence([ SKAction.runBlock({ self.drawCirclePercent(i * 0.01) if (++i > 100.0) { i = 1.0 } }), SKAction.waitForDuration(0.01) ]), count: 100) runAction(spinAction) } func drawCirclePercent(percent:Double) { UIGraphicsBeginImageContext(self.size) let ctx:CGContextRef = UIGraphicsGetCurrentContext() CGContextSaveGState(ctx) CGContextSetLineWidth(ctx, lineWidth) CGContextSetRGBStrokeColor(ctx, 1.0, 1.0, 1.0, 1.0) CGContextAddArc(ctx, CGFloat(self.size.width/2.0), CGFloat(self.size.height/2.0), […]

AVAudioPlayer和SpriteKit游戏中的性能问题

我在AVAudioPlayer上遇到问题,并在我的精灵游戏中播放短音。 我有相当dynamic的游戏场景,当用户点击特定元素时,我想要播放简单的“嘟嘟”声,但是我注意到,使用AVAudioPlayer播放声音会导致显着的性能问题。 我的audio文件是.mp3格式。 我也尝试SKAction方法(playSoundFileNamed)来执行声音,一切看起来几乎相同,我注意到相同的性能问题。 我的问题是在SpriteKit中执行声音的最佳做法是什么。 PS:我试图findWWDC Adventure spritekit示例代码来检查他们如何解决播放声音的问题,但不幸的是示例代码不再可用。

SKAction playSoundFileNamed停止背景音乐

我希望我的SpriteKit游戏不会中断用户监听的背景音乐(Music.app或Radio应用程序)。 一切都很好,直到执行到这一行: sSharedShootSoundAction = [SKAction playSoundFileNamed:@"plane_shoot.aiff" waitForCompletion:NO]; 在此行后台音乐停止。 如何避免这一点?

Spritekit在进入后台时崩溃

所有的人,我一直在开发一个应用程序,其中我有一个SKMction对象的NSMutableDictionary。 SKAction是用来播放声音的。 这一切运作良好,除了…应用程序崩溃后进入后台堆栈跟踪: * thread #1: tid = 0x187d7, 0x3461b932 libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient + 10, queue = 'com.apple.spritekit.renderQueue, stop reason = EXC_BAD_ACCESS (code=1, address=0x1) frame #0: 0x3461b932 libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient + 10 frame #1: 0x3461c3d0 libGPUSupportMercury.dylib`gpusSubmitDataBuffers + 104 frame #2: 0x2eafc4a4 IMGSGX554GLDriver`SubmitPackets + 124 frame #3: 0x31f83cb0 GLEngine`gliPresentViewES + 168 frame #4: 0x31f8e136 OpenGLES`-[EAGLContext presentRenderbuffer:] + 62 frame #5: […]

SKAction playSoundFileNamed在接到两个连续的电话后不起作用

我试图找出为什么playSoundFileNamed接收两个连续的电话呼叫后不工作。 实际上,只有在收到第一个电话后才能使用。 重现步骤是: 开始一个游戏 等待电话,然后转到后台 电话结束(主叫方拒绝或中断) 回到前台 在此之后,从touchesBegan播放声音仍然有效。 当我重复上面的步骤(跳过第一步)时,touchesBegan的机制停止工作。 不知道为什么会发生这种情况…这是可以产生描述行为的代码: @interface GameScene() @property (nonatomic, strong) SKAction *sound; @end @implementation GameScene -(void)didMoveToView:(SKView *)view { self.sound = [SKAction playSoundFileNamed:@"sound1.wav" waitForCompletion:NO]; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { /* Called when a touch begins */ [self runAction:self.sound]; } @end 我知道有一些与此相关的问题,但给出的答案与解决方法有关。 我对解决方法不感兴趣,而是为什么会发生这种情况? 它是否与AVAudioSession有关? (可能不是)我知道我可以使用AVAudioPlayer作为一种解决方法,但仍然不知道该演奏很多简单的短音的性能是多less…

SKAction前进

我如何获得SKNode前进? 我已经能够使用[SKAction moveByX:y:duration:]使节点在一个固定的方向上移动,但是我希望它在相对于它所面对的方向的方向上移动。 我正在寻找使每个节点转45度,然后“走”向前50个像素。 这似乎很简单,我只是无法find它。

如何以一致的速度移动IOS SKSprite?

在IOS SpriteKit中玩SKSprites,我基本上想要一个精灵随机移动一定距离的某个方向,然后select一个新的随机方向和距离。很简单,创build一个方法,产生随机数然后创buildanimation和animation的完成块中有callback相同的例程。 这是行得通的,但是它也保持animation以相同的速度移动,因为animation全部基于持续时间。如果对象必须移动100,则它以移动的速度移动1/2,如果下一个随机指示它移动移动200 …那么我怎么才能以一致的速度移动?

停止使用RepeatsForever – Sprite Kit的SKAction

我想根据它的旋转在我的精灵节点上运行两个animation。 如果值是负值,则运行其中一个animation,如果是正值,则运行另一个animation。 而我设法做到这一点(但)我有一个问题。 如果Animation1正在运行,并且zRotation更改为正值,则它们都会运行,因为它们会一直重复。 所以我这样做了: NSMutableArray *walkingTextures = [NSMutableArray arrayWithCapacity:14]; for (int i = 1; i < 15; i++) { NSString *textureName = [NSString stringWithFormat:@"character%d", i]; SKTexture *texture = [SKTexture textureWithImageNamed:textureName]; [walkingTextures addObject:texture]; } SKAction *spriteAnimation = [SKAction animateWithTextures:Textures timePerFrame:0.04]; repeatWalkAnimation = [SKAction repeatActionForever:spriteAnimation]; [sprite runAction:repeatWalkAnimation withKey:@"animation1"]; 然后当我想要它停止时: [self removeActionForKey:@"animation1"]; 但它一直在运行,我怎么能停止这个动作呢? 谢谢!

以有限的旋转速度触摸旋转精灵

我试图让我的精灵节点旋转手指触摸。 到目前为止,我可以做到这一点,但我想要的是,我的节点有一个“旋转速度”。 所以我计算angular度的长度,然后设置一个不同的时间来旋转它(如果弧长,这将需要时间…)。 这是我的代码: override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { _isTouched = true for touch in touches { let location:CGVector = touch.locationInNode(self) – miner.position miner.weaponRotation = location.angle() – CGFloat(M_PI_2) } } var wantedRotation: CGFloat { get { return _wantedRotation } set(rotation) { if rotation > CGFloat(M_PI) || rotation < -CGFloat(M_PI) { _wantedRotation = […]