当前位置: 首页 > 知识库问答 >
问题:

雪碧套件创建倒计时问题

逑彬炳
2023-03-14

timeLabel应该从60倒数到0,但我还没有实现一个持续时间。例如timeLabel.text=String(i)//每1秒实现一次这样它就像一个真正的倒数计时器。我该怎么做。另一个问题是运行此代码时游戏不会在模拟器中启动。我得到一个错误,我被重定向到AppDelegate.swift文件class AppServer ate: UIACK der, UIApplication ationServer ate{//error:线程1:信号SIGABRT

class GameScene: SKScene {

var timeLabel = SKLabelNode()

override func didMoveToView(view: SKView) {   

    for var i = 60; i > 0; i-- {

        timeLabel.text = String(i)
        timeLabel.position = CGPointMake(frame.midX, frame.midY)
        timeLabel.fontColor = UIColor.blackColor()
        timeLabel.fontSize = 70
        timeLabel.fontName = "Helvetica"
        self.addChild(timeLabel)

    }

  }

}

共有1个答案

颛孙炜
2023-03-14

有几种方法可以做到这一点,下面是一个关于如何使用SKAction更新标签文本(计数器)的示例:

  import SpriteKit

  class GameScene: SKScene {

    let timeLabel = SKLabelNode(fontNamed: "Geneva")
    var counter = 60

    override func didMoveToView(view: SKView) {

        timeLabel.text = "60"
        timeLabel.position = CGPointMake(frame.midX, frame.midY)
        timeLabel.fontColor = UIColor.blackColor()
        timeLabel.fontSize = 40

        self.addChild(timeLabel)
    }


    func countdown(){

        let updateCounter = SKAction.runBlock({

            self.timeLabel.text = "\(self.counter--)"

            if(self.counter == 0){
                self.counter = 60
            }

        })



        timeLabel.text = "60"
        timeLabel.position = CGPointMake(frame.midX, frame.midY)
        timeLabel.fontColor = UIColor.blackColor()
        timeLabel.fontSize = 40


        let countdown = SKAction.repeatActionForever(SKAction.sequence([SKAction.waitForDuration(1),updateCounter]))


        //You can run an action with key. Later, if you want to stop the timer, are affect in any way on this action, you can access it by this key
        timeLabel.runAction(countdown, withKey:"countdown")

    }

    func stop(){

        if(timeLabel.actionForKey("countdown") != nil){


            timeLabel.removeActionForKey("countdown")

        }

    }


    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {


        if(timeLabel.actionForKey("countdown") == nil){
            self.countdown()
        }

    }

  }

我在这里做的是每秒更新标签的文本属性。为了实现这一点,我创建了一个更新计数器变量的代码块。该代码块使用动作序列每秒调用一次。

请注意,当前代码试图在每个循环中添加标签。节点只能有一个父节点,应用程序将崩溃,并显示以下错误消息:

尝试添加已经有父节点的SKNode

此外,您也没有每秒更新一次标签的文本属性。您正在一次执行整个for循环(这比一秒钟要短得多)。

 类似资料:
  • 我的应用程序检查是否有一个带有日期的文件。 如果有日期,它将计算今天和该(未来)日期之间的差值,并初始化计时器,以X天Y小时Z分S秒的方式倒计时到该日期。 如果没有文件,则用户可以通过按钮选择日期。程序将在文件中存储日期并设置倒计时。 有一个删除按钮可以删除日期并选择其他日期。此删除按钮应取消计时器,使其停止计数。 当我取消计时器时,计时器不会停止。我的计时器滴答作响,但相差2秒,而不是1秒。显示

  • 问题内容: 我创建了一个计时器,该计时器在按下按钮时启动,上面是运行的代码。谁能帮我创建一个计数为30的计时器?现在,当我运行它时,在标签中设置文本“ 30”,但我希望它从0开始并一直计数到30。 问题答案: 每次您的计时器运行时,它都会执行从0到30的循环,因此仅在循环结束时才刷新UI。您需要将i保留为成员,并在每次这样调用该方法时对其进行更新: 当然,一旦达到i = 30,您就应该取消时间,否

  • 我有一个mixin,它以这种格式返回剩余时间。 在组件中,我打电话给混音器来得到时间 在我的模板中,我称它为,它返回类似的值,但我想将这个值显示为倒计时。所以当它加载到页面上时,开始倒计时1秒。 我试图使用一个观察者,但它不起作用:

  • 我肯定我错过了一些非常明显的东西,但我是初学者,所以请不要压碎我。我的问题是我有一个视口比屏幕小的舞台。现在我也想直接用Sprite.draw(SpriteBatch)在屏幕上画一个雪碧。雪碧和舞台的位置不重叠。舞台画得很好,但是雪碧看不见。当我注释掉渲染方法中的stage.draw()部分时,雪碧是可见的。 代码:这是我的渲染方法: 在这里,我初始化相机和舞台(StalleHeight是一个in

  • 本文向大家介绍Webpack中雪碧图插件使用详解,包括了Webpack中雪碧图插件使用详解的使用技巧和注意事项,需要的朋友参考一下 背景 在开发过程中,我们需要用到很多图标,这些图标的大小不是很大,但是每次需要向服务器发送请求,从而加重服务器的负担,尤其是当网站处于高访问量的情况下或网络不稳定的时候,服务器性能会明显下降。这种情况不符合被广泛遵循的雅虎军规“尽量减少HTTP请求数”的要求(雅虎前端

  • 介绍 用于实时展示倒计时数值,支持毫秒精度。 引入 import { createApp } from 'vue'; import { CountDown } from 'vant'; const app = createApp(); app.use(CountDown); 代码演示 基础用法 time 属性表示倒计时总时长,单位为毫秒。 <van-count-down :time="time