gpt4 book ai didi

ios - SpriteKit/Swift - 二元运算符 '>' 不能应用于两个 'CGVector' 操作数

转载 作者:可可西里 更新时间:2023-11-01 00:50:44 24 4
gpt4 key购买 nike

在我的游戏中,我需要比较碰撞时的 2 个速度。两种速度都采用 CGVector(dx: , dy:) 格式。但是 Swift 3 不允许我使用“>”和“<”操作数来比较它们。我该如何解决这个问题?代码如下:

func didBegin(_ contact: SKPhysicsContact) {
var firstBody = SKPhysicsBody()
var secondBody = SKPhysicsBody()
let ballNode = self.childNode(withName: ballName)
let defaultSpeedX:CGFloat = 100
let defaultSpeedY:CGFloat = -100
let maxSpeed = CGVector(dx: defaultSpeedX * 3, dy: defaultSpeedY * 3)
let minSpeed = CGVector(dx: defaultSpeedX / 2 , dy: defaultSpeedY / 2)

if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}

if firstBody.categoryBitMask == ballBitmask && secondBody.categoryBitMask == drainBitmask {
endGame()

} else if firstBody.categoryBitMask == ballBitmask && secondBody.categoryBitMask == target1Bitmask {
score += 20
self.vc.scoreLabel.text = "Score: \(score)"
let currentSpeedX = ballNode?.physicsBody?.velocity.dx
let currentSpeedY = ballNode?.physicsBody?.velocity.dy
let speedDouble = CGVector(dx: currentSpeedX! * 2, dy: currentSpeedY! * 2)

if ballNode?.physicsBody?.velocity == maxSpeed {

ballNode?.physicsBody?.velocity = maxSpeed

} else if speedDouble < maxSpeed {

ballNode?.physicsBody?.velocity = speedDouble

} else if speedDouble > maxSpeed {

ballNode?.physicsBody?.velocity = maxSpeed

}

谢谢

最佳答案

向量的“速度”实际上是向量描述的三角形的斜边。试试这个:

extension CGVector {
var speed: CGFloat {
return hypot(dx, dy)
}

static func > (lhs: CGVector, rhs: CGVector) -> Bool {
return lhs.speed > rhs.speed
}

static func < (lhs: CGVector, rhs: CGVector) -> Bool {
return lhs.speed < rhs.speed
}
}

let aaa = CGVector(dx: 10, dy: 10)
let bbb = CGVector(dx: 13, dy: 12)

print(aaa > bbb)

有了这个扩展,你会发现你现有的代码,} else if speedDouble < maxSpeed { , 将编译。

它是如何工作的?那么,作为矢量的速度由两个分量定义 - 水平速度,dx和垂直速度,dy .如果你想象dxdy作为直角三角形的两条边,矢量的长度是斜边(记住毕达哥拉斯)-这就是hypot返回。

有了上面的扩展,<>运营商现在比较 CGVector物体的速度(您可以愉快地将其重命名为 length )。

关于ios - SpriteKit/Swift - 二元运算符 '>' 不能应用于两个 'CGVector' 操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39665024/

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