- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我最近将一款游戏上传到应用商店,并且有用户报告在旧设备上出现延迟。首先是游戏:它被称为“CURVE”(我不确定我是否可以在这里发布它的名称,但它会帮助您理解问题)。游戏的想法是一个球在屏幕上移动并穿过墙壁之间的间隙。还有一些较小的球从主球上落下,从而形成某种路径。现在,滞后。它们发生在两个主要时刻。首先,当路径创建时,其次,当玩家穿过间隙时。当玩家穿过间隙时,他会与一个不可见的节点发生碰撞。记录碰撞,更新分数。然后该节点被删除,玩家继续。我相信当 swift 创建 SpriteNode 或删除 SpriteNode 时会出现延迟。关于如何处理这个问题有什么想法吗?
这是我在生成障碍时使用的代码 - 我认为这就是问题所在
func createRocks() {
rockHeight = (frame.height * (heightOfRocks))
if gameState != .Dead {
switch spawnCount {
case 10:
levelUp()
case 20:
levelUp()
case 30:
levelUp()
case 40:
levelUp()
case 50:
levelUp()
case 60:
levelUp()
case 70:
levelUp()
case 80:
levelUp()
case 90:
levelUp()
case 100:
levelUp()
case 110:
levelUp()
case 120:
levelUp()
case 130:
levelUp()
case 140:
levelUp()
case 150:
levelUp()
default:
break
}
}
++spawnCount
let leftRock = SKShapeNode(rectOfSize: CGSize(width: (frame.width), height: (rockHeight)), cornerRadius: (cornerRad))
leftRock.fillColor = themeColor
leftRock.strokeColor = themeBorderColor
leftRock.lineWidth = themeBorderWidth
leftRock.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: ((frame.width) + (themeBorderWidth)), height: ((rockHeight) + (themeBorderWidth))))
leftRock.physicsBody?.dynamic = false
let rightRock = SKShapeNode(rectOfSize: CGSize(width: (frame.width), height: (rockHeight)), cornerRadius: (cornerRad))
rightRock.fillColor = themeColor
rightRock.strokeColor = themeBorderColor
rightRock.lineWidth = (themeBorderWidth)
rightRock.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: ((frame.width) + (themeBorderWidth)), height: ((rockHeight) + (themeBorderWidth))))
rightRock.physicsBody?.dynamic = false
leftRock.zPosition = CGFloat(10 + (21 * levelNumber))
rightRock.zPosition = CGFloat(10 + (21 * levelNumber))
// 2
let rockCollision = SKSpriteNode(color: UIColor.clearColor(), size: CGSize(width: (frame.width * 2), height: 32))
rockCollision.physicsBody = SKPhysicsBody(rectangleOfSize: rockCollision.size)
rockCollision.physicsBody?.dynamic = false
rockCollision.name = "scoreDetect"
addChild(leftRock)
addChild(rightRock)
addChild(rockCollision)
// 3
let rockWidth = frame.width
let yPosition = frame.height + leftRock.frame.height
let rockDistance = frame.width * (gapWidth)
let min = Int(((frame.width) * (wallWidth)) - (rockWidth / 2))
let max = Int(((frame.width) * (1.00 - ((wallWidth)))) - rockDistance - (rockWidth / 2))
let rand = min + Int(arc4random_uniform(UInt32(max - min)))
//GKRandomDistribution(lowestValue: min, highestValue: max)
let xPosition = CGFloat(rand)
// 4
leftRock.position = CGPoint(x: xPosition, y: yPosition)
rightRock.position = CGPoint(x: xPosition + rockWidth + rockDistance, y: yPosition)
rockCollision.position = CGPoint(x: xPosition, y: CGRectGetMidY(frame))
rockCollision.position = CGPoint(x: CGRectGetMidX(frame), y: yPosition + (rockCollision.size.height * 2))
let endPosition = frame.height + (leftRock.frame.height * 2)
let moveAction = SKAction.moveByX(0, y: -endPosition, duration: timeOfRockMovement)
let moveSequence = SKAction.sequence([moveAction, SKAction.removeFromParent()])
leftRock.runAction(moveSequence)
rightRock.runAction(moveSequence)
rockCollision.runAction(moveSequence)
}
func initRocks() {
let create = SKAction.runBlock { [unowned self] in
self.createRocks()
}
let wait = SKAction.waitForDuration(rockSpawnWait)
let sequence = SKAction.sequence([create, wait])
let repeatForever = SKAction.repeatActionForever(sequence)
runAction(repeatForever)
}
最佳答案
您的方法听起来与 a SpriteKit tutorial I wrote 非常相似,但我在那里完全没有滞后。 SpriteKit 非常快,但您的具体条件可能会导致问题。检查事项:
1) 您使用纹理图集吗?这些图像比 bundle 中的单独图像加载速度更快。
2) 如果您经常重复使用图像,您可以将它们存储在 SKTexture
中,然后从那里加载节点吗?
3) 是否还有其他事情发生,例如播放声音? iOS 模拟器在播放游戏中的第一个声音时经常会出现短暂的延迟。
4)创建的路径是否很复杂?
关于ios - 创建 spritenodes 时 Swift 游戏滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256484/
我有一个(移动的) Sprite 节点。 我想检测此节点一定范围内的其他(移动) Sprite 节点。一旦检测到一个,它应该执行一个 Action 。 扮演 Action 部分对我来说没问题,但我似乎
我正在制作一款有云彩移动的游戏,我希望当角色降落在云彩上时云彩会消失。然而,当我输入代码时,如果角色绕过它并在仍在下落时撞到云的底部或侧面,它就会消失。这是我用于检测角色和云何时击中的代码。 是否有办
我想实现一个带有“彩色突出显示”的 Sprite 节点。 “突出显示可以有多种颜色。这是在沙盒应用程序中完成的,以进行尝试。 我考虑过使用SKTextures来表示节点的“高光”。然而,使用这种方法,
当将 spriteNode 缩放到较小尺寸(或较大尺寸)时,spriteNode 默认从中心缩放,这通常没问题。然而,我需要我的 Sprite 从它 body 的最左边开始缩放。有什么方法可以改变 s
我正在学习如何编码,作为第一个项目,我认为创建一个针对计算机的小石头剪刀布游戏是个好主意。问题是,显然计算机可能不会显示他的选择,所以我必须创建一个函数,使随机图片 x (我使用苹果的笑脸)出现在屏幕
我想在没有 uiscrollview 的情况下滚动 Sprite 套件中的节点 //触摸移动 let touch: UITouch = touches.first as! UITouch; let l
我正在尝试使用以下方法创建我的用户 SpriteNode。纹理是 Kladde,图像也不为空。 func spawnPlayer() { if didFirstTap == true && i
所以基本上我有 coin 对象,我想在屏幕上启动它。我有以下代码在滑动时运行一些计算,但不确定什么与我当前的情况相关: override func touchesBegan(touches: Set,
我正在制作一个游戏,在该游戏中,在某些时候会出现一个新按钮和一个标签。问题是在某些情况下它们都不会出现。 override func touchesBegan(touches: Set, withE
我有两个类别 enum ColliderType:UInt32 { case bulletCategory = 1 case bossCategory = 2 } 我让我的类(class)使用 SKP
我一直在尝试让 Sprite 具有不止一种纹理,这样它看起来就像在移动一样。我正在查看其他问题,但他们所做的一切都没有解决我的问题,这是我的代码: var textures = [SKText
如何通过触摸在固定点上旋转 SpriteKit 节点。所以当用户拖动他的手指时它会转动。我也希望能够获得 rpm。 (之前有人问过这个问题,但我想知道如何使用 SpriteKit 来做) swift
我有这段代码可以对子弹节点施加力并使其向敌人移动。在这种情况下,火箭始终朝上。我的问题是如何旋转这颗子弹以面向节点头部的方向。 let asd=SKSpriteNode(imageNamed: "
我有一个函数,可以创建 8 发来自玩家的子弹,呈圆形向外发射。我认为问题在于此处的这一行: let endPoint = CGPoint(x: distance * cos(angle), y: d
所以我正在使用带有图像的 spritenode 并且我没有设置它的位置。有趣的是,我在设置它的位置时遇到了问题,所以我没有,它默认设置为页面中心(出于明显的原因),这最终是完美的。所以现在在我的 to
我正在尝试创建一个小游戏,其中 SpriteNode(又名玩家)以恒定速度垂直向上移动。我想用它的角度向左或向右转向。但是,我无法使用其角度正确移动播放器。 感谢您的宝贵时间。 这是我写的部分代码:
所以我有 3 个不同的障碍物,它们随机产生并在 3 秒后被移除,但是如果例如 Obstacle1 已经产生并且随机数告诉程序产生另一个 Obstacle1,我得到一个错误 "Terminating a
我试图将 Sprite 的初始角度设置为 90 度。我不想调用 Action ,有没有办法像设置位置一样设置 Sprite 的角度参数? 最佳答案 z旋转 您可以使用接受辐射的 SKNode 的 zR
我在使用 Swift 3 和 Spritekit 开发我的应用程序时遇到了一个问题。为了检测碰撞,我制作了四个独立的三角形组成一个正方形。当我将这些三角形作为一个单元旋转时,它们会重叠并且在旋转过程中
我的新游戏 Sprite 有问题... 我的“汽车”在第一圈完美地沿着赛道行驶,但从那时起,它似乎在每圈结束时都会发生偏移。有人能告诉我我做错了什么吗? - (void)createSceneCont
我是一名优秀的程序员,十分优秀!