cocos2d-android-1 使用方法

 

此篇博文讲解最基本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),以及游戏过程中需要用到的各种运动和效果,它是整个项目里最重要的部分。

package com.cronlygames.cocos2d.template;

import org.cocos2d.events.CCTouchDispatcher;
import org.cocos2d.layers.CCLayer;
import org.cocos2d.layers.CCScene;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.nodes.CCLabel;
import org.cocos2d.opengl.CCGLSurfaceView;
import org.cocos2d.types.CGPoint;

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 {
 private CCGLSurfaceView mGLSurfaceView;
 
    /** 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
        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);

        mGLSurfaceView = new CCGLSurfaceView(this);
       
        setContentView(mGLSurfaceView);
       
        // attach the OpenGL view to a window
        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!!
        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();
    }
   
   
    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来开始进行实验工作 : )

你可能感兴趣的:(工作记录)