gpt4 book ai didi

ios - 当我的所有节点都在本地声明时,不知道如何更新分数标签节点

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

我创建了一个游戏,其中一个球穿过在随机位置掉落的障碍物,当球穿过障碍物时,分数应该增加一,但是对象的所有节点都是在本地声明的,而不是如何无需创建这么多节点即可提高分数。

这是我的一个功能的示例:

func leftObject(){
var rand = arc4random_uniform(2) + 1
if rand == 1
{
var bigWall = SKSpriteNode(imageNamed: "shortwall")
bigWall.position = CGPointMake(CGRectGetMinX(self.frame) + bigWall.size.width / 2, CGRectGetMaxY(self.frame))

var moveObjects = SKAction.moveByX(0, y: -self.frame.size.height * 2, duration: NSTimeInterval(self.frame.size.height / 100))
var removeObjects = SKAction.removeFromParent()
var moveAndRemoveObjects = SKAction.sequence([moveObjects,removeObjects])
bigWall.runAction(moveAndRemoveObjects)
bigWall.physicsBody = SKPhysicsBody(rectangleOfSize: bigWall.size)
bigWall.physicsBody?.dynamic = false
bigWall.physicsBody?.categoryBitMask = objectGroup



}

else
{
var tallWall = SKSpriteNode(imageNamed: "shortwall")
tallWall.position = CGPointMake(CGRectGetMinX(self.frame) + tallWall.size.width / 2, CGRectGetMaxY(self.frame))
var moveObjects = SKAction.moveByX(0, y: -self.frame.size.height * 2, duration: NSTimeInterval(self.frame.size.height / 100))
var removeObjects = SKAction.removeFromParent()
var moveAndRemoveObjects = SKAction.sequence([moveObjects,removeObjects])
tallWall.runAction(moveAndRemoveObjects)
tallWall.physicsBody = SKPhysicsBody(rectangleOfSize: tallWall.size)
tallWall.physicsBody?.categoryBitMask = objectGroup
tallWall.physicsBody?.dynamic = false



movingObjects.addChild(tallWall)
}

然后我有一个每 1 秒调用一次的函数,该函数生成一个随机数来调用随机显示对象的 6 个函数。如果您知道一种方法,即使我必须更改代码,也请提供帮助。谢谢。

最佳答案

这里有一些选择,以及一些代码设计决策。

首先,任何重复的代码都应该放入单独的方法中,而不是放在 if/else 中。从表面上看,你的前 8 行左右是重复的。所以制定一个新方法:

func setUpWall() -> SKSpriteNode {
var tallWall = SKSpriteNode(imageNamed: "shortwall")
//all other lines that are duplicate;
}

这样您就可以在 if/else 条件中调用此方法:

var rand = arc4random_uniform(2) + 1

var wall = setUpWall()

if rand == 1 {
//any unique stuff
} else {
//other unique stuff
}

其次,为了能够访问您的墙或方法之外的任何变量,您可以将它们声明为类顶部的实例变量

 var wall = SKSpriteNode() //its declared as var, so you can update it inside the method call and still access it outside the method

这是一种方法,另一种方法是使用某种映射或字典来保存局部变量。字典有一个键值对,因此您可以分配特定的键作为变量的名称,并将正确的对象分配给它作为值

您可以在此处阅读有关它们的信息,但我将在下面提供一个示例: https://developer.apple.com/library/mac/documentation//General/Reference/SwiftStandardLibraryReference/Dictionary.html

//declare your dictionary as an instance variable (a class variable, not inside a method)
//pseudocode, you gotta make sure the syntax is correct and it compiles

var myDict = Dictionary<String: SKSpriteNode>()

在您的方法中,当您创建想要在方法之外访问的任何 Sprite 时,将它们添加到字典中并给它们一个您知道的名称:

var bigWall = SKSpriteNode(imageNamed: "shortwall")
myDict["myWall1"] = bigWall

//then to get it later you can say:
let myWallFromOtherMethod = myDict["myWall1"]


//but I would check if the key exists first
// you don't want to get a nil error
// so use this syntax

if let myWallFromOtherMethod = myDict["myWall1"] {
// now val is not nil and the Optional has been unwrapped, so use it
}

就像我之前说过的,您需要确保这一切都符合我添加的语法,因为我还没有在 Xcode 中亲自测试过它。另外,由于我不知道您的整个项目是如何设计的,因此一种方法可能比另一种更适合您。

关于ios - 当我的所有节点都在本地声明时,不知道如何更新分数标签节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396966/

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