cocos2d-android-1 使用方法


转自:http://hi.baidu.com/184367426/blog/item/b1f4c6396c798412baa1678b.html


现在最新的工程已经转移到 https://github.com/ZhouWeikuan/cocos2d

此篇博文讲解最基本cocos2d-android-1 使用方法,主要参考此文

对于cocos2d以及cocos2d-android-1 不了解的铜鞋移步这里 或者这里

OK, 回到正题,在开发之前需要做如下的准备工作:

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

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


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

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

1
2
3
4
5
6
7
...
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的所有方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/** 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类,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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来开始进行实验工作 : )


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值