gpt4 book ai didi

ios - Sprite Kit - 从 didBeginContact() 创建节点

转载 作者:行者123 更新时间:2023-11-30 14:01:07 24 4
gpt4 key购买 nike

我正在使用自定义砖类:

import SpriteKit
class Brick: SKSpriteNode {

enum type { case Normal }

convenience init (type: Brick.type) {
self.init(color: .greenColor(), size: CGSizeMake(75, 25))

physicsBody.SKPhysicsBody(rectangleOfSize: size)
physicsBody!.mass = 9999
physicsBody!.affectedByGravity = false

position = CGPointMake(100, 50)

// Category and collision bitmasks ...
// Action to move the brick upwards ...
}

// Stuff
}

在我的场景中,我正在创建一个初始砖 block ,并且一切正常。但是,当我尝试在 didBeginContact() 函数中添加 block 时,我得到了意想不到的结果。

我在屏幕 1/5 高度处有一个 SKNode。因此,每当一 block 砖 block 到达该高度时,它就会与这个不可见的节点接触并创建一 block 新砖 block :

// Inside SKScene
func didBeginContact(contact: SKPhysicsContact) {

// I set physics body A and B ...

if a.categoryBitMask == Category.brick && b.categoryBitMask == Category.brickSpawner {
addChild(Brick(type: .Normal))
}
}

所以问题是:当我在这个函数中创建一个新的砖 block 时,位置被设置为 (0, 0) 而不是 Brick 类中定义的 (100, 50)。实际上,如果我继续使用 println(brick.position) 我会得到 (100, 50),但在屏幕中它看起来位于 (0, 0)。

如果我在代码中的其他位置创建 block ,例如在 touchesBegan()update() 函数中,则位置设置正确。仅当从 didBeginContact() 创建节点时才会出现此问题。

最佳答案

这应该有帮助,它解释了单个框架中的步骤。

https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Introduction/Introduction.html

您在错误的时间创建了它,因此幕后的步骤之一是由于缺少几个步骤而重置它。将进程排队等待 didFinishUpdate 命令。 (我只是在 did 联系人中创建对象,然后将其放入数组中,然后在 didFinishUpdate 上,遍历数组并将它们添加到场景中,然后清除数组)

关于ios - Sprite Kit - 从 didBeginContact() 创建节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32980649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com