我正在编写3D游戏并尝试在提取的水龙头的处理程序中编写表达式:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent!) {
for touch: AnyObject in touches {
let touchPoint: CGPoint = touch.location(in: self)
if (isTracking == true && sqrtf(powf((touchPoint.x - thumbNode.position.x), 2) + powf((touchPoint.y - thumbNode.position.y), 2)) < size * 2)
{...}
}
}
但是Xcode写错了:
二元运算符' - '不能应用于两个'CGFloat'操作数。
尝试过:
var arg_3 = (touchPoint.x - self.anchorPointInPoints().x)
var expr_3 = powf(Float(arg_3), 2)
var arg_4 = (touchPoint.y - self.anchorPointInPoints().y)
var expr_4 = powf(Float(arg_4),2)
var expr_5 = expr_3 + expr_4
var expr_6 = thumbNode.size.width
if (sqrtf(Float(expr_5)) <= expr_6)
{}
现在它出了问题:
二进制运算符'&lt; ='不能应用于'Float'和'CGFloat'类型的操作数
请帮我解决这个问题。
提前致谢。
答案 0 :(得分:1)
您可以使用pow
和sqrt
来获取并返回CGFloat
,这是CGPoint
中值的类型。这样可以避免在样本中使用任何强制转换,因为所有强制转换都是CGFloat
。
答案 1 :(得分:0)
这是一个误导(错误)的错误消息。
powf
不接受CGFloat
作为参数。
改为创建Float
:
let x = Float(touchPoint.x - thumbNode.position.x)
powf(x, 2)
编辑:
解决方案方法1:
let y = Float(touchPoint.y - thumbNode.position.y)
let x = Float(touchPoint.x - thumbNode.position.x)
if (isTracking == true && sqrtf(powf(x, 2) + powf(y, 2)) < size * 2)
{...}
解决方案方法2:
if (sqrtf(Float(expr_5)) <= Float(expr_6)) ...