• cocos2d-x之计时器(自动计时器和自定义计时器)


    cocos2d-x之计时器(自动计时器和自定义计时器)

    HelloWorldScene.h

     1 #ifndef __HELLOWORLD_SCENE_H__
     2 #define __HELLOWORLD_SCENE_H__
     3 
     4 #include "cocos2d.h"
     5 
     6 class HelloWorld : public cocos2d::Layer
     7 {
     8     
     9 private:
    10     cocos2d::LabelTTF *label;//定义一个label,用于显示移动的图片
    11     
    12     
    13 public:
    14     // there's no 'id' in cpp, so we recommend returning the class instance pointer
    15     static cocos2d::Scene* createScene();
    16 
    17     // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
    18     virtual bool init();
    19 
    20     // implement the "static create()" method manually
    21     CREATE_FUNC(HelloWorld);
    22     
    23     //重写update方法(时间的间隔,即两个帧之间的时间间隔),他会在每一帧执行的时候执行一次
    24     virtual void update(float dt);
    25     
    26     //自定义方法,用于改变时间间隔
    27     virtual void timerHandler(float dt);
    28 };
    29 
    30 #endif // __HELLOWORLD_SCENE_H__

    HelloWorldScene.cpp

     1 #include "HelloWorldScene.h"
     2 #include "cocostudio/CocoStudio.h"
     3 #include "ui/CocosGUI.h"
     4 
     5 USING_NS_CC;
     6 
     7 using namespace cocostudio::timeline;
     8 
     9 Scene* HelloWorld::createScene()
    10 {
    11     // 'scene' is an autorelease object
    12     auto scene = Scene::create();
    13     
    14     // 'layer' is an autorelease object
    15     auto layer = HelloWorld::create();
    16 
    17     // add layer as a child to scene
    18     scene->addChild(layer);
    19 
    20     // return the scene
    21     return scene;
    22 }
    23 
    24 // on "init" you need to initialize your instance
    25 bool HelloWorld::init()
    26 {
    27     //////////////////////////////
    28     // 1. super init first
    29     if ( !Layer::init() )
    30     {
    31         return false;
    32     }
    33     
    34     label = LabelTTF::create("bobo", "Courier", 30);
    35     addChild(label);
    36     
    37     
    38     //可以设置时间间隔,通过schedule_selector()方法,自动将方法转换成指针类型
    39     schedule(schedule_selector(HelloWorld::timerHandler), 1);
    40     
    41     //无法调整时间间隔
    42 //    scheduleUpdate();// 启动update,让其执行移动
    43     
    44     
    45     return true;
    46 }
    47 
    48 //实现自定义的可以改变时间间隔的方法
    49 void HelloWorld::timerHandler(float dt){
    50     
    51     log(">>>>>>>>>>>>>");
    52     //设置移动label对象,每一帧向右上角移动(1, 1)
    53     label->setPosition(label->getPosition() + Point(10, 10));
    54     
    55     //停止移动的方法
    56     if (label->getPositionX() > 500) {
    57         unscheduleUpdate();//停止移动
    58     }
    59 
    60     
    61 }
    62 
    63 
    64 //实现update方法,不断的去移动label
    65 void HelloWorld::update(float dt){
    66     
    67     //设置移动label对象,每一帧向右上角移动(1, 1)
    68     label->setPosition(label->getPosition() + Point(1, 1));
    69     
    70     //停止移动的方法
    71     if (label->getPositionX() > 500) {
    72         unscheduleUpdate();//停止移动
    73     }
    74     
    75 }
  • 相关阅读:
    react Native 运行报错之一 gradle-2.14.1-all解压失败的问题
    react native windows create bundle folder
    gulp+browserSync+nodemon 实现express 全端自动刷新的实践
    nodejs框架express4.x 学习--安装篇
    转: angularjs 指令中动态编译的方法(适用于有异步请求的情况) 内嵌指令无效
    angular 基础练习
    自己写的数组排重+排序
    前端开发bower包管理器
    定位网站性能的一些经验
    记一次大规模数据迁移和加密
  • 原文地址:https://www.cnblogs.com/dudu580231/p/4382531.html
Copyright © 2020-2023  润新知