Cocos2d-x 核心概念 - 游戏循环与调度
每一个游戏程序都有一个循环在不断运行,他是由导演对象来管理和维护。
如果需要场景中的精灵运动起来,我们可以在循环中使用定时器(Scheduler)对精灵等对象的运行进行调度
因为Node中封装了 Scheduler 类,所以我们可以直接使用Node中定时器相关函数
schedulerUpdateWithPriorityLua ( nHandler , priority) --每个Node对象只要调用该函数,那么这个Node对象就会定时的每帧调用一次nHandler 函数,priority是优先级,越小越先被执行 unschedulerUpdate(): --停止schedulerUpdateWithPriorityLua 的调度
function MainScene:createLayer()
local layer = cc.Layer:create()
--设置背景
local bg = cc.Sprite:create("HelloWorld.png")
bg:setPosition(cc.p(size.width/2,size.height/2))
bg:setAnchorPoint(0.5,0.5)
layer:addChild(bg)
--创建一个label
local textType = cc.Label:createWithSystemFont("Hello World","Arial",20)
textType:setPosition(cc.p(size.width/2,size.height*3/4))
textType:setAnchorPoint(0.5,0.5)
textType:setTextColor(cc.c4b(0,0,255,255))
layer:addChild(textType)
--定义update(delta)调度函数
local function update(delta)
local x,y = textType:getPosition()
textType:setPosition(cc.p(x+2,y-2))
end
--开始游戏调度
layer:scheduleUpdateWithPriorityLua(update,0) --开启游戏调度,按照频率进行调度,0是默认值
local function onNodeEvent(tag) --层处理事件回调函数
if tag == "exit" then --判断是否推出层处理事件
layer:unscheduleUpdate() --代码停止调度
end
end
layer:registerScriptHandler(onNodeEvent) --注册层事件监听器
return layer
end
下面的代码将实现文本滚动效果
local size = cc.Director:getInstance():getWinSize()
local MainScene = class("MainScene",function()
return cc.Scene:create()
end)
function MainScene.create()
local scene = MainScene.new()
scene:addChild(MainScene:createLayer())
return scene
end
function MainScene:createLayer()
local layer = cc.Layer:create()
--设置背景
local bg = cc.Sprite:create("HelloWorld.png")
bg:setPosition(cc.p(size.width/2,size.height/2))
bg:setAnchorPoint(0.5,0.5)
layer:addChild(bg)
--创建一个label
local textType = cc.Label:createWithSystemFont("Hello World","Arial",20)
textType:setPosition(cc.p(size.width/2,size.height*3/4))
textType:setAnchorPoint(0,0.5)
textType:setTextColor(cc.c4b(0,0,255,255))
layer:addChild(textType)
--[[
一、定义调度函数update ----循环体
二、开始游戏调度 ----循环头
三、层处理事件回调函数 ----判断
四、注册层事件监听器 ----注册
]]
local function update(delta)
local x,y = textType:getPosition()
if x <size.width and x>= 0 then
textType:setPosition(cc.p(x+2,y))
else
if x >= size.width then
textType:setAnchorPoint(0,0.5)
x,y = textType:getPosition()
if x <size.width and x>= 0 then
textType:setPosition(cc.p(x+2,y))
else
textType:setAnchorPoint(1,0.5)
textType:setPosition(cc.p(0,y))
end
end
end
end
layer:scheduleUpdateWithPriorityLua(update,0)
local function onNode(tag)
if tag == "exit" then
layer:unscheduleUpdate()
end
end
layer:registerScriptHandler(onNode)
return layer
end
return MainScene
Cocos2d-x 核心概念 - 游戏循环与调度的更多相关文章
- cocos2d-x游戏循环与调度
每一个游戏程序都有一个循环在不断运行,它是有导演对象来管理很维护.如果需要场景中的精灵运动起来,我们可以在游戏循环中使用定时器(Scheduler)对精灵等对象的运行进行调度.因为Node类封装了Sc ...
- cocos2d-x游戏循环和日程安排
每场比赛有一个程序执行周期继续.这是导演对象来管理非常维修.在运动假设需要的场景精神,我们可以使用计时器在游戏圈(Scheduler)精灵和其他对象进行调度. 由于Node类封装了Scheduler类 ...
- WebGPU 导入[2] - 核心概念与重要机制解读
目录 1. 核心概念 ① 适配器和设备 ② 缓冲.纹理.采样器 ③ 绑定组 ④ 着色器与管线 ⑤ 编码器与队列 2. 重要机制 ① 缓冲映射机制 ② 时间线 1. 核心概念 这部分不会详细展开,以后写 ...
- 刀哥多线程GCD核心概念gcd
GCD GCD 核心概念 将任务添加到队列,并且指定执行任务的函数 任务使用 block 封装 任务的 block 没有参数也没有返回值 执行任务的函数 异步 dispatch_async 不用等待当 ...
- cocos2d-x一些核心概念截杀
Cocos2d-x中有很多概念,这些概念很多来源于动画.动漫和电影等行业,例如:导演.场景和层等概念,当然也有些有传统的游戏的概念.Cocos2d-x中核心概念:导演, 场景,层,节点,精灵,菜单动作 ...
- 【Visual C++】游戏编程学习笔记之三:游戏循环的使用
本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44208419 作者:Zee ...
- JAVAEE——BOS物流项目13:Quartz入门案例、核心概念、cron 表达式的格式(了解)
1.quartz入门案例 本入门案例基于spring和quartz整合完成. 第一步:创建maven工程,导入spring和quartz相关依赖 第二步:创建任务类 第三步:在spring配置文件中配 ...
- 深度揭秘腾讯云新一代企业级HTAP数据库TBase核心概念
腾讯云PostgreSQL-XZ(PGXZ)经过公司内部多年业务的打磨,在2017年改名为TBase后,正式对外推出,目前已在政务.医疗.公安.消防.电信.金融等行业等行业的解决方案中大量应用.TBa ...
- kubernetes核心概念
摘抄自: https://www.cnblogs.com/zhenyuyaodidiao/p/6500720.html 1.基础架构 1.1 Master Master节点上面主要由四个模块组成:A ...
随机推荐
- [Python] 删除指定目录下后缀为 xxx 的过期文件
import os import time import datetime def should_remove(path, pattern, days): if not path.endswith(p ...
- [Android Tips] 20. Android Studio Tips
[译]Android Studio 使用技巧系列(一)-快捷键 [译]Android Studio 使用技巧系列(二)-快捷键 [译]Android Studio 使用技巧系列(三)-调试 [译]An ...
- 同步github上fork出来的分支
1,clone自己的账号里fork库的分支到本地 git clone 地址_branch 2,增加远程原始分支 git remote add upstream 地址_master 3,fetch原始源 ...
- doPost()和doGet()
GET 请求的一些特点: GET 请求会有 cache GET 请求会保留在浏览历史中 GET 请求可以保存到书签 GET 请求不应用于处理敏感数据 GET 请求有长度限制 GET 请求应该只用于获取 ...
- NOI 1.5 41:数字统计
描述 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数. 比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2 ...
- Android -- OkHttp的简单使用和封装
1,昨天把okHttp仔细的看了一下,以前都是调用同事封装好了的网络框架,直接使用很容易,但自己封装却不是那么简单,还好,今天就来自我救赎一把,就和大家写写从最基础的OKHttp的简单get.post ...
- MXNet学习~试用卷积~跑CIFAR-10
第一次用卷积,看的别人的模型跑的CIFAR-10,不过吐槽一下...我觉着我的965m加速之后比我的cpu算起来没快多少..正确率64%的样子,没达到模型里说的75%,不知道问题出在哪里 import ...
- EditPlus 3.7.1186 中文版(10月27日更新)重大性能改进,推荐更新!
3.7.* 版的 EditPlus 存在性能问题:加载行数比较多的文档时,要等很长的时间.加载一个十几兆的文本文件,可能需要等十几秒.在编辑窗口内翻页也会有明显的迟滞感.而此前的 3.6 版本并非如此 ...
- 阿里云mariadb无法启动问题
需要再安装yum install mariadb-server就可以了, 重启服务器,使用命令 sudo systemctl start mariadb.service
- Weblogic的安装与配置
安装准备 下载WebLogic10.2 for x86 linux安装文件: 安装RHEL 5.4: 检查Linux环境,确保安装目录所在的文件系统空闲空间在2G以上.如果空间不足,则应扩展root ...