gpt4 book ai didi

ios - 在 SKSpriteNode 自定义子类的初始化程序中设置物理体不起作用

转载 作者:行者123 更新时间:2023-12-01 18:38:40 25 4
gpt4 key购买 nike

我正在使用 SpriteKit 构建游戏,并且正在使用 Xcode 的场景编辑器来设置我的 GameScene .

场景包含 Player我已将其作为 Color Sprite 拖入场景并填写了 Custom Class字段为 mygame.Player .

我有一个名为 Player 的 SKSpriteNode 自定义子类在这个类中,我在应用程序调用的初始化程序中设置了物理属性。

class Player: SKSpriteNode {

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
print(self)
self.physicsBody = SKPhysicsBody(rectangleOf: self.size)
self.physicsBody?.restitution = 0
self.physicsBody?.isDynamic = true
self.physicsBody?.affectedByGravity = true
self.physicsBody?.velocity = CGVector(dx: 50, dy: 0)
print(self.physicsBody)
}

}

在我的 GameScene.swift文件,我可以引用播放器,所以这个链接有效。
override func didMove(to view: SKView) {
player = childNode(withName: "player") as! Player
print(player)
print(player.physicsBody)
}

这实际上完美地打印了 Player 和物理体。
<SKSpriteNode> name:'player' texture:['nil'] position:{0, 0} scale:{1.00, 1.00} size:{100, 100} anchor:{0.5, 0.5} rotation:0.00
Optional(<SKPhysicsBody> type:<Rectangle> representedObject:[<SKSpriteNode> name:'player' texture:['nil'] position:{0, 0} scale:{1.00, 1.00} size:{100, 100} anchor:{0.5, 0.5} rotation:0.00])

但是,即使我已将场景设置为具有重力,玩家也永远不会在场景中移动!为了让玩家真正移动,我需要在 GameScene 中的 didMove(to:) 函数中添加另一行代码,再次设置 PhysicsBody:
player.physicsBody = SKPhysicsBody(rectangleOf: player.size)

这里发生了什么?为什么在初始化程序中设置我的 Player 的物理主体不起作用?

最佳答案

因为有一个 bug,即在物理世界存在之前创建物理体时,它没有正确设置在世界中。

作为临时解决方案,请尝试:

class Player: SKSpriteNode {

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
print(self)
DispatchQueue.main.asyncAfter(deadline: .now() + 1)
{
self.physicsBody = SKPhysicsBody(rectangleOf: self.size)
self.physicsBody?.restitution = 0
self.physicsBody?.isDynamic = true
self.physicsBody?.affectedByGravity = true
self.physicsBody?.velocity = CGVector(dx: 50, dy: 0)
print(self.physicsBody)
}
}

}

延迟创造 body ,直到世界存在。

如果它有效,那么你需要想出一种更优雅的方式来在世界存在之后创造 body 。

关于ios - 在 SKSpriteNode 自定义子类的初始化程序中设置物理体不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47169966/

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