swift - 触摸 Sprite,使其跳起来然后再次落下(重复点击 spritenode 的次数。)

标签 swift sprite-kit skspritenode skphysicsbody skaction

我创建了一个项目,其中有一个球,当 View 加载时,它会掉下来,这很好。当点击 Spritenode 时,我试图让球跳起来并再次落下。

--此问题已编辑-- 最初,我能够在 sprite.userInteractionEnabled = false 时让它工作。为了改变分数,我必须将此声明变为真。

enter image description here

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

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,但它都不起作用,或者我把它放在错误的地方(触摸开始)。

最佳答案

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

由于问题的更新而更新

首先 ball.physicsBody?.restitution = 3 定义物理体的弹性。默认值为 0.2,该属性必须介于 0.0 和 1.0 之间。所以如果设置成3.0会造成一些意想不到的效果。我只是删除它以使用默认值 0.2。

其次,让球在点击后跳跃并增加我放的分数

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

Ball 类的 touchesBegan 方法中

结果

enter image description here

关于swift - 触摸 Sprite,使其跳起来然后再次落下(重复点击 spritenode 的次数。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38790908/

相关文章:

swift - 如何更改导航栏(UISearchController)的文本?

objective-c - 为什么 mouseDragged 位置落后于实际鼠标?

ios - 在 Sprite Kit 游戏中重置 SKScene

swift - 可编码数组和 Alamofire 的问题

ios - 当打开另一个通知时,如何防止通知从通知中心消失? iOS

json - 在 Swift 3.0 中如何从返回的 json 中获取特定值?

swift - `SKScene.nodes()` 为触摸位置提供了太多节点

swift - 如何更改游戏场景中文本标签的文本

ios - 检测用户何时点击 SKSpriteNode

swift - 创建多个略有变化的 Sprite 节点?