gpt4 book ai didi

Swift - 良好的随机节点生成 SpriteKit

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

我尝试创建一个你需要避开对象(节点)的游戏,我不想在随机位置(屏幕外,右侧)生成这些节点并通过一个 Action ,节点交叉左边的屏幕。但是我怎样才能创建一个好的随机生成,使得没有两个节点在相同的位置或距离太近。

我在 didMoveToView 方法中有一个计时器:

nodeGenerationTimer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("nodeGeneration"), userInfo: nil, repeats: true)

以及每2秒生成一次节点的函数:

func nodeGeneration() {


var randomX = CGFloat(Int(arc4random()) % sizeX)
println(randomX)


let node = SKSpriteNode(imageNamed: "node")
node.anchorPoint = CGPointMake(0.5, 0.5)
node.size.width = self.size.height / 8
node.size.height = bin.size.width * (45/34)
node.position = CGPointMake(self.size.width + randomX, ground1.size.height / 2 + self.size.height / 14)
node.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: node.size.width, height: node.size.height))
node.physicsBody?.dynamic = false
self.addChild(node)

let moveAction = SKAction.moveByX(-1, y: 0, duration: 0.005)
let repeatMoveAction = SKAction.repeatActionForever(moveAction)
node.runAction(repeatMoveAction)


}

我还有第二个问题,想象一个游戏,你需要避开物体,但你可以跳上它,是否可以检测用户是否与节点的侧面发生碰撞,或者他是否跳到节点的顶部.我认为除了在侧面创建物理 body 和在顶部创建物理 body 之外,还有另一种方法!

感谢您的帮助!

最佳答案

对于问题 1:保留一个可以生成敌人的可能位置的列表。当你创建一个敌人时,从列表中删除。当敌人完成其行动并被摧毁/离开屏幕时,然后替换其在列表中的起始位置。每当您掷骰子生成一个随机敌人时,您实际上只是在列表中的可能开始位置之间进行选择。

//Create your array and populate it with potential starting points
var posArray = Array<CGPoint>()
posArray.append((CGPoint(x: 1.0, y: 1.0))
posArray.append((CGPoint(x: 1.0, y: 2.0))
posArray.append((CGPoint(x: 1.0, y: 3.0))

//Generate an enemy by rolling the dice and
//remove its start position from our queue
let randPos = Int(arc4random()) % posArray.count
posArray[randPos]
posArray.removeAtIndex(randPos)

...

//Play game and wait for enemy to die
//Then repopulate the array with that enemy's start position
posArray.append(enemyDude.startPosition)

对于问题 2:您可以访问节点的 x 和 y 坐标,因此您可以使用单个物理体适本地处理碰撞。只需将物体的底部 X 与障碍物的顶部 Y 进行比较,您就会知道自己是在顶部还是在侧面。

关于Swift - 良好的随机节点生成 SpriteKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28884172/

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