我似乎很难将我的精灵节点保存在我已按以下方式设置的地图边界内:
我有一个SKNode *enemy
来自SKScene
,目标和行为来自iOS 9中的GameplayKit
。目前,该节点会徘徊,并避免定义的障碍{{1}对象。我设置了我的位掩码,以便任何障碍物被认为是类别墙,节点被告知要与之碰撞(AKA禁止通过)。
在我的GKPolygonObstacle
我处理这些碰撞。一切都按计划完成,手动移动敌人时没有问题。
然而,当我通过didBeginContact:(SKPhysicsContact *)contact
设置为敌人在场景中游荡时,问题就开始了
SKGoal *wanderGoal
敌人按预期随机移动,似乎大部分时间都避开了障碍......然而,当敌人确实实际上穿过地图障碍时。让我对此进行扩展:
地图障碍本质上是一个矩形,我设置了2个节点作为一个shell,代表这个形状的左半部分和右半部分。这些节点的厚度为100磅,因此它们不仅仅是 // Low --> 0.5 Lowest --> 0.25
enemy.wanderGoal = [GKGoal goalToWander:low];
[enemy.agent.behavior setWeight:lowest forGoal:enemy.wanderGoal];
// Add obstacles to avoid for each of the inner map nodes
// that act as impassible areas for the enemy to pass through.
NSArray *obstacles = [SKNode obstaclesFromNodePhysicsBodies:innerMapArray];
/** This goal does not change --> enemies will ALWAYS
avoid the obstacles in the level map. This should always
be set to the highest priority of the enemy goals
*/
enemy.avoidGoal = [GKGoal goalToAvoidObstacles:obstacles maxPredictionTime:10];
// Highest --> 250
[enemy.agent.behavior setWeight:highest forGoal:enemy.avoidGoal];
refs而是形状。它们起到这两个括号的作用:[](我的两半在中间是齐平的触摸)。
我的问题是:
我理解虽然CGPath
是建议的行为,但保证无法达到此目标(但可以~95%确定它不会发生{{3} }显示)。 但是,我不明白为什么敌人不会简单地滑动"沿着边界的边缘,目标告诉它(尝试)"传递"通过这样的边界。
这"滑动"当我在场景周围手动移动敌人时,行为会发生,并且当我试图移动它通过被认为是障碍物的边界时,它会朝着我移动的方向滑动(就像任何视频一样)游戏确实有地图边界)。
如果有人可以帮助我防止这种情况发生/解释如何防止敌人通过这些(据说)无法通过"#34;地区,我会非常感激。
仅供参考:如果您不清楚我所描述的内容/我如何创建任何对象,请询问并提供更多信息以帮助您。