触摸 Sprite,使其跳起来然后再次落下(重复点击 spritenode 的次数。)
Touch Sprite, make it jump up then fall down again(repeat as many times as spritenode is tapped.)
我创建了一个项目,其中有一个球,当视图加载时,它会掉下来,这很好。当点击 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
}
以前是使用CGVectorMake
(脉冲,速度)点击的SKNode,现在是SKSpriteNode,我尝试使用SKAction
,但它要么不起作用,要么我' m 放错地方了(touches begin).
我测试了你的代码,似乎使用 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 class
的touchesBegan
方法中
结果
我创建了一个项目,其中有一个球,当视图加载时,它会掉下来,这很好。当点击 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
}
以前是使用CGVectorMake
(脉冲,速度)点击的SKNode,现在是SKSpriteNode,我尝试使用SKAction
,但它要么不起作用,要么我' m 放错地方了(touches begin).
我测试了你的代码,似乎使用 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 class
touchesBegan
方法中
结果