ios – Sprite Kit停止冲动

前端之家收集整理的这篇文章主要介绍了ios – Sprite Kit停止冲动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
每次当屏幕被点击时,我想增加一个CGFloat.
浮点数具有设定的最大值和最小值.
我试图通过这个建议: StackOverflow

然而,这只会在触摸完成后增加CGFloat,或者达到最大值.我想在触摸过程中增加CGFloat,这意味着您触摸跳转/ CGFloat的时间越长.

这个问题可能在冲动之中,在应用之后你不能改变它.这意味着,在“玩家”获得20的冲动之后,屏幕更长时间的触动,浮动可能会增加,但冲动不会.

如果你看看我当前的代码,那么当屏幕被触摸时,脉冲被设置为最大值,但如果释放该动作应该被删除.但是,它不行,冲动不会停止.

我知道您可以在按下按钮之后将身体的速度设置为一个值,如果按下速度已经将速度返回到0,那么它会停止它的“跳跃”,但是看起来不太顺利有冲动.

有人有解决方案吗?

  1. struct Constants {
  2.  
  3. static let minimumJumpForce:CGFloat = 20.0
  4. static let maximumJumpForce:CGFloat = 60.0
  5. }
  6.  
  7. class GameScene: SKScene,SKPhysicsContactDelegate {
  8.  
  9. var force: CGFloat = 20.0
  10.  
  11. func longPressed(longPress: UIGestureRecognizer) {
  12.  
  13. if (longPress.state == UIGestureRecognizerState.Began) {
  14.  
  15. println("Began")
  16.  
  17. self.pressed = true
  18.  
  19. let HigherJump = SKAction.runBlock({Player.physicsBody?.applyImpulse(CGVectorMake(0,Constants.maximumJumpForce))})
  20.  
  21. self.runAction(HigherJump,withKey:"HighJump")
  22.  
  23. }else if (longPress.state == UIGestureRecognizerState.Ended) {
  24.  
  25. println("Ended")
  26.  
  27. self.pressed = false
  28.  
  29. self.removeActionForKey("HighJump")
  30.  
  31. }
  32.  
  33. }
  34.  
  35. override func touchesBegan(touches: Set<NSObject>,withEvent event: UIEvent) {
  36. /* Called when a touch begins */
  37.  
  38. for touch in (touches as! Set<UITouch>) {
  39. let location = touch.locationInNode(self)
  40.  
  41. }
  42. }
  43.  
  44. override func touchesEnded(touches: Set<NSObject>,withEvent event: UIEvent) {
  45. for touch in (touches as! Set<UITouch>) {
  46. let location = touch.locationInNode(self)
  47.  
  48. }
  49. }
  50.  
  51. override func update(currentTime: CFTimeInterval) {
  52. /* Called before each frame is rendered */
  53.  
  54. }

解决方法

1.从基于SpriteKit的Xcode模板创建“游戏”
将列出的代码复制到GameScene类中
  1. import SpriteKit
  2.  
  3. class GameScene: SKScene,SKPhysicsContactDelegate {
  4.  
  5. var location = CGPoint()
  6. var floorSize = CGSize()
  7. var floorColor = UIColor()
  8. var player = SKSpriteNode()
  9.  
  10. override func didMoveToView(view: SKView) {
  11.  
  12. view.showsFPS = true;
  13. view.showsNodeCount = true;
  14. view.showsDrawCount = true;
  15.  
  16. self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
  17. self.physicsBody?.categoryBitMask = 1
  18. self.physicsBody?.contactTestBitMask = 1
  19. self.physicsWorld.gravity = CGVectorMake(0,0)
  20. self.physicsWorld.contactDelegate = self;
  21.  
  22. location = CGPoint(x:CGRectGetMidX(self.frame),y:CGRectGetMidY(self.frame))
  23.  
  24. player = SKSpriteNode(imageNamed:"Spaceship")
  25. player.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 320,height: 320))
  26. player.physicsBody?.categoryBitMask = 1
  27. player.physicsBody?.collisionBitMask = 1
  28. player.physicsBody?.contactTestBitMask = 1
  29. player.physicsBody?.linearDamping = 0;
  30. player.xScale = 1
  31. player.yScale = 1
  32. player.position = location
  33. self.addChild(player)
  34.  
  35. }
  36.  
  37. override func touchesBegan(touches: Set<UITouch>,withEvent event: UIEvent?) {
  38. self.physicsWorld.gravity = CGVectorMake(0,0)
  39. let direction = Float(1.5708)//Float(player.zRotation) + Float(M_PI_2)
  40. player.physicsBody?.applyForce(CGVector(dx: 150000*CGFloat(cosf(direction)),dy: 150000*CGFloat(sinf(direction))))
  41. }
  42.  
  43. override func touchesEnded(touches: Set<UITouch>,-7.9)
  44. }
  45.  
  46. }

3.运行应用程序

这应该给你’Jump’游戏的起点:)

猜你在找的iOS相关文章