gpt4 book ai didi

swift - 访问多个 SKShapeNodes 的属性

转载 作者:行者123 更新时间:2023-11-28 07:01:34 25 4
gpt4 key购买 nike

在我的程序中,我有一个名为 addObstacle 的方法,它创建一个带有 SKPhysicsBody 和向左速度的矩形 SKShapeNode。

func addObstacle(bottom: CGFloat, top: CGFloat, width: CGFloat){
let obstacleRect = CGRectMake(self.size.width + 100, bottom, width, (top - bottom))
let obstacle = SKShapeNode(rect: obstacleRect)
obstacle.name = "obstacleNode"
obstacle.fillColor = UIColor.grayColor()
obstacle.physicsBody = SKPhysicsBody(edgeLoopFromPath: obstacle.path!)
obstacle.physicsBody?.dynamic = false
obstacle.physicsBody?.affectedByGravity = false
obstacle.physicsBody?.contactTestBitMask = PhysicsCatagory.Ball
obstacle.physicsBody?.categoryBitMask = PhysicsCatagory.Obstacle
obstacle.physicsBody?.usesPreciseCollisionDetection = true
self.addChild(obstacle)
obstacle.runAction(SKAction.moveBy(obstacleVector, duration: obstacleSpeed))
}

在一个名为 endGame 的单独方法中,我想淡出屏幕上当前存在的所有障碍物。所有障碍对象都是私有(private)的,这使得访问它们的属性变得困难。如果屏幕上只有一个,我通常可以通过它的名字访问它。但是,当我说 childNodeWithName("obstacleNode")?.runAction(SKAction.fadeAlphaBy(-1.0, duration: 1.0)) 时,只有一个“障碍”消失了;其余的仍然完全不透明。有这样做的好方法吗?提前致谢 (:

最佳答案

你可能会选择:

self.enumerateChildNodesWithName("obstacleNode", usingBlock: {
node, stop in
//do your stuff
})

可以找到有关此方法的更多信息 here .

在这个例子中,我假设您已经在场景中添加了障碍物。如果不是,则代替场景,在障碍物的父节点上运行此方法。

还有一点……SKShapeNode 在很多情况下都不是高性能解决方案,因为它需要至少一个绘制 channel 才能由场景渲染(它不能像 SKSpriteNode 那样批量绘制)。如果在您的应用程序中使用 SKShapeNode 不是“必须”,并且您可以使用 SKSpriteNode 切换它们,我强烈建议您这样做,因为性能。

如果您对所有 Sprite 使用相同的图集和相同的混合模式,SpriteKit 可以在单个绘制 channel 中渲染数百个节点。 SKShapeNodes 不是这种情况。关于此的更多信息 here .搜索有关此主题的 SO,有一些关于这一切的有用帖子。

关于swift - 访问多个 SKShapeNodes 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31886050/

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