gpt4 book ai didi

swift - 随机化节点移动持续时间

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

我正在用 SpriteKit 制作游戏,我有一个节点在屏幕上来回移动并重复使用代码:

    let moveRight = SKAction.moveByX(frame.size.width/2.8, y: 0, duration: 1.5)
let moveLeft = SKAction.moveByX(-frame.size.width/2.8, y: 0, duration: 1.5)
let texRight = SKAction.setTexture(SKTexture(imageNamed: "Drake2"))
let texLeft = SKAction.setTexture(SKTexture(imageNamed: "Drake1"))
let moveBackAndForth = SKAction.repeatActionForever(SKAction.sequence([texRight, moveRight, texLeft, moveLeft,]))
Drake1.runAction(moveBackAndForth)

我想弄清楚我可以使用什么方法来随机化持续时间。每次 moveBackandForth 运行时,我希望它使用不同的持续时间重新运行(在游戏内,而不是在游戏之间)。如果有人可以给我一些示例代码来尝试,我将非常感激。

arc4Random 也可以正常工作,但它不会在游戏内随机化,只会在游戏之间随机化。

最佳答案

当您运行示例中的操作并使用 arc4Random 之类的东西随机化持续时间参数时,这实际上正在发生:

  • 随机持续时间被设置并存储在行动中。
  • 然后在给定持续时间的序列中重复使用 Action 。

因为 Action 按原样重复使用,持续时间参数随时间保持不变并且移动速度不是随机的。

解决这个问题的一种方法(我个人更喜欢)是创建一个“递归操作”,或者更好地说,创建一个方法来运行所需的序列并像这样递归地调用它:

import SpriteKit

class GameScene: SKScene {

let shape = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: 20, height: 20))

override func didMoveToView(view: SKView) {


shape.position = CGPointMake(CGRectGetMidX(self.frame) , CGRectGetMidY(self.frame)+60 )

self.addChild(shape)

move()
}


func randomNumber() ->UInt32{

var time = arc4random_uniform(3) + 1
println(time)
return time
}

func move(){

let recursive = SKAction.sequence([

SKAction.moveByX(frame.size.width/2.8, y: 0, duration: NSTimeInterval(randomNumber())),
SKAction.moveByX(-frame.size.width/2.8, y: 0, duration: NSTimeInterval(randomNumber())),
SKAction.runBlock({self.move()})])

shape.runAction(recursive, withKey: "move")
}

}

要停止操作,请移除其键(“移动”)。

关于swift - 随机化节点移动持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30853360/

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