首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >父节点移动时不移动的子节点?

父节点移动时不移动的子节点?
EN

Stack Overflow用户
提问于 2014-07-25 22:35:25
回答 1查看 911关注 0票数 1

我有三个节点--世界,玩家和“玩家愿景”。这个世界和vision SKShapeNodes以及我的播放器都使用自定义的SKShapeNode子类。当我移动世界的时候,所有的玩家都会跟着移动,但是当我移动玩家的时候,视觉节点就会固定在它的位置上。这是什么原因?

这是我的玩家课:

代码语言:javascript
复制
class Character : SKShapeNode {
    var vision : SKShapeNode
    var spinning = false

    init(size: CGSize) {
        vision = SKShapeNode()

        // Player Shape
        super.init()
        self.path = SKShapeNode(rectOfSize: size).path
        self.fillColor = SKColor.blackColor()
        self.strokeColor = SKColor.blackColor()
        self.name = "Player"

        // Player Physics Body
        self.physicsBody = SKPhysicsBody(rectangleOfSize: self.frame.size)
        self.physicsBody.restitution = 0
        self.physicsBody.allowsRotation = false
        self.physicsBody.categoryBitMask = ColliderType.Player.toRaw()
        self.physicsBody.collisionBitMask = ColliderType.Wall.toRaw()
        self.physicsBody.contactTestBitMask = ColliderType.Wall.toRaw() | ColliderType.Player.toRaw() | ColliderType.Enemy.toRaw()

        // Vision Shape
        vision = SKShapeNode(rectOfSize: CGSize(width: 200, height: 1))
        vision.fillColor = SKColor.greenColor()

        // Vision Physics body
        vision.physicsBody = SKPhysicsBody(rectangleOfSize: vision.frame.size)
        vision.physicsBody.affectedByGravity = false
        vision.physicsBody.categoryBitMask = ColliderType.Vision.toRaw()
        vision.physicsBody.collisionBitMask = 0
        vision.physicsBody.contactTestBitMask = ColliderType.Wall.toRaw()
        self.addChild(vision)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-26 00:10:02

问题是,由于物理引擎本身的physicsBody,视觉节点会受到物理引擎与其父引擎的单独影响。解决方案是在框架的position步骤中将vision节点的CGPoint(0, 0)属性设置为CGPoint(0, 0)(或您希望它位于父坐标系中的任何位置)。这将导致将视觉节点重置为“跟踪”父节点。

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

https://stackoverflow.com/questions/24965533

复制
相关文章

相似问题

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