我正在尝试写一些非常简单的东西 - 并在此实例上使用SpriteKit。 我在其他平台上做的方式是让一个看不见的孩子“棒”伸出一点点。通过检测隐形“棍棒”之间的碰撞,我可以判断物体是否靠近墙壁。 我试图使用SpriteKit复制相同的东西。当然,我更喜欢从物体上出来一个看不见的“光束”并给我一点距离 - 但这可能太麻烦了。
我会采用任何方式来改进我到目前为止的愚蠢项目。
感谢。
答案 0 :(得分:0)
以下是我提出的不涉及物理的内容......
拖动鼠标移动汽车,中心的标签会更新,告诉您距离最近的墙壁的距离。释放鼠标以重置汽车。
非常简单的例子,可以更新以提供更准确的测量结果。
class GameScene: SKScene {
let car = SKSpriteNode(color: .blue, size: CGSize(width: 50, height: 100))
let label = SKLabelNode(text: "")
func findNearestWall() -> CGFloat {
// you can make this more advanced by using the CGPoint of the frame borders of the car, or even 6+ points for more accuracy
let closestX: CGFloat = {
if car.position.x < 0 { // left wall
return abs(frame.minX - car.position.x)
} else { // right wall
return abs(frame.maxX - car.position.x)
}
}()
let closestY: CGFloat = {
if car.position.y < 0 { // bottom wall
return abs(frame.minY - car.position.y)
} else { // top wall
return abs(frame.maxY - car.position.y)
}
}()
if closestX < closestY {
return closestX.rounded() // as closest wall distance
} else {
return closestY.rounded() // as closest wall distance
}
}
override func didMove(to view: SKView) {
removeAllChildren()
label.fontSize *= 2
addChild(car)
addChild(label)
}
override func mouseDown(with event: NSEvent) {
}
override func mouseDragged(with event: NSEvent) {
let location = event.location(in: self)
car.position = location
}
override func mouseUp(with event: NSEvent) {
car.position = CGPoint.zero
}
override func didEvaluateActions() {
label.text = String(describing: findNearestWall())
}
}