我正在制作一个iOS游戏,其中英雄位于屏幕的最左侧(横向模式),并且她射击来自右侧的怪物。现在,我正在学习本教程,因为我是iOS游戏的初学者:https://www.raywenderlich.com/71-spritekit-tutorial-for-beginners
我遇到的问题是本教程中的代码来自2013年。这会影响CGPoint在场景中的位置(因为中心现在位于中间而不是左边),而且可能已经存在使它更容易的功能。例如,在本教程中,他们声明
func +(left: CGPoint, right: CGPoint) -> CGPoint {
return CGPoint(x: left.x + right.x, y: left.y + right.y)
}
func -(left: CGPoint, right: CGPoint) -> CGPoint {
return CGPoint(x: left.x - right.x, y: left.y - right.y)
}
func *(point: CGPoint, scalar: CGFloat) -> CGPoint {
return CGPoint(x: point.x * scalar, y: point.y * scalar)
}
func /(point: CGPoint, scalar: CGFloat) -> CGPoint {
return CGPoint(x: point.x / scalar, y: point.y / scalar)
}
#if !(arch(x86_64) || arch(arm64))
func sqrt(a: CGFloat) -> CGFloat {
return CGFloat(sqrtf(Float(a)))
}
#endif
extension CGPoint {
func length() -> CGFloat {
return sqrt(x*x + y*y)
}
func normalized() -> CGPoint {
return self / length()
}
}
仅能够计算两点之间的偏移量并设置弹丸应到达的位置:
let offset = touchLocation - projectile.position
let direction = offset.normalized()
是否有上述代码的更新版本,如果有其他实现射击弹丸功能的初学者教程,请在答案中进行链接。谢谢!
答案 0 :(得分:2)
如果还没有,可以通过GitHub存储库导入所有SpriteKit帮助程序函数,而不用自己复制它们。它们仍然有效,我最近才亲自使用它们。
https://github.com/raywenderlich/SKTUtils/tree/master/SKTUtils
答案 1 :(得分:1)
您包含的代码块使用 Operator Functions 。 CGPoint
没有算术运算符。
Swift Docs中所述的算术运算符定义:
算术运算符 是二进制运算符,因为它在两个目标上运算,并且被称为中缀,因为它出现在两个目标之间这两个目标。
为了更好地理解,让我们弄清楚什么是 CGPoint 。
根据Swift Docs,CGPoint为:
在二维坐标中包含点的结构 系统。
这两个维度是 x 和 y 。初始化CGPoint的三种初始化方法。
init(x: Double, y: Double)
init(x: Int, y: Int)
init(x: CGFloat, y: CGFloat)
如您所见,x
和y
的类型可以为Double
,Int
或CGFloat
。这些数据类型具有算术运算符。
尽管CGPoint
没有内置的算术运算符,但是您可以创建它们,因此您所拥有的代码块就足够了。