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

  • 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(160240));
     }
     @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来开始进行实验工作 : )

cocos2d-android-1 使用方法相关推荐

  1. cocos2d android开发,Cocos2d android(一个钟点学会FlyppyBird开发)

    Cocos2d android(一个小时学会FlyppyBird开发) 首先请下载源码程序....... (下面内容请再熟悉Android开发以后继续观看) ~~~~~~~~~~~~~~~~~~~~~ ...

  2. android phonegap插件开发方法 plugin

    2019独角兽企业重金招聘Python工程师标准>>> android phonegap插件开发方法 plugin 分类: phonegap 2014-03-03 22:41  59 ...

  3. Android getWindow().setFlags方法

    Android getWindow().setFlags方法 //设置窗体全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCR ...

  4. android+发邮件,Android发送邮件的方法实例详解

    Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...

  5. [转]JS调用Android里面的方法,Android调用JS里面的方法

    FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...

  6. Android之Inflate()方法用途+setContentView和inflate区别

    引用:http://blog.chinaunix.net/uid-27024249-id-3304935.html Android之Inflate()方法用途 Inflate()作用就是将xml定义的 ...

  7. android 解决getColor()方法过时

    今天,简单讲讲android里如何解决getColor()方法过时的问题. 之前,我写博客讲了程序员需要解决过时的方法的问题,Google会提供过时函数的替代函数,程序员有责任找到替代函数,并且解决过 ...

  8. Android布局动态化,一种基于堆积木思想的卡片式Android动态布局方法与流程

    本发明涉及android界面布局,特别是一种基于堆积木思想的卡片式Android动态布局方法. 背景技术: 在Android流行的今天,android App在生活中使用日益广泛,相对PC,手机由于界 ...

  9. Android 性能优化方法

    2019独角兽企业重金招聘Python工程师标准>>> Android 性能优化方法 对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商 ...

  10. android 11 版本更新内容,android 11怎么更新 android 11更新方法

    android 11怎么更新?在最近,谷歌和OPPO手机相继推出android 11,那我们该怎么将自己手机的Android版本升级到android 11呢,android 11怎么更新,下面就和小编 ...

最新文章

  1. CVPR2020 | PV-RCNN: 3D目标检测
  2. 4.SELECT DISTINCT 语句
  3. TCP/IP协议栈模型分析
  4. 公布一个简单的日志记录方法 【转】-要研究
  5. 勤哲linux客户端,Excel在线编辑
  6. VMware VCSA 6.0安装过程 (转)
  7. HDU 5517---Triple(二维树状数组)
  8. dup和dup2详解
  9. L1-051 打折-PAT团体程序设计天梯赛GPLT
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_03 过滤器_2_FileNameFilter过滤器的使用和Lambda表达式...
  11. XYPC一款实用的平面测量控制网平差软件
  12. 服务器ssd硬盘接笔记本,M.2固态硬盘怎么安装 台式机与笔记本电脑安装M.2 SSD方法图解...
  13. python从文件中读取数据_【Python】从文件中读取数据
  14. smart夏季的笑话
  15. 本科科研经历(技术干货篇-论文发表流程)
  16. UOJ #496.秋蝉鸣泣之时
  17. java孙膑与庞涓_《鬼谷子的局3》—— 读后总结
  18. 二进制文件与16进制(十六进制)文本文件互转工具
  19. 歌词查询java_实验10—— java读取歌词文件内容动画输出
  20. 用python如何把一个数字拆开再拼接上

热门文章

  1. 网络、通信术语及概念
  2. 网站添加微信支付功能(小白填坑)
  3. 使用TFHelp解析Html
  4. UVA 694-The Collatz Sequence
  5. ADO Entities Framework不对多表查询进行优化?
  6. 在Project中引用zedgraph控件
  7. 扔掉目标检测器,实现真正的端到端多模态预训练!阿里提出E2E-VLP(ACL2021)...
  8. CAMoE——屠榜 video retrieval challenge
  9. 车辆行人识别训练与部署,EasyDL-Jetson Nano 端边云协作专场公开课
  10. ICCV 2019 | 旷视研究院提出VANet:具备视角感知力的车辆重识别网络