我希望能够移动球,每隔20像素移动一次我试过这个球,但是什么也没做,球停留在开始的地方,它不移动到屏幕的尽头,我知道我没有不要把waitForDuration,因为我想检查它是否会移动或不 func spwan() { let ball:SKSpriteNode = SKScene(fileNamed: "Ball")?.childNodeWithName("ball") as! SKSpriteNode ball.removeFromParent() self.addChild(ball) ball.name = "spriteToTrack" ball.zPosition = 0 ball.position = CGPointMake(1950, 1000) var num:CGFloat = ball.position.x let a1 = SKAction.moveToX(num – 20, duration: 10) // i want to get to -50 let a1 = SKAction.moveToX(-50 , duration: 10) let minus = SKAction.runBlock{ num -= […]
我正在开发一个iOS游戏,使用带有iAd横幅的精灵套件,而这个iAd引起了游戏的解封,而且通过取消暂停,我的意思是说SKA正在继续,下面是一些细节: 1)我有几个对象在我的游戏中有一个序列(串联不平行)的SKActions。 2)点击游戏屏幕上的“暂停游戏”button,然后“恢复”就可以正常工作了 – 所有事情都会根据需要暂停。 下面“注意”中的NSLog语句不显示。 3)我编写了以下通知,其中有一个观察者调用select器来暂停游戏(正确调用)。 下面“注意”中的NSLog语句不显示。 -(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave [[NSNotificationCenter defaultCenter] postNotificationName:@"iAdsoPauseGame" object:self]; return YES; } 4)iAd出现lalala …一切都暂停,因为它应该是。 下面“注意”中的NSLog语句不显示。 5)当我点击iAd中的“x”时,按以下顺序出现:a)我在游戏中的对象正在运行时SKAction通过去iAd完成而“暂停”游戏,NSLog语句(在下面的注)被列出。 b)大约0.5秒后,我的ViewController的“viewDidAppear”被称为c)在5b之后小于1ms,我的iAd的“bannerViewActionDidFinish”被调用(我在这里有一个通知告诉我的游戏暂停…问题是这个0.5秒closuresiAd和这个方法被称为…之间的停机时间) 注意:在我的游戏的主要.m文件中,在“更新”方法(每帧调用)中,我有一个NSLog语句(下面),只要点击iAd中的“x”停止(当5b / 5c被调用时)。 if (NodeGamePlay.paused==FALSE) { NSLog(@"NodeGamePlay.paused==FALSE"); } 所以我的问题:当我退出iAd时,如何防止SKaction继续(步骤发生在5a)? 感谢您的时间和帮助 – 这一直困扰着我相当一段时间!
你如何在objective-c中实现SKActionTimingFunction? 我到处寻找,我只是迅速find了一个例子。 谢谢!
我有一个SKSpriteNode纹理animation。 我基本上有一个4帧的字符闲置周期和一个眨眼animation序列。 我想要永远循环字符闲置循环,但是让它以随机的间隔播放闪烁的animation序列。 我有以下代码; func playIdle() { let idle_loop = SKAction.repeatAction(action_textureSequence_idle!, count: randomLoopCount()) let sequence = SKAction.sequence([idle_loop, action_textureSequence_blink!]) let repeatSequence = SKAction.repeatActionForever(sequence) runAction(repeatSequence) } func randomLoopCount() -> Int { return Int(arc4random_uniform(10) + 2) } 问题在于,随机数只生成一次,所以眨眼不会随机发生。 就在每次循环次数相同之后。 我如何达到我要找的效果?
我想在x轴上来回移动一个Sprite,并决定使用序列和动作的组合。 基本上我想要多次运行SKAction.runBlock。 所以我创build了一个SKAction.sequence并且在这个动作中创build了多个SKAction.runBlock 。 它看起来像这样: runAction(SKAction.sequence([SKAction.runBlock({ self.moveMad(self.size.width*0.1) }), SKAction.runBlock({ self.moveMad(self.size.width*0.9) })])) func moveMad(posX: CGFloat) { let move = SKAction.moveTo(CGPoint(x: posX, y: size.height – mad.size.height/2), duration: 3) mad.runAction(move) } 在SKAction.sequence(SKAction.runBlock)中,我调用一个函数来创build一个moveTo Action。 这工作,但问题是,我的序列不起作用。 它只是向一个方向移动(右侧)。 我也试图实现一个完成处理程序,但也没有解决问题。 我在这里做错了什么?
我有一个应用程序,每次触摸屏幕播放声音文件。 出于某种原因,应用程序将每隔一段时间崩溃,并出现以下错误: reason: 'Resource tick.mp3 can not be loaded' 如果你需要它,下面是我每次点击屏幕时如何播放文件: runAction(SKAction.playSoundFileNamed("tick.mp3", waitForCompletion: false)) 这并不经常发生,也许每10次运行一次。 大多数情况下,一切都按预期工作。 我希望我知道我在做什么导致崩溃,但我不知道! 我只是把它看作与没有崩溃的时代没有什么不同。 然后突然之间我得到这个问题…
我使用下面的一段代码来定期生成SKNode。 有没有办法使这些SKNodes的生成周期是随机的。 具体来说,我如何使下面的代码中的“delayFish”具有随机延迟的行为? [self removeActionForKey:@"fishSpawn"]; SKAction* spawnFish = [SKAction performSelector:@selector(spawnLittleFishes) onTarget:self]; SKAction* delayFish = [SKAction waitForDuration:3.0/_moving.speed]; SKAction* spawnThenDelayFish = [SKAction sequence:@[spawnFish, delayFish]]; SKAction* spawnThenDelayFishForever = [SKAction repeatActionForever:spawnThenDelayFish]; [self runAction:spawnThenDelayFishForever withKey:@"fishSpawn"];
我试图让一个SKNode移动到屏幕上的命令。 我build立了以下SKAction链,以便1)节点向上和向外移动,然后2)节点向下移动到起始位置,然后3)开始移动。 我用下面的代码来尝试和实现这个: SKAction *moveUp = [SKAction moveTo: shipIntroSpot1 duration:3.0]; SKAction *moveDown = [SKAction moveTo:shipSpot1 duration:ship1MovementSpeed]; [self enumerateChildNodesWithName:@"ship1" usingBlock:^(SKNode *node, BOOL *stop) { NSLog(@"RUNNING MOVE UP"); [node runAction: moveUp]; [node runAction:moveUp completion:^{ NSLog(@"RUNNING MOVE DOWN"); [node setHidden: NO]; [node runAction: moveDown]; }]; [node runAction:moveDown completion:^{ NSLog(@"STARTING MOVEMENT"); }]; 但是,SKActions似乎并没有按照正确的顺序开火。 我使用的代码,一旦一步完成,下一步将开始。 然而,在下一个SKAction开始工作之前,SKAction似乎没有足够快地移动节点。 我的印象是,使用完成调用将意味着下一个行动不会开始,直到前一个完成? 这似乎并不是这种情况。 另外,如果我为步骤1(MOVING UP)留下了足够长的时间,它将跳过步骤2(MOVING […]
我是Sprite Kit的新手,我想知道如何让一个精灵跟随触摸。 例如,我的玩家精灵在屏幕的底部。 当我点击屏幕顶部时,玩家精灵应该以一定的速度移动到触摸点 – 如果我移动手指,它应该始终指向触摸点。 这是我试图实现它的方式: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch *touch in touches) { CGPoint location = [touch locationInNode:self]; CGPoint diff = rwSub(location, self.player.position); CGPoint norm = rwNormalize(diff); SKAction *act = [SKAction moveByX:norm.x * 10 y:norm.y * 10 duration:0.1]; [self.player runAction:[SKAction repeatActionForever:act] withKey:@"move"]; } } – (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { for (UITouch […]
我正在使用SKLabelNode。 我创build它并将其添加到我的场景作为一个孩子,它显示没有问题,但是当我尝试改变它的颜色(而不是fontColor)与colorizeWithColor()方法标签淡出。 这里是问题的线路: myLabel.runAction(SKAction.colorizeWithColor(SKColor.blueColor(), colorBlendFactor: 1.0, duration: duration)) 在完成这个动作之后,我打印到控制台的myLabel.color属性,这里是我得到的: Optional(UIDeviceRGBColorSpace 0.99178 0.99178 1 0.00822043) 正如你所看到的,alpha值几乎为0,所以我想这就是标签消失的原因,但我不明白为什么会发生这种情况。 提前致谢。 更新:好吧,所以我发现其实这是我的不好,我没有搜查之前问。 这是关于colorizeWithColor方法的文档: 此操作只能由SKSpriteNode对象执行。 当动作执行时,精灵的颜色和colorBlendFactor属性被设置为新的值。 所以也许任何人都知道一个很好的解决方法,为一个永远在更新的SKLabelNode着色。 !!!最后更新!!! 我find了一个解决scheme,但是0x141E提出了一个更好的解决scheme,我使用了这个解决scheme,并且创build了下一个方法,当你需要从A颜色转换到B颜色时,这个方法非常好。在0x141Ebuild议的解决scheme中,回到fontColor,当你改变颜色时它会闪烁。 在我的情况下,它改变了fontColor,而不是颜色属性,这导致了一个非常漂亮的过渡(当然不是很好)。 再次感谢0x141E的真正好方法! 这是我的解决scheme: 当你为参数调用方法的时候,这个特殊情况很好,但是如果你需要其他的时间,你可以使用发送的withDuration参数或者乘数,在我的代码中是5,即使当然也应该更好解决scheme,所以如果你觉得请分享。 为了我的需要,这个工作太棒了。 首先是一个video,所以你可以看到它是如何工作的: https : //www.youtube.com/watch?v=ZIz8Bn0-hUA&feature=youtu.be func changeColorForLabelNode(labelNode: SKLabelNode, toColor: SKColor, withDuration: NSTimeInterval) { labelNode.runAction(SKAction.customActionWithDuration(withDuration, actionBlock: { node, elapsedTime in let label = node as SKLabelNode let toColorComponents = […]