在开发之前需要做如下的准备工作:

  • android开发环境
  • 到​​这里​​下载最新的cocos2d-template.zip 解压.
  • 在eclipse将刚刚解压的cocos2d-template项目import进来,把项目名字改成你的游戏名,如TankWar等. 现在就可以在这个模板之上做之后游戏开发了.

这个游戏模板的运行结果如下图:游戏的包括左下角的实时帧数显示,以及页面当中的touch点的坐标显示,所以如果想要添加其它丰富的内容的话要靠自己动手来DIY了。

cocos2d-android-1 使用方法_游戏

观察这个project,有几个重要的部分要说明一下,首先这是个android Project,所以做过一些简单开发的就应该能看出来;  其次,在assets目录中有一个fps_images.png图片,左下角的fps所用的字体就是来自于这个文件,后面还会发现,游戏中的的素材,一般 情况下都是放到assets目录下的;最后,在libs目录里是cocos2d-android.jar,是个cocos2d-android-1引擎, 它实现了诸如场景(Scene),图层(Layer),精灵(Sprite),以及游戏过程中需要用到的各种运动和效果,它是整个项目里最重要的部分。

在src文件夹里有只有一个GameActivity.java的源文件,下面说明一下文件里重要的部分:

​​...​​       


​​import​​ ​​android.app.Activity;​​


​​import​​ ​​android.os.Bundle;​​


​​import​​ ​​android.view.MotionEvent;​​


​​import​​ ​​android.view.Window;​​


​​import​​ ​​android.view.WindowManager;​​


​​public​​ ​​class​​ ​​GameActivity ​​ ​​extends​​ ​​Activity {​​


GameActivity是一个Android的Activity,包含着一个Activity从create 到destory的所有方法:

/** Called when the activity is first created. */​​       


​​@Override​​


​​public​​ ​​void​​ ​​onCreate(Bundle savedInstanceState) {​​


​​super​​ ​​.onCreate(savedInstanceState);​​





​​// set the window status, no tile, full screen and don't sleep​​


​​//windows 无标题,全屏,不休眠​​


​​requestWindowFeature(Window.FEATURE_NO_TITLE);​​


​​getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,​​


​​WindowManager.LayoutParams.FLAG_FULLSCREEN);​​


​​getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,​​


​​WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);​​





​​CCGLSurfaceView mGLSurfaceView;​​





​​mGLSurfaceView = ​​ ​​new​​ ​​CCGLSurfaceView(​​ ​​this​​ ​​);​​





​​setContentView(mGLSurfaceView);​​





​​// attach the OpenGL view to a window​​


​​//连接opengl与当前窗口,这个的原理我也不是很懂...​​


​​CCDirector.sharedDirector().attachInView(mGLSurfaceView);​​





​​// no effect here because device orientation is controlled by manifest​​


​​CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);​​





​​// show FPS​​


​​// set false to disable FPS display, but don't delete fps_images.png!!​​


​​//显示fps​​


​​CCDirector.sharedDirector().setDisplayFPS(​​ ​​true​​ ​​);​​





​​// frames per second // 帧数​​


​​CCDirector.sharedDirector().setAnimationInterval(​​ ​​1​​ ​​.0f / ​​ ​​60​​ ​​);​​





​​//创建场景​​


​​CCScene scene = TemplateLayer.scene();​​





​​// Make the Scene active 开始运行场景​​


​​CCDirector.sharedDirector().runWithScene(scene);​​


​​}​​





​​@Override​​


​​public​​ ​​void​​ ​​onStart() {​​


​​super​​ ​​.onStart();​​


​​}​​





​​@Override​​


​​public​​ ​​void​​ ​​onPause() {​​


​​super​​ ​​.onPause();​​





​​CCDirector.sharedDirector().pause();​​


​​}​​





​​@Override​​


​​public​​ ​​void​​ ​​onResume() {​​


​​super​​ ​​.onResume();​​





​​CCDirector.sharedDirector().resume();​​


​​}​​





​​@Override​​


​​public​​ ​​void​​ ​​onDestroy() {​​


​​super​​ ​​.onDestroy();​​





​​CCDirector.sharedDirector().end();​​


​​}​​


下面是GameActivity类中的的TemplateLayer类,

​​static​​         ​​class​​         ​​TemplateLayer ​​        ​​extends​​         ​​CCLayer {​​       


​​CCLabel lbl;​​





​​public​​ ​​static​​ ​​CCScene scene() {​​


​​CCScene scene = CCScene.node();​​


​​CCLayer layer = ​​ ​​new​​ ​​TemplateLayer();​​





​​scene.addChild(layer);​​





​​return​​ ​​scene;​​


​​}​​





​​protected​​ ​​TemplateLayer() {​​





​​this​​ ​​.setIsTouchEnabled(​​ ​​true​​ ​​);​​





​​lbl = CCLabel.makeLabel(​​ ​​"Hello World!"​​ ​​, ​​ ​​"DroidSans"​​ ​​, ​​ ​​24​​ ​​);​​





​​addChild(lbl, ​​ ​​0​​ ​​);​​


​​lbl.setPosition(CGPoint.ccp(​​ ​​160​​ ​​, ​​ ​​240​​ ​​));​​





​​}​​





​​@Override​​


​​public​​ ​​boolean​​ ​​ccTouchesBegan(MotionEvent event) {​​


​​CGPoint convertedLocation = CCDirector.sharedDirector()​​


​​.convertToGL(CGPoint.make(event.getX(), event.getY()));​​





​​String title = String.format(​​ ​​"touch at point(%.2f, %.2f)"​​ ​​,​​


​​convertedLocation.x, convertedLocation.y);​​





​​if​​ ​​(lbl != ​​ ​​null​​ ​​) {​​


​​lbl.setString(title);​​


​​}​​





​​return​​ ​​CCTouchDispatcher.kEventHandled;​​


​​}​​





​​}​​


注意看scene()方法,事实上CCDirector.sharedDirector()需要一个CCScene 做为开始点,而Scence需要一个CCLayer 做为开始点,TemplateLayer scence()方法返回了一个包含着CCLayer的CCScence给Director,就是这样子。其它的部分,layer里放置了一个label 用来显示上次touch事件位置,重载了ccTouchesBegan(touch donw)事件,在这个方法里做label的更新,就是这样子。

到此,一个简单的基于cocos2d-android-1引擎的不怎么算得上游戏的游戏已经跑通了,呼~ 我也休息一下,查一些东西,过些天再整理一下CCSprite相关的东西。

=============================

Ps,使用模板和现成的jar的好处是方便,你花几钟就可以搭好一个东西,开始把精力投放在耗时耗力的关卡上了。不过现阶段cocos2d- android-1还不是很成熟,有时候会出现一些诡异的事情,这种情况下就无法通过jar包来定位问题到底出在哪里,所以前段时间我的实验过程用的都是 从​​这里​​​checkout出的代码,这样一是解决了调试的问题; 再就是还可以更加具体和有针对性对​​将问题反馈给开发者​​ ; 而且源码里还有一个cocos2d的演示demo,我们可以参考这个demo来开始进行实验工作 : )