Swift   发布时间:2022-04-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了斯威夫特 – 精灵怎么开始闪烁?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我创造了一个游戏,你可以点击球让它们跳起来.你得到每个点击点.当我达到10分时,为什么我的精灵会开始闪烁.我认为它与update(timeInterval)方法有关.它可能是一个错误错误的编码. @H_262_5@ @H_262_5@
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@先谢谢,乔丹

解决方法

因此而闪烁 @H_262_5@ @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,请注明来意。