在我的 Sprite-Kit 游戏中实现这个动作的正确方法是啥?
Posted
技术标签:
【中文标题】在我的 Sprite-Kit 游戏中实现这个动作的正确方法是啥?【英文标题】:What is the correct way to implement THIS action into my Sprite-Kit Game?在我的 Sprite-Kit 游戏中实现这个动作的正确方法是什么? 【发布时间】:2016-06-24 04:09:18 【问题描述】:我有一个birdNode(spriteNode) 在肖像场景中水平移动。
birdNode 正在向屏幕底部的 cgPoint 投下一个蛋(spriteNode)。
我希望birdNode在任何时间/位置随机掉落他的蛋。
我考虑过创建一个 NSTimeInterval,其随机数介于 2 秒(birdNode 穿过屏幕所需的时间)之间,使 eggNode 在birdNode 位置生成,并调用 dropEgg 函数。
我也考虑过生成一个随机的CGPoint,将eggNode加载到
birdNode.position.x = randomPoint
然后调用 dropEgg 函数。
我的问题是我应该使用某种方法而不是另一种方法吗?我应该在哪里调用 dropNode 函数。现在我无法让它工作。
我尝试在下面的 currentTime 更新函数中考虑 randomTime/randomPosition 并删除节点,但它在每一帧渲染时都会生成鸡蛋,所以我认为这不是正确的方法。
override func update(currentTime: CFTimeInterval)
这是我的代码,用于放下鸡蛋,并创建一个随机的 dropPoint 浮点数和飞过屏幕的小鸟。
func dropEgg()
//aim
let dx = eggNodeTarget.position.x - birdNode.position.x
let dy = eggNodeTarget.position.y - birdNode.position.y
let angle = atan2(dy, dx)
dragonProjectileNode.zRotation = angle
//Seek
var vx = turretNode.position.x
var vy = turretNode.position.y
//creates eggNodeSprite
loadEggNode()
//shoot
let shootAction = SKAction.moveTo(CGPointMake(vx, vy),duration: 0.75)
eggNode.runAction(shootAction)
func loadRandDropLocationX() -> CGFloat
//or minNodeTimeValue?
var MinNodeSpawnValue = self.frame.size.width * 0.2
//or maxNodeTimeValue?
var MaxNodeSpawnValue = self.frame.size.width * 0.8
//or randomTime?
var randomPointUInt32 = UInt32(MaxSpawnValue - MinSpawnValue)
return (CGFloat(arc4random_uniform(randomPointUInt32)) + MinNodeSpawnValue)
func dragonMoveRight()
let moveDragon = SKAction.moveTo(loadRandDestinationRight(), duration: 2.3)
dragonNode.runAction(moveDragon)
【问题讨论】:
【参考方案1】:使用NSTimer 每2 秒调用一次dropEgg()
。
喜欢:
NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(dropEgg), userInfo: nil, repeats: true)
【讨论】:
以上是关于在我的 Sprite-Kit 游戏中实现这个动作的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的 Sprite Kit 游戏应用中实现 Facebook 和 Twitter 发布?