gpt4 book ai didi

swift - 在 macOS 中使用空格键添加 SKSpriteNode

转载 作者:搜寻专家 更新时间:2023-11-01 07:06:52 24 4
gpt4 key购买 nike

我正在使用基本的 Breakout 游戏框架。我想使用空格键添加球。我已经到了球出现的地步,但我没有施加冲动,所以它们弹跳起来。我还希望它们的生命周期为 x 秒。这是代码的相关压缩部分。

我在 OSX/macOS 上使用 Xcode 9 而不是 iOS swift 4 10.13.2

    override func keyDown(with event: NSEvent) {
let keyEvent = event.characters
if keyEvent == " "{print("space bar")

// Create sprite
let myBall = SKSpriteNode(imageNamed: "greenball")
myBall.zPosition = 1
myBall.xScale = 1
myBall.yScale = 1

// Determine where to spawn the ball along the Y axis
let actualY:CGFloat = CGFloat(arc4random_uniform(624))-312.0

// Position the ball
myBall.position = CGPoint(x: 460.0, y: actualY)

// Determine speed of the ball
let actualDuration:CGFloat = 4.0

myBall.physicsBody?.isDynamic = true
myBall.physicsBody?.affectedByGravity = true
myBall.physicsBody?.friction = 1
myBall.physicsBody?.restitution = 1
myBall.physicsBody?.mass = 0.0035744346678257

addChild(myBall)

myBall.physicsBody?.applyImpulse(CGVector(dx: 300.0, dy: -300.0))//<--this does not fore ??
}
}

最佳答案

您需要始终记住创建一个物理体。我会推荐使用!代替 ?当你处理可选项时。利用 ?只有当你希望你的结果为零时,否则你希望你的程序在调试期间崩溃,以便你知道你有错误。

override func keyDown(with event: NSEvent) {
let keyEvent = event.characters
if keyEvent == " "{print("space bar")

// Create sprite
let myBall = SKSpriteNode(imageNamed: "greenball")
myBall.zPosition = 1
myBall.xScale = 1
myBall.yScale = 1

// Determine where to spawn the ball along the Y axis
let actualY:CGFloat = CGFloat(arc4random_uniform(624))-312.0

// Position the ball
myBall.position = CGPoint(x: 460.0, y: actualY)

// Determine speed of the ball
let actualDuration:CGFloat = 4.0
myBall.physicsBody = SKPhysicsBody(circleOfRadius:myBall.size.width /2 )
myBall.physicsBody!.isDynamic = true
myBall.physicsBody!.affectedByGravity = true
myBall.physicsBody!.friction = 1
myBall.physicsBody!.restitution = 1
myBall.physicsBody!.mass = 0.0035744346678257

addChild(myBall)

myBall.physicsBody!.applyImpulse(CGVector(dx: 300.0, dy: -300.0))//<--this does not fore ??
}
}

如果你决定不想偷懒,想写出更干净的代码,那么我建议做 if letguard let

override func keyDown(with event: NSEvent) {
let keyEvent = event.characters
if keyEvent == " "{
print("space bar")

// Create sprite
let myBall = SKSpriteNode(imageNamed: "greenball")
myBall.zPosition = 1
myBall.xScale = 1
myBall.yScale = 1

// Determine where to spawn the ball along the Y axis
let actualY:CGFloat = CGFloat(arc4random_uniform(624))-312.0

// Position the ball
myBall.position = CGPoint(x: 460.0, y: actualY)

// Determine speed of the ball
let actualDuration:CGFloat = 4.0
if let physicsBody = SKPhysicsBody(circleOfRadius:myBall.size.width/1)
{
physicsBody.isDynamic = true
physicsBody.affectedByGravity = true
physicsBody.friction = 1
physicsBody.restitution = 1
physicsBody.mass = 0.0035744346678257 //<-- You really shouldnt mess with this unless you know what you are doing with mass
myBall.physicsBody = physicsBody
}
addChild(myBall)

myBall.physicsBody?.applyImpulse(CGVector(dx: 300.0, dy: -300.0))//<--this does not fore ??
}
}

关于swift - 在 macOS 中使用空格键添加 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com