gpt4 book ai didi

arrays - 如何连续重复一系列操作中的一个操作

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

我是 swift 新手,最近才开始学习。

目前,我在生成随机对象时遇到问题。一个在顶部,另一个在底部,我想在两者之间随机选择并继续重复该操作。

到目前为止,我可以让对象从右向左连续滚动,然后离开屏幕。但使用我的代码,它将生成顶部或底部对象,然后永远不会生成另一个对象。它将重复生成它首先选择的那个。

不确定我是否需要将其从 didMove(to view: Skview) 函数移至另一个函数,或者是否有更好的方法来对此进行编码。

下面是我用来尝试让它一一连续重复的代码。

这是覆盖 func didMove(to view: SKView) 中的代码:

let randomArray = [spawnAndDelayForeverUpObject, spawnAndDelayForeverDownProject]
self.run(randomArray.randomElement()!)
let randomObject = randomArray.randomElement()!
self.run(SKAction.repeatForever(randomObject))

我对我的第一个项目感到困惑,所以我尝试了一个新项目,下面是我的代码。`

我仍然不明白如何每隔几秒钟随机选择显示红色或蓝色框而不是两者都显示。我在苹果开发者网站上,从游戏套件编程指南中找到了随机化,我将在 randomization guide apple 上阅读该指南。

GameScene 类:SKScene、SKPhysicsContactDelegate {

let blueBox = SKSpriteNode(color: UIColor.blue, size: CGSize(width: 50, height: 50))
let redBox = SKSpriteNode(color: UIColor.red, size: CGSize(width: 25, height: 25))

override func didMove(to view: SKView) {

self.physicsWorld.gravity = CGVector(dx: 0, dy: -9.0)
physicsBody = SKPhysicsBody.init(edgeLoopFrom: frame)

run(SKAction.repeatForever(SKAction.sequence([SKAction.run(spawnRedBox), SKAction.wait(forDuration: (5)), SKAction.run(removeRedBox)])))
run(SKAction.repeatForever(SKAction.sequence([SKAction.run(spawnBlueBox), SKAction.wait(forDuration: (5)), SKAction.run(removeBlueBox)])))
}

func removeBlueBox() {
blueBox.removeFromParent()
}
func removeRedBox() {
redBox.removeFromParent()
}

func spawnBlueBox() {
print("spawnBlueBoxFuncCalled")

blueBox.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: blueBox.size.width, height: blueBox.size.height))
blueBox.physicsBody?.affectedByGravity = false
blueBox.physicsBody?.isDynamic = true

let posTwo = SKAction.move(to: CGPoint(x: frame.minX + 50, y: frame.midY + 100), duration: 0.0)

let Position = posTwo
let move = SKAction.move(by: CGVector(dx: frame.size.width, dy: 0), duration: 5.0)
let moveRemoveMoveBack = SKAction.sequence([Position, move])
let repeatMoving = SKAction.repeatForever(moveRemoveMoveBack)

blueBox.run(repeatMoving)
self.addChild(blueBox)

}

func spawnRedBox() {
print("spawnRedBoxFuncCalled")

redBox.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: redBox.size.width, height: redBox.size.height))
redBox.physicsBody?.affectedByGravity = false
redBox.physicsBody?.isDynamic = true

let posOne = SKAction.move(to: CGPoint(x: frame.minX + 50, y: frame.midY), duration: 0.0)

let Position = posOne
let move = SKAction.move(by: CGVector(dx: frame.size.width, dy: 0), duration: 5.0)
let moveRemoveMoveBack = SKAction.sequence([Position, move])
let repeatMoving = SKAction.repeatForever(moveRemoveMoveBack)

redBox.run(repeatMoving)
self.addChild(redBox)
//Array example
}

`

最佳答案

问题是您选择一个对象并将其分配给 randomObject,但没有将其重新分配给 run 函数的新值。 SKAction.repeatForever 调用将重复使用 randomObject 及其指定的值。您可以通过重复运行相同的代码来解决此问题。为此,您可以将代码移至函数并使用计时器重复调用该函数。或者您可以使用给定的答案之一 here .

关于arrays - 如何连续重复一系列操作中的一个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59187865/

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