首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SKReferenceNode缩放后,快速碰撞不起作用

SKReferenceNode缩放后,快速碰撞不起作用
EN

Stack Overflow用户
提问于 2016-08-03 07:53:27
回答 1查看 93关注 0票数 0

我有一个奇怪的问题,我的SKReferenceNode在扩容后不能正常碰撞。它在中心碰撞良好,但会忽略边缘上的碰撞和接触。

Here is the first photo of the scene。SKReferenceNode被显著放大,正如在this照片中看到的那样,在边缘上不能正确碰撞。在启用showPhysics的情况下,PhysicsBody看起来是正确的,但是球拒绝碰撞。

SKReferenceNode使用的是alpha碰撞遮罩,因为我需要在将来将其更改为更大的精灵来制作动画等。此外,未缩放的对象完全可以正常工作。最后,在球与中心发生碰撞后,块被重置,碰撞又开始按预期进行。修复它的代码可能在重置函数中,但我在加载关卡之前重置了所有内容,所以这没有意义。以下是我的重置代码的一部分:

代码语言:javascript
复制
func reset() {
    physicsWorld.gravity = CGVectorMake(0, -9.8)
    for grav in gravityBlock {
        grav.reset()
    }

    gravity = -9.8

    //Resets blocks
    for blocks in destroyedBlocks { //the blocks are stored in destroyedBlocks when collided with
        blocks.reset()
    }

    destroyedBlocks = []

    /*Irrelevant code removed*/
    }

下面是我的blocks.reset()函数:

代码语言:javascript
复制
    override func reset() {
    super.reset()

    self.physicsBody?.categoryBitMask = 1
    removeAllActions()

    self.texture = self.text
    shadow.hidden = false

    self.alpha = 0
    shadow.alpha = 0

    let appear = SKAction(named: "Appear")!
    self.runAction(appear)
    shadow.runAction(SKAction.fadeInWithDuration(0.25))
}

下面是super.reset()

代码语言:javascript
复制
    func reset() {
    self.hidden = false
    state = .NotBroken
}

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-08-03 08:18:12

当你缩放精灵的时候,你只是改变了它的视觉表现。物理体保持不变。这就是为什么在碰撞过程中你会变得“奇怪”。

您可以看到显示场景中的物理用途,只需打开GameViewController并添加以下行

代码语言:javascript
复制
skView.showsPhysics = true

viewDidLoad内部,紧跟在这一行之后

代码语言:javascript
复制
skView.showsNodeCount = true

然后再次运行您的游戏,物理边界现在将突出显示。

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

https://stackoverflow.com/questions/38732249

复制
相关文章

相似问题

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