首先,我试图做但却明显失败的是阻止一个精灵"玩家"从地图的边缘移开" 400x400px img"。
游戏中的控件是向右,向左,向上和向下移动的按钮。 我有它,所以当按下按钮时它会运行一个功能,检查玩家的目的地是否在地图的区域之外。
****注意,地图是一个5x5的网格地图,网格的每个方格都是80x80内部的地图图像****
这是检查玩家目的地是否不在地图上的功能:
func checkBordersDownPlayer() {
if player.position.y - 80 == map.position.y - 80 {
print("Node cannot move. Map borders are stopping the Node from moving past it's boundaries.")
}
else {
player.runAction(moveDown)
print("Player was able to move!")
}
}
现在困扰我的是播放器会自动忽略print()函数和if函数,但仍会运行SKAction来移动它。
答案 0 :(得分:0)
我不知道你如何计算运动,我能做的最好的事情就是猜你的问题。
player.position.y - 80 == map.position.y - 80
相反,你可能想要这样的......
player.position.y - 80 <= map.position.y - 80
希望有帮助
修改强>
更进一步的是重置球员位置......
func checkBordersDownPlayer() {
if player.position.y - 80 <= map.position.y - 80 {
player.position.y = map.position.y - 80
print("Node cannot move. Map borders are stopping the Node from moving past it's boundaries.")
}
else {
player.runAction(moveDown)
print("Player was able to move!")
}
}
答案 1 :(得分:0)
我可以从你的帖子评估的是,你可能还不清楚精灵节点的位置概念。
与UIKit
不同,其中position
的框架位于Rectangle
的左上角,Spritekit
中的节点位置位于其中心位置默认,除非您将使用其anchor point
。
再次考虑你的情况,你应该使用Spritekit提供的工具来有效地处理这些任务。你应该在地图图像周围使用Physics body,并让你的玩家另一个物理团体为他们分配不同的物理类别。
在您的情况下,您不需要指定任何接触测试位掩码或碰撞位掩码,直到玩家触摸您设置的边界时您不想获得通知。您可以参考本教程了解更多https://www.raywenderlich.com/123393/how-to-create-a-breakout-game-with-sprite-kit-and-swift
希望这会有所帮助。