环境搭建简述——cocos2d-Lua03

来源:互联网 发布:清茶淘宝助手充值卡 编辑:程序博客网 时间:2024/05/18 03:15

  是一个单例,主要工作是:1.在开始游戏和结束游戏时负责游戏的初始化和销毁工作;2.游戏场景的切换,以及场景暂停或回复的控制;3.设置或获取一些系 统信息,比如,设置和得到屏幕大小等。

  1。访问和改变场景

  2。访问配置信息

  3 应用核心loop

  4. 绑定和访问窗口

  5。处理自动回收对象

  6。处理事件消息转发 暂停 恢复和结束游戏

  7。初始化各种管理器

  8。处理在各Node的计划任务执行

  9. 在平台窗口绘图和opengl之间转换坐标

  +( Director) getInstance 获取单例。

  -(void) runWithScene: (Scene*)scene 将场景对象压入栈中,并激活(此时不能有已经激活的场景,因此该方法常用于刚进游戏时)。

  -(void) replaceScene: (Scene*)scene 替换当前激活的场景,同时将旧场景从堆栈中删除,新场景压入堆栈。

  -(void) pushScene: (Scene*) scene 添加新的场景进栈,并将其激活。

  -(void) popScene 当前激活的场景出栈,激活上一个场景。

  -(void) pause 暂停。

  -(void) resume 恢复。

  (以上操作类似于安卓中Activity的操作)

  导演常用方法(cc.Director表示导演类):

  1.获取单例对象:local sharedDirector = cc.Director:getInstance()

  2.获取窗口大小:local winSize = cc.Director:getWinSize()

  3.暂停游戏: sharedDirector:pause() --暂停所有定时器和动作,但场景仍然会显示在屏幕上

  4.恢复游戏: sharedDirector:resume() --恢复所有计时器和动作

  Node(节点):

  是cocos2d-Lua中 可见元素 的 基类,场景、层、精灵、标签和菜单等都继承自Node。

  Node作为可见元素的公共抽象,主要功能如下:

  1.封装了可见元素的基础属性与方法

  2.节点都可以含有子节点

  3.节点可以运行动作

  4.节点内部有一个跟对节点生命周期的调度器

  节点常用方法(cc.Node表示节点类):

  1.创建节点: local node = display.newNode()

  2.添加子节点: node:addChild(child,zOrder,name) --cc.Node类型子节点、数字类型可选参数、字符串类型可选参数(子节点的名称)

  3.移除子节点: node:removeChild(childNode)

  4.获取父节点: local parent = node:getParent()

  5.获取子节点: local parent = node:getChilren()

  6.设置大小: node:setContentSize(cc.size(width,height))

  7.获取大小: lcoal size = node:getContentSize()

  8.设置位置坐标:node:setPosition(cc.p(x,y))

  9.设置锚点: node:setAchorPoint(cc.p(x,y))

  场景(Scene):

  是容纳其他可见与不可见元素的容器,一个游戏需要至少一个场景。特定时间内只有一个场景是处于活动状态的。游戏里管卡、界面的切换其实就是一个个场景的切换,就想在电影中变换舞台或场地一样。

  场景常用方法(cc.Scene表示场景类):

  1.创建普通场景: display.newScene(name)

  2.创建带物理引擎的场景: display.newPhysicsScene(name)

  前面提到过,场景是由导演完成的,与场景相关的导演方法有:

  1.sharedDirector:runWithScene(newScene)--运行游戏的第一个场景,本方法在主程序第一次启动主场景的时候调用

  2.sharedDirector:pushScene(name)--将当前运行的场景暂停并亚茹到场景栈中,在将传入的scene设置为当前运行场景

  3.sharedDirector:replaceScene(newScene) --将传入的scene替换当前场景,当前场景被释放。----》这是最常用的场景切换方法

  4.sharedDirector:popScene(name)--从场景栈弹出栈顶场景并释放,运行新的栈顶场景。如果栈为空,结束应用。通常和pushScene结对使用

  层(Layer):

  是对场景布局的戏份,主要起容器的作用。加入一个跑酷场景,地图和角色不停地向前滚动,但UI却是固定不动的,这时候如果我们做分层处理,将能更好的实现它,即地图和角色放在一个层,UI放在另外一层,互不影响

  层常用方法(cc.Layer表示层类):

  1.创建一个普通的层:local layer = disppaly.newLayer()

  2.创建一个有北京填充色的层:local layer = display.newColorLayer(cc.c4b(255,0,0,255))

  注意:有的版本创建层的方法如下

  local layer = cc.Layer:create()

  local layer = cc.Layer:create(color)

  精灵(Sprite):

  如果说场景和层充当容器的作用,那么,精灵就是容器中盛放的内容。精灵总绑定一个“ 纹理对象 ”或 “精灵帧对象”,引擎渲染精灵实际上就是把精灵绑定的纹理或精灵帧按照属性设定渲染到屏幕上。可以说精灵是图像的载体,游戏中看得见的场景背景图片、房屋等都可以通过精灵实现。引擎纹理对应类Texture2D,精灵帧对应的类SpriteFrame,他们与精灵之间有如下关系

  Image:对应硬盘中不同类型的图片,例如jpg和png等,它知道如何从文件中读取不同类型的图片,生成缓冲数据,供Txture2D使用。

  Txture2D: 代表一个可以被绘制的纹理

  SpriteFrame: 是相对于动画而产生的。一个Sprite可以拥有多个SpriteFrame,一个时刻只显示其中一帧,帧之间切换形成了动画。SpriteFrame是具有一定区域的纹理,依赖Txture2D

  Animation:描述一个有序的SpriteFrame序列,类似于剪辑过的电影胶卷

  Animate:把Animate转化为引擎识别的Action类,让Sprite可以运行

  精灵常用方法(cc.Sprite表示精灵类):

  1.从图片文件中创建精灵:local sprite1 = display.newSprite("hello1.png");

  2.从缓存的图像帧创建精灵: local sprite2 = display.newSprite("#frame0001.pbg") --为了区分,在文件名前添加“#”以表示精灵帧

  3.从SpriteFrame对象创建精灵: local frame = display.newFrame(frame0002.png) local sprite3 = display.newSprite(frame)

  下面结合层和精灵实例:

  function MainScene:ctor() ---构造函数

  local layer = display.newColorLayer(cc.c4b(225,0,0,255)) --创建layer

  self:addChild(layer) --添加层layer到场景

  local sprite = display.newSprite("HelloWorld.png") --创建sprite

  layer:addChild(sprite,0) --添加到layer

0 0