第三十七天 一乐在其中—Android的小游戏打飞机(一)环境搭建

           8月3日,晴天。"绿树阴浓夏日长,楼台倒影入池塘, 水晶帘动微风起,满架蔷薇一院香。"

       cocos2d是一个开源的游戏开发框架,利用它可以非常容易的开发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目录中的的内容拷到自己工程的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可以通过图像或者图像中的一个矩形子区域创建。实际上,精灵就是一个可以不断变化的图片,变化包括位置变化、旋转、放大、运动等等。

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值