Swift 边界功能不起作用?斯威夫特斯皮特基特酒店

Swift 边界功能不起作用?斯威夫特斯皮特基特酒店,swift,sprite-kit,Swift,Sprite Kit,首先,我要做的是阻止精灵“玩家”从地图“400x400px img”的边缘移动,但显然失败了 游戏中的控件是用于向右、向左、向上和向下移动的按钮。 我有它,所以当按下按钮时,它会运行一个功能,检查玩家的目的地是否在地图区域之外 ****请注意,该地图是一个5x5栅格地图,栅格的每个正方形在地图图像中都是80x80**** 以下是检查玩家目的地是否在地图之外的函数: func checkBordersDownPlayer() { if player.position.y - 80 ==

首先,我要做的是阻止精灵“玩家”从地图“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来移动它。

在不知道如何计算移动的情况下,我只能猜测这是您的问题

player.position.y - 80 == map.position.y - 80 
相反,你可能想要这样的东西

player.position.y - 80 <= map.position.y - 80 

player.position.y-80从你的帖子中我能评估的是,也许你不清楚精灵节点的位置概念

  • UIKit
    中帧的
    位置位于
    矩形的左上角不同,在
    Spritekit
    中,节点的位置默认位于其中心,除非您使用其
    锚定点

  • 再次考虑到您的情况,您应该使用Spritekit提供的工具来有效地处理此类任务,您应该在地图图像周围使用物理体,并使您的播放器成为另一个物理体,为其分配不同的物理类别

在您的情况下,您不需要指定任何接触测试位掩码或碰撞位掩码,直到您不想在玩家触及您设置的边界时得到通知。有关更多信息,请参阅本教程
希望这有帮助

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!")
    }
}