cocos2d-Lua03环境搭建及基本概念

来源:互联网 发布:9是什么意思网络语言 编辑:程序博客网 时间:2024/06/16 13:09


预热:






Director(导演):

是一个单例,主要工作是: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




 

页游中可以直接使用Flash来形成动画,但在cocos2d中是不能用Flash做动画的,需要借助以下几个步骤:

  1. 先将精灵帧放在一个数组中
  2. 然后利用CCAnimation::animationWithSpriteFrames方法生成一个动画对象
  3. 再由动画对象生成一个动画动作
  4. 最后由相应的精灵执行该动作
  5. void HelloWorld::InitAnimation()
  6. {        //将图片加入纹理缓充中    CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage("you.png");    //声明一个数组,用来存放这16个精灵帧    CCArray * texturearray = CCArray::arrayWithCapacity(16);    //texturearray->retain();        //通过纹理缓充来生成精灵帧,我们用了一个循环,分别从向至下按每个精灵帧的矩形大小取精灵帧    for (int i = 0; i < 4; i++)    {        for (int j = 0; j < 4; j++)        {            CCSpriteFrame *SpriteFrame = CCSpriteFrame::frameWithTexture(texture, CCRectMake(j * 45, i * 64, 45, 64));            texturearray->addObject(SpriteFrame);    //将精灵帧加入数组中        }    }    //我只想要向右行走的动画,所以再声明一个数组存放4个精灵帧    CCArray * texturearrayrun = CCArray::arrayWithCapacity(4);    //纹理在内存中是上下倒置的,我们看到是第4-7个元素,其实是第8-11个    for (int i = 8; i < 12; i++)    {        texturearrayrun->addObject(texturearray->objectAtIndex(i));    }    //利用精灵帧生成一个动画对象    CCAnimation *animation = CCAnimation::animationWithSpriteFrames(texturearrayrun, 0.5f);    animation->setDelayPerUnit(0.16f);                //设置每帧的执行时间    animation->setRestoreOriginalFrame(true);        //动画执行完毕后返回第一帧    animation->setLoops(-1);                        //设置动画为无限循环,也可以用CCRepeat动作来实现无限循环    //用动画对象创建一个动画动作    CCAnimate *animate = CCAnimate::actionWithAnimation(animation);    //用第3行第1列的精灵帧创建精灵    CCSprite *pSprite = CCSprite::spriteWithSpriteFrame(CCSpriteFrame::frameWithTexture(texture, CCRectMake(0, 128, 45, 64)));    pSprite->runAction(animate);                //执行动作    pSprite->setOpacity(100);                    //设置透明度    pSprite->setPosition(ccp(100, 100));        //放置精灵位置    this->addChild(pSprite);                    //加入CCLayer节点中}





cocos2d-Lua环境搭建


1. 安装jdk1.7
2. 安装python2.7(不要装3.x版本)
3. 安装cocoscodeide 1.2(可以开发Lua和Js)
4. 安装cocos2d-x源码 3.2
    cocos frameword 3.4 <==>quick MVC
    cocos framework 3.6
    quick
-------------------------------------------------
项目目录结构
1。res
    保存游戏项目里面的所有资源
        图片
        声音
        视频
        动画文件
        地图数据
       关卡数据
       ...
2. src 
     游戏的源码
     main.lua
     xxx.lua
3.config.json
  lua运行配置文件
-----------------------------------------------
在Cocos项目中入口函数为:


function main()


--lua配置参数
--设置文件搜索路径


--1.创建一个场景
  通过独立的文件来定义场景

  local MS=require("xxx")
  local ms_scene=MS:create()


--2.运行这个场景
  cc.Director:getInstance():runWithScene(ms_scene)
 or
  cc.Director:getInstance():replaceScene(ms_scene)
end
----------------对场景的定义


local MyScene=class("MyScene",function ()
  cc.Scene:create()
end)
function MyScene:create()
 local ms=MyScene.new()


 return ms
end
function MyScene:ctor()
  初始化成员属性
end
function MyScene:init()
  初始化场景的各个图层 
  self:addChild(l1)


end
return MyScene
-----------------------------------------
Director
Scene
-----------------------------------------
Label  文字层
Sprite 图片层
-------------------------------------------
1。锚点:对齐点 坐标旋转缩放
2。图层顺序
  setLocalZOrder(n)
   n越大越远





















0 0
原创粉丝点击