首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpriteKit -对象内部的播放器

SpriteKit -对象内部的播放器
EN

Stack Overflow用户
提问于 2018-01-27 05:23:52
回答 1查看 69关注 0票数 0

我目前在一家2D无尽跑步者公司工作。在游戏中,您可以更改角色的状态,然后在对象中穿行。但是如果玩家在一个物体内部,他不应该能够改变回另一个状态,直到他离开这个物体。

目前我正在检查这种状态,如下所示:

代码语言:javascript
复制
    if((thePlayer.physicsBody?.allContactedBodies())! != [])
    {
        for object in (thePlayer.physicsBody?.allContactedBodies())!
        {
            guard let node = object.node
            else
            {
                return
            }

            // Player IN a Block?

            if  node.frame.minX < thePlayer.frame.maxX - 1 &&
                node.frame.maxX > thePlayer.frame.minX + 1 &&
                node.frame.maxY > thePlayer.frame.minY + 1 &&
                node.frame.minY < thePlayer.frame.maxY - 1
                {
                    //Player is IN a Block
                    isInBlock = true
                }

        }
    }

我对这种解决方案并不满意,因为我通过SKReferenceNode添加了新的level序列,而该节点中的level对象不会响应这种检查方式。

我认为这是因为SKReferenceNode内部的节点使用SKReferenceNode的坐标系,而播放器使用的是主坐标系。

无论如何,我不确定这是不是最好的解决方案。什么是更好的方法呢?或者我怎样才能至少解决SKReferenceNode问题?

编辑:我改变了代码的结构,现在我只在玩家点击屏幕的时候检查碰撞。这仍然保留了有关坐标系和SKReferenceNode的问题。我仔细看了看,现在我确信,这就是问题所在。

如何获取SKReferenceNode内部节点在主场景坐标系中的位置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-04 06:40:16

基本上,我保留了最初的解决方案,因为我只在用户更改角色状态时检查玩家是否在块中。这使得代码非常高效,因为它也只检查节点,这些节点在这一时刻接触到了玩家。

我还修复了剩余的问题,即我通过SKReferenceNode添加的节点使用了与播放器不同的另一个坐标系。现在我只获取SKReferenceNode的X位置,并将其添加到碰撞节点的X位置。这不是最好的解决方案,但它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48469745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档