zoukankan      html  css  js  c++  java
  • 关于Cocos2d-x中的scheduleUpdate和update方法的使用

    一.如果要让某类实例对象要连续执行某些语句(比如让每个Block实例从运行框最右边移动到最左边)

    要在Block类中增加一些东西

    1.先在其.cpp文件的init()函数中执行scheduleUpdate()方法。

    2.然后在.h中声明一个虚拟的函数update,并在.cpp文件中定义update,当init中执行scheduleUpdate()时,会不断地调用update函数,里面的语句也不断地被执行,直到执行unscheduleUpdate()时停止调用update()函数,unscheduleUpdate()语句一般放在update函数中,当满足某个条件时就执行。

    二.如果要不断地创建某个类的实例对象(比如不断地创建新的Block在最右边),可以用到嵌套的update方法

    要在GameController类中增加一些东西

    1.先在HelloWorld类的.cpp文件的init()函数中执行scheduleUpdate()方法。

    2.然后在HelloWorld类的.h文件中声明一个虚拟的函数update,并在.cpp文件中定义update,里面的语句也不断地被执行,语句具体是去调用GameController实例中的onUpdate()函数。

    void Game1::update(float dt){
      for (auto it = gcs.begin(); it != gcs.end(); it++) {
        (*it)->onUpdate();
    }

    3.再在GameController类的.h文件中声明一个虚拟的函数onUpdate,并在.cpp文件中定义onUpdate,里面的语句也不断地被执行,语句具体是创建一个Block类的实例对象。

    4.但是不断的调用的时间间隔是每一帧,可以说太快了,如果我们希望调用的时间间隔长一点或者时间间隔是随机的,我们就要在GameController类的.h文件里面再定义两个属性,frameIndex和nextKeyFrameIndex,再声明一个函数resetTimer,这个函数用来重置当前帧和下一次调用onUpdate函数时的帧数,这个是随机的,一般情况下1秒等于60帧,所以下面那个定义意思就是2秒到4秒之间的一个时间会调用onUpdate函数

    void GameController::resetTimer(){
      frameIndex = 0;
      nextKeyFrameIndex = rand()%120+120;
    }
    
    void GameController::onUpdate(){
    
      frameIndex++;
    
      if (frameIndex>=nextKeyFrameIndex) {    //当当前帧数等于或大于随机的目的帧数时,创建Block并重置frameIndex和nextKeyFrameIndex
    
      auto b = game::Block::create();
      _layer->addChild(b);
      b->setPositionY(_positionY+b->getContentSize().height/2);
    
      resetTimer();
      }
    }

    5.游戏结束的时候要把这个一直执行的update停掉,用到unscheduleUpdate(),一般是放在一些事件监听的函数中

    三.如果要指定一定的时间间隔去调用某个方法用

    schedule(schedule_selector(PlaneHero::beginShooting),.5f);

    这里的.5f其实就等于0.5f,而且这个参数是以秒为单位的,也就是说,每格0.5秒去调用这个beginShooting方法,达到我们想要的射子弹的效果。

  • 相关阅读:
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 23: invalid start byte
    cat1标准模组固件开发记录
    cmake 编译出现错误 Could NOT find Threads (missing: Threads_FOUND)
    TMC4361+TMC2130闭环控制带编码器步进电机
    《从优秀到卓越》 吉姆 柯林斯,书读后笔记
    编译MT7621的HTTP通讯信代码
    wireshark分析wifi加密报文
    利用 C# 给 Windows 资源管理器注册右键菜单(Windows Shell)(一):入门
    关于 C# 中 string 类、List 集合的 IndexOf 方法区分大小写的解决方案
    一个简单的利用 WebClient 异步下载的示例(五)(完结篇)
  • 原文地址:https://www.cnblogs.com/HangZhe/p/5701614.html
Copyright © 2011-2022 走看看