第三十七天 一乐在当中—Android的小游戏打飞机(一)环境搭建
8月3日,晴天。"绿树阴浓夏日长。楼台倒影入池塘。 水晶帘动微风起,满架蔷薇一院香。
"
cocos2d是一个开源的游戏开发框架。利用它能够非常easy的开发2D游戏。眼下最基本的分支是iPhone版本号的,你能够在iPhone上开发2D游戏。
它提供了物理。精灵(sprites)。视差卷轴(parallax scrolling),支持iPhone touch和accelerator等非常多功能。如今在App Store上已经有不少用cocos2d开发的游戏。
假设你想在Andriod上使用Java语言进行 cocos2d游戏的开发,能够到这个网址下载相关开发文件:
https://github.com/ZhouWeikuan/cocos2d。进入上面的网址后,假设不用git或者svn的朋友就在页面的右下角点那个“Download ZIP”就可以。
开发时。仅仅需将下载好的cocos-master中的cocos2d-android中的libs文件夹中的的内容拷到自己project的libs文件夹下。
一、导入下载文件,纵观全貌
1、下载完毕后解压,里面有个叫“cocos2d-android”的文件夹,由于用Android开发,所以就导入这个文件夹。
2、导入后,会出现两个错误。
修正方法:第一个错误是这个项目是一个Library项目,在属性中取消它的Libray属性就可以。
第二个错误是目录中已经包括了一个jar文件。和src中的源码反复了。仅仅须要删除/libs/cocos2d-android.jar文件就可以执行。
3、在模拟器上执行,得到一个具有cocos2d游戏各项功能使用的DEMO列表,可供大家学习參考使用。
二、执行第一个游戏-静态飞机
1、MainActivity.java
package edu.eurasia.cocos2d_game01; import org.cocos2d.layers.CCScene; import org.cocos2d.nodes.CCDirector; import org.cocos2d.opengl.CCGLSurfaceView; import android.os.Bundle; import android.app.Activity; public class MainActivity extends Activity { // 创建一个view对象,cocos2d引擎会把图形绘制在该view对象上面 private CCGLSurfaceView view = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); view = new CCGLSurfaceView(this); setContentView(view); // 获取导演对象 CCDirector director = CCDirector.sharedDirector(); // 设置游戏引擎画面的输出目标View director.attachInView(view); // 设置游戏是否显示FPS值 director.setDisplayFPS(true); // 设置游戏的刷新率 FPS = frame per second director.setAnimationInterval(1 / 30.0f); // 生成场景对象 CCScene scene = CCScene.node(); // 生成图层对象 PlaneLayer layer = new PlaneLayer(this); // 将图层加入至场景其中 scene.addChild(layer); // 通知导演,执行场景 director.runWithScene(scene); } }2、PlaneLayer.java
package edu.eurasia.cocos2d_game01; import org.cocos2d.layers.CCLayer; import org.cocos2d.nodes.CCDirector; import org.cocos2d.nodes.CCSprite; import org.cocos2d.types.CGPoint; import org.cocos2d.types.CGSize; import android.content.Context; public class PlaneLayer extends CCLayer{ //声明一个精灵对象 private CCSprite plane; private CCDirector director; private CGSize winSize; public PlaneLayer(Context context){ director = CCDirector.sharedDirector(); winSize = director.winSize(); //初始化精灵对象 plane = CCSprite.sprite("p.png"); //设置精灵对象的位置 plane.setPosition(CGPoint.ccp(winSize.width / 2, 200)); this.addChild(plane); } }
须要将一张飞机的图片p.png放置在assets文件夹下。
3、执行结果
源码下载地址:http://download.csdn.net/detail/zwszws/7717559
4、代码分析
Cocos2d的核心结构例如以下图
1、CCDirector:导演类是游戏其中的组织者和领导者,负责调度游戏其中的一切对象和资源。
Director是一个单例,在所有游戏中仅仅存在一个实例。
Director类似电影中的“导演”。正如其名,它经管Cocos2d-x中的所有场景的调度:能够切换当前场景(游戏中仅仅有一个当前场景),暂停场景中的动作—这跟实际中的导演喊“咔”是一样的—会暂停所有场景中所有的动作或音效等,当然也能够開始一个场景中的动作和音效。总之。Director扮演着一个导演的角色。
2、CCScene:场景能够简单的理解为一个关卡。多 个关卡组合在一起就形成了游戏。
Scene就像一个舞台会摆放各类的元素。有的是固定的:布景和道具,有的元素是能够移动的:男、女主角等。
在游戏世界里也如此,在一个游戏场景中会放置不合的元素来点缀我们的场景。
当然在游戏里。也未必全然跟实际同样,为了便于对元素的操作,我们将不同的元素放在不同的层。
在一个场景中能够放置多个层,能够使用addChild函数来把层增加场景中。 在设计一个场景时,通常会生成场景对象,然后再在里面加入层。
在CCScene承担的是一个容器的功能。游戏开发时须要渲染的对象在CCScene里面统一管理,包含创建、销毁和场景切换等,并且从其类的结构图可看出,其直接继承了CCNode类,CCNode是cocos2d-x的渲染链,写游戏基本上就是和它打交道了。cocos2d-x同一时候仅仅能渲染一个CCScene,因此CCScene是渲染的根节点。在构建游戏时,通常是一个Scene中加入一个或者多个CCLayer,一个Layer中又加入多个CCSprite或者CCMenu,CCSprite中还能够加入CCParticleSystem等等。
这样就构建了一个渲染树,cocos2d-x历遍这个树来将图像显示在屏幕上。
3、CCLayer:一个场景能够有多个布景层构成。
这里说的层的概念和Adobe Photoshop上的概念是一样的。在每个游戏中,场景能够由很多层构成,每一层负责各自不同的任务,比如负责显示背景、负责显示道具和负责显示任务等。而在每一层上面,又能够加入不同的元素。如文本、精灵和菜单等。
通过层与层之间的组合关系,就能让游戏显示出各种各样的界面了。当然为了看得清每一层上的东西,非常多层都设置成透明或者半透明,否则仅仅能看到最上层的东西了。
4、CCSprite:游戏其中全部能够运动的东西差点儿都 是精灵。一个布景层其中能够包括多个精灵;
Sprite(精灵)是层中的首要构成元素,精灵CCSprite是整个游戏开发处理的主要对象,比如天上的飞机、地上的坦克、玩家控制的任务等等都是精灵。
CCSprite是一幅2D图像。CCSprite能够通过图像或者图像中的一个矩形子区域创建。实际上。精灵就是一个能够不断变化的图片,变化包含位置变化、旋转、放大、运动等等。