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

Posted

技术标签:

【中文标题】触摸 Sprite,使其跳起来然后再次落下(重复多次点击 spritenode。)【英文标题】:Touch Sprite, make it jump up then fall down again(repeat as many times as spritenode is tapped.) 【发布时间】:2016-08-05 13:48:51 【问题描述】:

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

--此问题已编辑-- 最初,当sprite.userInteractionEnabled = false 时,我能够让它工作。为了让分数发生变化,我必须把这句话变成真的。

现在我无法让球落下并被点击跳跃。当我转动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



    

以前,它是一个 SKNode,现在使用 CGVectorMake(impulse,velocity) 轻敲,它是一个 SKSpriteNode,我尝试使用 SKAction,但它要么不起作用,要么我放错了地点(触摸开始)。

【问题讨论】:

【参考方案1】:

我测试了您的代码,似乎使用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 classtouchesBegan方法中

结果

【讨论】:

谢谢。有效。不敢相信就这么简单。 你认为你能帮我解决这个问题吗?我不想删除你回答了我的问题,因为我问的时候你确实回答了。

以上是关于触摸 Sprite,使其跳起来然后再次落下(重复多次点击 spritenode。)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Excel 中自动填充公式,使其跳过中间的一些行?

根据 Swift 中的触摸正确移动 Sprite

以一定速度在屏幕上移动对象。(Sprite Kit)

在Sprite纹理中检测触摸而不是整个框架iOS Swift SpriteKit?

Sprite-kit:检测左右触摸

检测 Sprite Kit 中的长触摸