UserInteractionEnabled

UserInteractionEnabled

我创建了一个项目,在那里我有一个球,当视图加载时,它会掉下来,这很好。我试着让球跳起来,然后当弹簧被敲打时又掉下来。
--此问题已编辑--
最初,我可以让它在sprite.userInteractionEnabled = false时工作。我必须把这句话变成事实,才能让分数改变。
swift - 触摸Sprite,使其跳起来然后再次跌落(重复击击spritenode的次数。)-LMLPHP
现在我不能让球掉下来然后被拍到跳下去。当我转动时,球会因重力而下落。我该如何轻拍雪碧并让它跳跃。
gamescope.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



    }

以前,它是一个SKNode正在使用ball.physicsBody?.dynamic = true(impulse,velocity)点击,现在,它是一个SKSpriteNode,我尝试使用CGVectorMake,但它要么不起作用,要么放错了位置(触摸开始)。

最佳答案

我测试了您的代码,似乎使用firstBall.userInteractionEnabled = true是原因。没有它,它应该能工作。我做了一些研究(here for example),但无法找出这种行为的原因。或者您使用userInteractionEnabled的原因是什么?
因问题更新而更新
首先定义物理体的弹性。默认值为0.2,属性必须介于0.0和1.0之间。因此,如果将其设置为3.0,将导致一些意外的影响。我只是删除了它以使用默认值0.2。
第二,在击球后使球跳跃并提高我的得分

physicsBody?.velocity = CGVectorMake(0, 600)
physicsBody?.applyImpulse(CGVectorMake(0, 1100))

userInteractionEnabledball.physicsBody?.restitution = 3方法中
结果
swift - 触摸Sprite,使其跳起来然后再次跌落(重复击击spritenode的次数。)-LMLPHP

10-07 18:35