第三十七天 一乐在当中—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能够通过图像或者图像中的一个矩形子区域创建。实际上。精灵就是一个能够不断变化的图片,变化包含位置变化、旋转、放大、运动等等。


  


posted on 2017-06-03 20:31  ljbguanli  阅读(175)  评论(0编辑  收藏  举报