声明

本教程仅用于初学cocos2dx同学使用,内容由本人(Code-Man)编写,此教程使用cocos2dx版本为3.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。QQ群:Cocos2d-CodeMonkey ,461679592

端午节,周一不上班!!今天要写两篇博文。原因很简单上周才出了一篇。实在惭愧,周六日出去嗨了~~

今天我们要讲的是更新函数,什么是更新函数?Code-Man的介绍是:“死循环”。可是为什么我们游戏需要存在死循环呢?其实每个游戏引擎都必须有这个一个东西,在我们创建出一个HelloWorld的时候,其实就已经存在着一个“死循环”了,只是你没感觉到。

还记得我们之前介绍HelloWorld界面左下角的那几个英文其中一项就是指:每一个帧所处理的顶点数吗?每一帧执行,也就是说。1/60s=0.016666/s,约等于0.0167秒执行一次那个更新函数。

为什么要存在?你试想一下游戏无非就是图片的不断渲染,图片的各种形变各种运动,才使得我们觉得它动起来了。或者说,一个微信版的打飞机,如果没有一个“死循环”那游戏顶部的飞机要如何重复产生?我只有不断循环一个产生飞机的函数即可生成出各种飞机。

更新函数的种类:

1:scheduleUpdate(); 默认执行目标为update(float dt),默认无限循环,默认每一帧执行一次,默认无等待时间。

2.[1]:schedule("更新目标"); 自定义更新目标,其他为默认。

2.[2]:schedule("更新目标",“更新时间f”); 自定义更新目标,自定义每一帧的更新函数,其余为默认。

2.[3]:schedule("更新目标","更新时间","更新次数",“更新等待时间”); 一切为自定义。

3:scheduleOnce("更新目标","更新等待时间"); 等待多少秒后,执行一次自定义函数。

暂停函数:有执行就有暂停

1.unscheduleUpdate(); //与scheduleUpdate()是一对,默认停止目标update(float dt);

2.unschedule("更新目标") //与上面的2的三种类型对应。参数为要停止目标更新函数。

示例:

素材:

我选了三个最有代表性的来做,其余两个Monkey们可以自己尝试。

我们让黄色球每一帧X轴+7,绿色球等待2秒后每一秒中X轴+100,蓝色球等待两秒后透明度设置为150。

效果图:

总结:调度器是我们游戏开发过程中经常会使用的东西,所有一定要熟练掌握。提醒,在能不用调度器的情况下就不要用,如果不是必要永远存在,用完一定要关闭。调度器既然是一个"死循环"那必定会存在比较大的性能消耗。所有一定要谨慎的使用这东西。

//
//  LessonSevenScene.cpp
//  MyCppGame
//
//  Created by He_bi on 15/6/17.
//
//#include "LessonSevenScene.h"//这个函数在此次不累赘、越往后面,对于前面的知识不会做无谓的讲解。
//忘记的可以复习前面的只是
Scene* LessonSevenScene::createScene(){auto Myscene=Scene::create();auto MyLayer=LessonSevenScene::create();Myscene->addChild(MyLayer);return Myscene;
}bool LessonSevenScene::init(){if (!Layer::init()) {return false;}WinSize=Director::getInstance()->getVisibleSize();//背景auto bg=Sprite::create("LessonOne_Bg.png");bg->setPosition(WinSize/2);this->addChild(bg);//黄色球yellowBall=Sprite::create("ball_1001.png");yellowBall->setPosition(yellowBall->getContentSize().width/2,WinSize.height/3/2);this->addChild(yellowBall);//绿色球greenBall=Sprite::create("ball_1002.png");greenBall->setPosition(greenBall->getContentSize().width/2,WinSize.height/3/2*3);this->addChild(greenBall);//蓝色球blueBall=Sprite::create("ball_1003.png");blueBall->setPosition(blueBall->getContentSize().width/2,WinSize.height/3/2*5);this->addChild(blueBall);//第一种更新函数(也叫调度器),每一帧执行一次this->scheduleUpdate();//第二种更新函数(也叫调度器),每1秒执行一次,无限循环,等待2秒后执行this->schedule(schedule_selector(LessonSevenScene::myUpData1), 1, -1, 2);//第三种更新函数(也叫调度器),三秒后执行一次this->scheduleOnce(schedule_selector(LessonSevenScene::myUpData2), 3);//停止按钮auto stopUpdateButton=MenuItemFont::create("停止默认更新",[&](Ref*){//停止默认的更新函数this->unscheduleUpdate();});stopUpdateButton->setPosition(WinSize.width/2-100, stopUpdateButton->getContentSize().height/2);//停止按钮auto stopUpData1Button=MenuItemFont::create("停止自定义更新", [&](Ref*obj){//停止自定义的更新函数this->unschedule(schedule_selector(LessonSevenScene::myUpData1));});stopUpData1Button->setPosition(WinSize.width/2+100, stopUpData1Button->getContentSize().height/2);//按钮菜单auto men=Menu::create(stopUpdateButton, stopUpData1Button ,NULL);men->setPosition(Vec2::ZERO);this->addChild(men);return true;
}void LessonSevenScene::update(float dt){//每帧X轴前进7个像素if (yellowBall->getPositionX()<WinSize.width+yellowBall->getContentSize().width/2) {yellowBall->setPositionX(yellowBall->getPositionX()+7);}else{yellowBall->setPositionX(-yellowBall->getContentSize().width/2);}
}void LessonSevenScene::myUpData1(float d){//等待2秒后,每秒X轴前进100个像素if (greenBall->getPositionX()<WinSize.width+greenBall->getContentSize().width/2) {greenBall->setPositionX(greenBall->getPositionX()+100);}else{greenBall->setPositionX(-greenBall->getContentSize().width/2);}
}void LessonSevenScene::myUpData2(float d){//等待2秒后,设置透明度为150blueBall->setOpacity(150);
}

本节课Demo素材:http://pan.baidu.com/s/1hlsdg

Cocos2d-x的学习之旅(七)更新函数Update相关推荐

  1. HALCON学习之旅(七)

    HALCON学习之旅(七) 文章目录 HALCON学习之旅(七) 1.MFC与Halcon混合编程 2.C#与Halcon混合编程 3.Halcon测量助手使用 4.Halcon实例进阶一(拟合区域椭 ...

  2. SpringBoot学习之旅(七)---JPA进阶篇之自定义查询、修改、分页

    文章目录 前言 源码下载 其他文章 查询关键字 自定义Select和Update 分页及自定义分页 自定义分页 分页查询的业务代码 前言 前一节SpringBoot学习之旅(六)-JPA操作MySql ...

  3. 我的Go语言学习之旅七:创建一个GUI窗体

    在上次中,刚刚学过了  弹窗效果,这里再接着学习一下如何创建一个窗体. 还是老路子,先上代码: package mainimport ( "github.com/lxn/go-winapi& ...

  4. ThreeJs 学习之旅(七)

    Material(材质) 一.MeshNormalMaterial(网状通用材料) 例: const MeshBasicMaterial=new THREE.MeshNormalMaterial() ...

  5. 无星的RN学习之旅(四)——通信、持久化存储、iOS打包

    说说最近项目的一些感想吧. 一.RN的创意 RN其实我觉得是一个很有创意的想法.不知道各位写RN项目的时候,有没有打开Xcode看过app的层级关系,我发现RN的这个想法,真的很有创意. 作为一名原生 ...

  6. 大数据技术 学习之旅_数据-数据科学之旅的起点

    大数据技术 学习之旅 什么是数据科学? (What is Data Science?) The interesting thing about Data Science is that it is a ...

  7. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅-第三个示例之一(二十七)               WCF学习之旅-第三个示例之二(二十八)              WCF学习之旅-第三个示例之三(二十九)   ...

  8. 乐鑫Esp32学习之旅② 巧用eclipes编辑器,官方教程在Windows下搭建esp32开发环境,打印 “Hello World”。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  9. Python学习之旅(核心编程基础篇003运算符)

    Python学习之旅 Python核心编程基础篇2020.12.18 一.算数运算符 二.比较运算符 三.赋值运算符 四.逻辑运算符 五.成员运算符 六.身份运算符 七.三目运算符 八.运算符优先级 ...

  10. AD学习之旅(1)— Altium Designer 20 软件下载与安装

    AD学习之旅(1)- Altium Designer 20 软件下载与安装 一.前言 本次软件安装参考自:Altium Designer 20 AD20软件安装详解教程 凡亿 Altium公司推荐的系 ...

最新文章

  1. php 创建文件编码,php fopen创建utf8编码文件例子
  2. 微软Azure CDN现已普遍可用
  3. IDE使用经验——阿里代码规范 Eclipse格式化代码配置
  4. 开发java程序的步骤_开发 Java 程序的一般步骤是:源程序编辑、 和 。_学小易找答案...
  5. JavaFX鼠标滚动放大缩小图片
  6. python判断线程结束_判断Threading.start新线程是否执行完毕的实例
  7. 用 TStringList 模拟 将字符串转换为变量的功能 - 回复 flq_00000 和 外来天客 的问题...
  8. 什么软件测试电脑分辨率,分辨率测试卡
  9. Log4j配置详解,太详细了。
  10. Java 关于java.util.LinkedHashMap cannot be cast to 实体类问题答案
  11. Mac显示隐藏文件命令
  12. phalapi门店管理系统插件,门店erp系统
  13. gotoxy()的用法.
  14. java 打印 发票_基于Excel和Java自动化:发票生成器
  15. 【020期】面试官问:Java 遍历 Map 集合有几种方式?效率如何?
  16. 记录FPGA面试的准备
  17. McObject新版eXtremeDB v.8.0在E8存储上运行STAC基准测试创造了多个记录
  18. 计算机网络笔记Part2 物理层(Physical Layer)
  19. struct2破绽及升级
  20. 解读Sea Limited新财报:核心业务增速加快,离盈利还有多远?

热门文章

  1. ubuntu18 配置运行SVO pro工程(入门)
  2. Java 字母飘落小游戏
  3. Pixhawk学习笔记(5)——PX4FLOW光流传感器调试过程记录
  4. 读书笔记-精准努力-对待失败的正确思维
  5. PPT制作技巧汇总之动画设置与播放(office 2007)
  6. [原创] 4步骤,让你的皮肤晶莹剔透(2分钟学会)
  7. Redis一打开一闪而过,没有出现主界面的解决办法及原因
  8. 陈艾盐:春燕百集访谈节目第二十六集
  9. 大数据物流项目:Kudu 入门使用(五)
  10. 四阶魔方java1002四阶魔方java_4x4四阶魔方一看就懂,超简单入门图文教程2:复原中心块...