gpt4 book ai didi

ios - 使用 flatMap 枚举 SpriteKit 节点

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:33 25 4
gpt4 key购买 nike

我尝试使用以下方法获取某个类的所有节点:

let enemies = children.flatMap { $0 as? SomeEnemyClass }

结果是一个空数组。我想了解为什么我没有得到任何结果。 enumerateChildNodesWithName 有效,但它没有列出我认为可能会有所启发的父/子关系。谢谢!

这是代码:有一个简单的敌人类,一个用敌人对象替换场景编辑器中的节点的关卡管理器,以及 GameScene.swift。一切都被分配到一个世界节点。

敌类

class Enemy: SKSpriteNode {
func spawn(parentNode:SKNode, position: CGPoint, size: CGSize = CGSize(width: 50, height: 50)) {
parentNode.addChild(self)
self.size = size
self.position = position
self.name = "enemy"
self.physicsBody = SKPhysicsBody(circleOfRadius: size.width / 2)
self.physicsBody?.affectedByGravity = false
self.physicsBody?.categoryBitMask = PhysicsCategory.enemy.rawValue
self.physicsBody?.contactTestBitMask = PhysicsCategory.hero.rawValue
self.physicsBody?.collisionBitMask = 0
}
}

层级经理

    class LevelManager
{
let levelNames:[String] = ["Level1"]
var levels:[SKNode] = []

init()
{
for levelFileName in levelNames {
let level = SKNode()
if let levelScene = SKScene(fileNamed: levelFileName) {
for node in levelScene.children {
switch node.name! {
case "enemy":
let enemy = Enemy()
enemy.spawn(level, position: node.position)
default: print("Name error: \(node.name)")
}
}
levels.append(level)
}
}
func addLevelsToWorld(world: SKNode)
{
for index in 0...levels.count - 1 {
levels[index].position = CGPoint(x: -2000, y: index * 1000)
world.addChild(levels[index])
}
}
}

GameScene.swift - didMoveToView

world = SKNode()
world.name = "world"
addChild(world)

levelManager.addLevelsToWorld(self.world)
levelManager.levels[0].position = CGPoint(x:0, y: 0)

最佳答案

mapflatMap 将一个数组转换为另一个数组,您真正要做的只是为敌人过滤子节点。请改用 filter

let enemines = children.filter { $0 is SomeEnemyClass }

也就是说,我看不出您的示例代码无法运行的任何原因。

这是此代码工作的示例。 enter image description here

此代码仅在您具有从 SKNode 派生的真实类时才有效。使用节点名称字符串来标识节点类型更为常见。如果你的敌人有一个固定的字符串名称,这将有效。

let enemies = children.filter { $0.name == "SomeEnemy" }

关于ios - 使用 flatMap 枚举 SpriteKit 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38046533/

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