簡體   English   中英

SpriteKit觸摸並保持SKSpriteNode速度

[英]SpriteKit SKSpriteNode velocity on touch and hold

我有SKSpriteNode因為self.physicsWorld.gravity = CGVectorMake(0.0, -4.0);而被迫掉到地上self.physicsWorld.gravity = CGVectorMake(0.0, -4.0); 當用戶點擊顯示並保持它時,我希望SKSpriteNode向上飛起,並且在用戶停止觸摸后,它再次跌落到地面。

我試圖改變速度,但它只會產生小的彈跳,就像applyImpulse方法......:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        /* Called when a touch begins */

        for touch: AnyObject in touches {

            let location = touch.locationInNode(self)

            flyingObject.physicsBody.velocity = CGVectorMake(0, 100)
        }        
    }

編輯:

這是我的場景初始化代碼

override func didMoveToView(view: SKView) {
        /* Setup your scene here */

        // Physics
        self.physicsWorld.gravity = CGVectorMake(0.0, -4.0);

        // flyingObject
        var flyingObjectTexture = SKTexture(imageNamed:"flyingObject")
        flyingObject.filteringMode = SKTextureFilteringMode.Nearest

        flyingObject = SKSpriteNode(texture: flyingObjectTexture)
        flyingObject.setScale(1)
        flyingObject.position = CGPoint(x: self.frame.size.width * 0.35, y: self.frame.size.height * 0.6)

        flyingObject.physicsBody = SKPhysicsBody(circleOfRadius:flyingObject.size.height/2.0)
        flyingObject.physicsBody.dynamic = true
        flyingObject.physicsBody.allowsRotation = false

        self.addChild(flyingObject)

        // Ground
        var groundTexture = SKTexture(imageNamed:"Ground")

        var sprite = SKSpriteNode(texture:groundTexture)
        sprite.setScale(0.5)
        sprite.position = CGPointMake(self.size.width/2 - 100, sprite.size.height)

        self.addChild(sprite)

        var ground = SKNode()

        ground.position = CGPointMake(0, groundTexture.size().height / 2)
        ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.width, groundTexture.size().height * 0.5))

        ground.physicsBody.dynamic = false
        self.addChild(ground)

    }

感謝Code Monkey我能夠提出解決方案,它比我想象的容易:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        /* Called when a touch begins */
        isTouching = true
    }

    override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) {
        /* Called when a touch begins */
        isTouching = false
    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
        if isTouching {
            flyingObject.physicsBody.applyImpulse(CGVectorMake(0, 5))
        }
    }

接觸開始了:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];

flyingObject.physicsBody.velocity = CGVectorMake(0, 100)
}

接觸結束:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

UITouch * touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];

flyingObject.physicsBody.velocity = CGVectorMake(0, 0)

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM