大佬教程收集整理的这篇文章主要介绍了斯威夫特 – 精灵怎么开始闪烁?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
import SpriteKit class GameScene: SKScene { let BACkgroundNode = SKSpriteNode(imagenamed: "redBACkground") override func didMoveToView(view: SKView) { BACkgroundNode.position = CGPoint(x: CGRectGetMidX(self.framE),y: CGRectGetMidY(self.framE)) self.addChild(BACkgroundNodE) //=======Ball 1=======// let ball = Ball() ball.position = CGPoint(x:self.frame.midX,y:440) addChild(ball) ball.physicsBody = SKPhysicsBody(circLeofRadius: 90) ball.physicsBody?.dynamic = true ball.physicsBody?.allowsRotation = false ball.physicsBody?.friction = 0 ball.physicsBody?.angularDamping = 0 ball.physicsBody?.linearDamping = 0 ball.physicsBody?.usesPreciseCollisionDetection = true ball.physicsBody!.categoryBitMask = 0 } class Ball: SKSpriteNode { init() { let texture = SKTexture(imagenamed: "Ball") super.init(texture: texture,color: .clearColor(),size: texture.size()) userInteractionEnabled = true } override func touchesBegan(touches: Set<UITouch>,withEvent event: UIEvent?) { let scene = self.scene as! GameScene scene.score += 1 physicsBody?.veLocity = CGVectorMake(0,100) physicsBody?.applyImpulse(CGVectorMake(0,900)) } override func update(currentTime: CFTimeInterval) { if (score >= 10){ self.BACkgroundNode.texture = SKTexture(imagenamed: "orangeBACkground") } if (score >= 20){ self.BACkgroundNode.texture = SKTexture(imagenamed: "yellowBACkground") } if (score >= 30) { self.BACkgroundNode.texture = SKTexture(imagenamed: "greenBACkground") } }@H_262_5@看到这个,看看我的意思.(点击或点击链接) @H_262_5@This shows the sprites flashing at 10 points @H_262_5@先谢谢,乔丹
override func update(currentTime: CFTimeInterval) { if (score >= 10){ self.BACkgroundNode.texture = SKTexture(imagenamed: "orangeBACkground") } if (score >= 20){ self.BACkgroundNode.texture = SKTexture(imagenamed: "yellowBACkground") } if (score >= 30) { self.BACkgroundNode.texture = SKTexture(imagenamed: "greenBACkground") } }@H_262_5@在更新方法中,当分数变为> = 10时,您正在更新纹理EVERY FRAME. @H_262_5@这是绝对错误的. @H_262_5@如果您想更新纹理,只需在需要更改纹理时(例如,当分数从9到10,或从19到20或从29到30)时. @H_262_5@但是当纹理从10变为11时保持10时没有任何意义,因为你将用另一个相同的纹理更新纹理. @H_262_5@你怎么能这样做? @H_262_5@只需创建一个shouldupdateTexture:Bool = false属性,然后每次更新分数,如果分数从9到10或19到20或29到30,则将shouldupdateTexture转为true. @H_262_5@最后在update方法中检查shouldupdateTexture是否为true,在这种情况下将其设置为false并更新纹理. @H_262_5@完整代码 @H_262_5@
class GameScene: SKScene { private var score = 0 { didSet { shouldupdateTexture = oldValue < 10 && score >= 10 || oldValue < 20 && score >= 20 || oldValue < 30 && score >= 30 } } private var shouldupdateTexture = false private var BACkgroundNode = SKSpriteNode(imagenamed: "defaultBACkground") override func update(currentTime: CFTimeInterval) { if shouldupdateTexture { shouldupdateTexture = false switch score { case 10...19: BACkgroundNode.texture = SKTexture(imagenamed: "orangeBACkground") case 20...29: BACkgroundNode.texture = SKTexture(imagenamed: "yellowBACkground") case 30...Int.max: BACkgroundNode.texture = SKTexture(imagenamed: "yellowBACkground") default: break } } } }@H_262_5@而已. @H_262_5@更新 @H_262_5@正如@ Knight0fDragon所指出的那样,将我放入更新方法的代码移动到didSet中可能会更快. @H_262_5@
以上是大佬教程为你收集整理的斯威夫特 – 精灵怎么开始闪烁?全部内容,希望文章能够帮你解决斯威夫特 – 精灵怎么开始闪烁?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。