- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我有一系列 Action 会永远运行以在横向卷轴游戏中产生障碍。但它不是从我的纹理生成随机图片和高度,而是保留第一次运行 SKActions 时生成的相同图片和高度...
有人能解决这个问题吗?我试图不使用
NSTimer.scheduledTimerWithTimeInterval(4, target: self, selector: Selector("setUpMountains"), userInfo: nil, repeats: true)
由于某种原因它降低了我的 FPS
func setUpMountains() {
let gapHeight = user.size.height * 3
var movementAmount = arc4random() % UInt32(self.frame.size.height / 3.0)
var randomNumber = arc4random() % 3
if randomNumber == 0 {
mountainTexture = SKTexture(imageNamed:"RedMountain.png")
} else if randomNumber == 1 {
mountainTexture = SKTexture(imageNamed:"OrangeMountain.png")
} else {
mountainTexture = SKTexture(imageNamed:"BeigeMountain.png")
}
var randomMountain = SKSpriteNode(texture: mountainTexture)
randomMountain.position = CGPointMake( CGRectGetMidX(self.frame) + self.frame.width, CGRectGetMidY(self.frame) - gapHeight - CGFloat(movementAmount))
randomMountain.zPosition = 8
randomMountain.physicsBody = SKPhysicsBody(texture: mountainTexture, size: mountainTexture.size())
randomMountain.physicsBody?.dynamic = false
// randomMountain.physicsBody?.categoryBitMask = objectCategory
movingObjects.addChild(randomMountain)
//spawning mountains
var distanceToMove = self.frame.size.width + mountainTexture.size().width
var moveMountain = SKAction.moveByX(-distanceToMove, y: 0, duration: NSTimeInterval (distanceToMove * 0.01))
var replaceMountain = SKAction.moveByX(distanceToMove, y: 0, duration: 0)
//var removeMountain = SKAction.removeFromParent()
var moveAndRemoveMountain = SKAction.repeatActionForever(SKAction.sequence([moveMountain, replaceMountain]))
randomMountain.runAction(moveAndRemoveMountain)
}
最佳答案
不要每次都加载纹理,而是将纹理缓存在数组中一次,例如以下代码中的山脉
。
使用带有等待时间的SKAction序列
而不是NSTimer来重复执行函数。
您不需要在设置山脉中使用 repeatActionForever
操作,因为一旦生成的障碍物离开屏幕,就会使用 removeParent
将其移除。
var mountains : [SKTexture] = []
override func didMoveToView(view: SKView) {
mountains = [SKTexture(imageNamed:"RedMountain.png"),SKTexture(imageNamed:"OrangeMountain.png"),SKTexture(imageNamed:"BeigeMountain.png")]
let generateMountains = SKAction.runBlock { () -> Void in
self.setUpMountains()
}
let generateObstaclesPeriodically = SKAction.repeatActionForever (SKAction.sequence([generateMountains,SKAction.waitForDuration(4.0)]))
self.runAction(generateObstaclesPeriodically)
}
func setUpMountains() {
let gapHeight = user.size.height * 3
var movementAmount = arc4random() % UInt32(self.frame.size.height / 3.0)
var randomNumber = arc4random() % 3
let mountainTexture = mountains[randomNumber]
var randomMountain = SKSpriteNode(texture: mountainTexture)
randomMountain.position = CGPointMake( CGRectGetMidX(self.frame) + self.frame.width, CGRectGetMidY(self.frame) - gapHeight - CGFloat(movementAmount))
randomMountain.zPosition = 8
randomMountain.physicsBody = SKPhysicsBody(texture: mountainTexture, size: mountainTexture.size())
randomMountain.physicsBody?.dynamic = false
movingObjects.addChild(randomMountain)
//spawning mountains
var distanceToMove = self.frame.size.width + mountainTexture.size().width
var moveMountain = SKAction.moveByX(-distanceToMove, y: 0, duration: NSTimeInterval (distanceToMove * 0.01))
var removeMountain = SKAction.removeFromParent()
var moveAndRemoveMountain = SKAction.sequence([moveMountain, removeMountain])
randomMountain.runAction(moveAndRemoveMountain)
}
要删除 SKAction,您可以在添加时为 SKAction
提供一个 key ,然后使用该 key 将其从节点中删除。
self.runAction(generateObstaclesPeriodically, withKey: "generateObstaclesPeriodically")
self.removeActionForKey("generateObstaclesPeriodically")
关于iphone - SKAction 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28444300/
我很难删除 1 个 SKaction。我知道,如果我用 removeAllActions() 删除两个 SKactions,但我如何才能只删除 1 个,而另一个 Action 仍然存在? 最佳答案 你
我正在制作一款游戏,并且正在制作自定义过渡。 Transition 基本上是每个 Sprite Node 都会找到最近的一侧,无论是左边还是右边。如果它水平居中,那么它会找到最近的边缘,顶部或底部。然
self.runAction(SKAction.sequence([ SKAction.waitForDuration(1), SKAction.runBlock({ self.speed = 0;
我有这个 SKAction 序列: func move(){ let recursive = SKAction.sequence([ SKAction.moveByX(
例如,我有一个向左侧移动 2 秒的方 block ,但在你看到他在两秒后停止之前,有一个 0.2 秒长的淡出动画,将在方 block 移动 1.8 秒后开始运行,我尝试用组或序列以某种方式管理它,但没
我已经设置了一个 SKScene,我用一堆 block 填充它。触摸后,我想将一个随机 block 移动到 SKScene 的 0,0 位置。 0,0 不是最终目标,但我用它来测试。我的节点称为 bi
你能告诉我为什么这段代码不起作用吗?是否可以在 SKAction.runBlock() 函数中运行操作? let testaction = SKAction.repeatActionForever(S
我正在尝试创建 2 个函数。一种沿 y 轴(向上)移动 Sprite (汽车),另一种将其旋转(向左或向右 90 度)。我创建了两个函数(moveCarForward() 和 rotateCar(an
我想在 x 轴上来回移动 Sprite,因此决定结合使用序列和 Action 。基本上我想连续运行多个 SKAction.runBlock 。所以我创建了一个 SKAction.sequence 并在
方法 .removeFromParent() 不会移除 Sprite 。怎么了? override func touchesBegan(touches: Set, withEvent event: U
目标:我要呈现一个新场景: [self.scene.view presentScene:level2 transition:reveal]; 并结束当前的背景音乐以开始新的背景音乐(2级的新背景音乐)
我有一个涉及两个 Action 的 SKAction 序列。 1) 根据变量等待时间 2) spawn 对象 SKAction *sequence = [SKAction sequence:@[
我使用以下代码定期生成 SKNode。有没有办法让这些 SKNodes 的生成周期随机化。具体来说,如何使以下代码中的“delayFish”成为具有随机延迟的 Action ? [self remov
我正在开发一款游戏,如果两个相同的物体之间发生碰撞,就会播放声音。我已经让这部分工作正常,但我只想在 View 中发生碰撞时播放声音。我有一个滚动背景,前方的碰撞会发出噪音。 是否有办法限制此声音仅在
我有以下代码将“敌人”移动到我的“玩家”位置。 let follow = SKAction.moveTo(player.position, duration: 2) enemy.runAction(S
我正在使用 SKAction 序列来延迟在某些情况下节点的生成。当 LaneFire 为 true 时,我不希望发生延迟。但如果不是这样的话,我希望延迟发生。所以我创建了一个名为spawnAction
我正在制作一个 SpriteKit 游戏,我正在尝试让 SKCameraNode 跟随玩家节点。但是,当我在使用 SKAction 移动玩家节点后访问其位置属性时,运行该 Action 后的位置与运行
我有一个使用 for 循环在 SKScene 周围移动矩形的函数。有没有办法让矩形在调用 SKAction 后立即移动?它等待运行 SKAction 直到循环完成,这不是我想要做的。 这是我的代码示例
我试图让我的两个 Sprite 节点从屏幕顶部落到屏幕底部,移回到起始位置,然后再次落下,但是当它们达到大约 3/4 时在屏幕下方的过程中,它们会稍微“传送”到屏幕上,然后从那里继续下落,然后再“传送
嗨,我有一系列 Action 会永远运行以在横向卷轴游戏中产生障碍。但它不是从我的纹理生成随机图片和高度,而是保留第一次运行 SKActions 时生成的相同图片和高度... 有人能解决这个问题吗?我
我是一名优秀的程序员,十分优秀!