触摸精灵,使其跳起然后再次下降(重复次数,因为轻拍spritenode。)

时间:2016-08-05 13:48:51

标签: swift sprite-kit skspritenode skphysicsbody skaction

我创建了一个项目,我有一个球,当视图加载时,它会掉下来,这很好。当Spritenode被轻拍时,我试图让球重新上升并再次下降。

- 此问题已修改 -  最初,我在sprite.userInteractionEnabled = false时能够让它工作。为了让分数改变,我必须将此陈述变为现实。

enter image description here

现在我无法让球落下并被轻拍跳跃。当我转向ball.physicsBody?.dynamic = true时,球会因重力而下落。如何点击精灵本身并使其跳跃。

GameScene.swift (对于那些想为自己试用代码的人。)

import SpriteKit

class GameScene: SKScene {
var ball: Ball!


private var score = 0 {
    didSet { scoreLabel.text = "\(score)" }
}


override func didMoveToView(view: SKView) {
    let ball = Ball()


    scoreLabel = SKLabelNode(fontNamed:"Geared-Slab")
    scoreLabel.fontColor = UIColor.blackColor()
    scoreLabel.position = CGPoint( x: self.frame.midX, y: 3 * self.frame.size.height / 4 )
    scoreLabel.fontSize = 100.0
    scoreLabel.zPosition = 100
    scoreLabel.text = String(score)
    self.addChild(scoreLabel)





    ball.position = CGPoint(x:self.size.width / 2.0, y: 440)

    addChild(ball)



    ball.physicsBody = SKPhysicsBody(circleOfRadius: 120)
    ball.physicsBody?.dynamic = true
    ball.physicsBody?.allowsRotation = false

    ball.physicsBody?.restitution = 3
    ball.physicsBody?.friction = 0
    ball.physicsBody?.angularDamping = 0
    ball.physicsBody?.linearDamping = 0

    ball.physicsBody?.usesPreciseCollisionDetection = true
}


 class Ball: SKSpriteNode {



    init() {
        let texture = SKTexture(imageNamed: "Ball")
        super.init(texture: texture, color: .clearColor(), size: texture.size())
        userInteractionEnabled = true

    }


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let scene = self.scene as! GameScene
        scene.score += 1



    }

之前,现在使用CGVectorMake(冲动,速度)来点击SKNode,它是SKSpriteNode,我尝试使用SKAction,但它要么不起作用,要么我和#39;把它放在错误的地方(接触开始)。

1 个答案:

答案 0 :(得分:1)

我测试了您的代码,似乎使用firstBall.userInteractionEnabled = true是原因。 没有它,它应该工作。我做了一些研究(here for example),但无法用userInteractionEnabled弄清楚这种行为的原因是什么。或者您使用userInteractionEnabled的原因是什么?

因更新问题而更新

首先 ball.physicsBody?.restitution = 3定义物理机构的弹性。默认值为0.2,属性必须介于0.0 ans 1.0之间。因此,如果将其设置为3.0,则会产生一些意想不到的效果。我刚删除它以使用默认值0.2。

第二次,点击后跳球并增加我的分数

physicsBody?.velocity = CGVectorMake(0, 600)
physicsBody?.applyImpulse(CGVectorMake(0, 1100))
<{1}}

touchesBegan方法中的

<强>结果

enter image description here