Quick_Cocos基础(三)
来源:互联网 发布:实况2016优化 编辑:程序博客网 时间:2024/06/16 20:18
前言
这个系列的前面几篇我不准备系统地讲,我们先写一写小例子,然后再从体系结构上来分析cocos lua
自动滚动地图
我们新建一个场景,把它作为游戏的主场景。
local MainScene = class("MainScene", function() return display.newScene("MainScene")end)function MainScene:ctor() -- 在层上创建场景 self.bgLayer=display.newLayer() self.bgLayer:setAnchorPoint(0.5,0) self.bgLayer:setPosition(display.cx,0) self:addChild(self.bgLayer,0) -- 我们添加两张相同的图片,这样就可以无限滚动了 self.bgSp1=display.newSprite("#background.png") self.bgSp1:setAnchorPoint(0.5,0) self.bgSp1:setPosition(display.cx,0) self:addChild(self.bgSp1,1) self.bgSp2=display.newSprite("#background.png") self.bgSp2:setAnchorPoint(0.5,0) self.bgSp2:setPosition(display.cx,2*display.cy) self:addChild(self.bgSp2,1) -- attention!下面的结构很重要 self:schedule(function() -- 匿名函数体... end,1/global_fps)end
设定样式的代码我们暂且不表,如果你不能理解两张图片可以无限循环的原理,拿出两张纸,自己试试就知道了。
scheduler
接下来我们说一说整个cocos引擎的灵魂部分,scheduler–定时器(也叫调度器什么的)
scheduler是这样一种东西,形象地说,它是一张时刻表,上面记录了什么时刻应该执行什么函数,然后把这张表加入主循环,主循环在对应时刻就会调用函数。scheduler和线程不同,是一种非并行的结构,然而在很多时候,它能够模拟出多线程的效果。但是注意一点,scheduler不能频繁使用,最好的情况下,一个场景,只需要一个scheduler。
语法:Node:schedule(lambda函数体,执行间隔)
比如在上文中的自动滚动地图,我们这样调用它
-- ... self:schedule(function() self:bgAutoMove() end,1/global_fps)function MainScene:bgAutoMove() local disHeight=display.height local poy1=self.bgSp1:getPositionY() -- 图片的纵坐标-4,取余是为了让它大于屏幕高度就移到上面 poy1=(poy1-4)%disHeight -- 图片2的坐标是根据图片1计算出来的,最后的+1是为了避免黑边 local poy2=poy1-disHeight+1 self.bgSp1:setPositionY(poy1) self.bgSp2:setPositionY(poy2)end
此处的global_fps是一个全局常值变量,意思是这个游戏的fps值,一般我们设置为60
上面的代码解释下来就是每帧,图片1向下一移动4像素,超过高度就把它移到上面去
不同速率的scheduler
我刚刚说了我们的一个场景只要一个scheduler,那需要不同频率的时候怎么办呢?
这里有一个问题,我们的分数不需要每帧都刷新一次,我们只要每秒刷新一次怎么办,看下面的代码:
MyScorefunction MainScene:ctor() -- ... -- 我们先创建一个文字控件来储存分数 MyScore=0 self.la=cc.ui.UILabel.new({ text="score: ", size=40 }) self.la:addTo(self,100) self.la:setPosition(cc.p(display.cx,display.height-100)) self.la:setAnchorPoint(0.5,0.5) -- 我们创建一个scheduler来刷新分数 self.count=0 self:schedule(function() -- ... if count==59 then self.la:setString("score: "..MyScore) end self.count=(self.count+1)%60 end,1/global_fps)end
我们利用一个count,让它每60次再执行一次,这样就可以在一个scheduler里面执行不同速率的函数了。
0 0
- Quick_Cocos基础(三)
- 半导体基础(三)
- CodeSmith基础(三)
- CodeSmith基础(三)
- CodeSmith基础(三)
- C++基础(三)
- jquery基础(三)
- JDBC基础(三)
- Java基础(三)
- CodeSmith基础(三)
- DOM 基础(三)
- Hibernate基础(三)
- XSQL基础(三)
- 线程基础(三)
- pcap基础(三)
- UDP基础(三)
- LoadRunner基础(三)
- oracle基础(三)
- Powerful x86/x64 Mini Hook-Engine
- web.py– URL 处理
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
- iOS textField限制输入框长度,包括判断汉字总结
- time()获取系统时间
- Quick_Cocos基础(三)
- 使用7ZIP定期压缩数据库,并备份到异机
- Log和Canny边缘检测(附Matlab程序)
- Mahout学习之Mahout简介、安装、配置、入门程序测试
- Mac OS 下搭建memcached java 增删改查
- edittext再输入过程中显示金额千分位格式
- [NVRAM]如何客制化NVRAM item并且备份(附带修改BT、WIFI 地址sample code)
- 浅谈工业级物联网项目架构设计及实施
- NSString之 doubleValue floatValue intValue integerValue longLongValue