ios – Sprite Kit停止冲动

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

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

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

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

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

有人有解决方案吗?

struct Constants {

static let minimumJumpForce:CGFloat = 20.0
static let maximumJumpForce:CGFloat = 60.0
}

class GameScene: SKScene,SKPhysicsContactDelegate {

var force: CGFloat = 20.0

func longPressed(longPress: UIGestureRecognizer) {

    if (longPress.state == UIGestureRecognizerState.Began) {

        println("Began")

        self.pressed = true

        let HigherJump = SKAction.runBlock({Player.physicsBody?.applyImpulse(CGVectorMake(0,Constants.maximumJumpForce))})

        self.runAction(HigherJump,withKey:"HighJump")

    }else if (longPress.state == UIGestureRecognizerState.Ended) {

        println("Ended")

        self.pressed = false

        self.removeActionForKey("HighJump")

    }

}

override func touchesBegan(touches: Set<NSObject>,withEvent event: UIEvent) {
    /* Called when a touch begins */

    for touch in (touches as! Set<UITouch>) {
        let location = touch.locationInNode(self)

    }
}

override func touchesEnded(touches: Set<NSObject>,withEvent event: UIEvent) {
    for touch in (touches as! Set<UITouch>) {
        let location = touch.locationInNode(self)

}
}

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */

}

解决方法

1.从基于SpriteKit的Xcode模板创建“游戏”
将列出的代码复制到GameScene类中
import SpriteKit

class GameScene: SKScene,SKPhysicsContactDelegate {

    var location = CGPoint()
    var floorSize = CGSize()
    var floorColor = UIColor()
    var player = SKSpriteNode()

    override func didMoveToView(view: SKView) {

        view.showsFPS = true;
        view.showsNodeCount = true;
        view.showsDrawCount = true;

        self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
        self.physicsBody?.categoryBitMask = 1
        self.physicsBody?.contactTestBitMask = 1
        self.physicsWorld.gravity = CGVectorMake(0,0)
        self.physicsWorld.contactDelegate = self;

        location = CGPoint(x:CGRectGetMidX(self.frame),y:CGRectGetMidY(self.frame))

        player = SKSpriteNode(imageNamed:"Spaceship")
        player.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 320,height: 320))
        player.physicsBody?.categoryBitMask = 1
        player.physicsBody?.collisionBitMask = 1
        player.physicsBody?.contactTestBitMask = 1
        player.physicsBody?.linearDamping = 0;
        player.xScale = 1
        player.yScale = 1
        player.position = location
        self.addChild(player)

    }

    override func touchesBegan(touches: Set<UITouch>,withEvent event: UIEvent?) {
        self.physicsWorld.gravity = CGVectorMake(0,0)
        let direction = Float(1.5708)//Float(player.zRotation) + Float(M_PI_2)
        player.physicsBody?.applyForce(CGVector(dx: 150000*CGFloat(cosf(direction)),dy: 150000*CGFloat(sinf(direction))))
    }

    override func touchesEnded(touches: Set<UITouch>,-7.9)
    }

}

3.运行应用程序

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

猜你在找的iOS相关文章