边界功能不起作用? Swift SpriteKit

时间:2015-12-06 23:17:50

标签: swift sprite-kit

首先,我试图做但却明显失败的是阻止一个精灵"玩家"从地图的边缘移开" 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来移动它。

2 个答案:

答案 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
希望这会有所帮助。