二进制运算符' - '不能应用于两个'CGFloat'操作数

时间:2017-04-06 09:18:52

标签: 3d swift3 pow

我正在编写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'类型的操作数

请帮我解决这个问题。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用powsqrt来获取并返回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)) ...