Cocos2Dの組み込み



ライブラリの組み込み


Eclipseのプロジェクトにlibフォルダを追加します。





より

cocos2d-android.jar 

をダウンロードして、libフォルダにコピーします。



また、


をassetsフォルダにコピーします。



ソースコードの作成


タイトルを非表示にし、画面のフルスクリーンにし、常にスクリーンをOnに設定します。

// 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);

CCGLSurfaceView()のインスタンスを作成し、ActivityのViewとしてセットします。

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


onCreate()


Cocos2D用のSurfaceViewを画面に張り付けます。

// attach the OpenGL view to a window
CCDirector.sharedDirector().attachInView(mGLSurfaceView);

画面の向きを指定します。Androidの場合は、AndroidManifest.xmlで記載するルールなので、この設定は反映されません。

// no effect here because device orientation is controlled by manifest
CCDirector.sharedDirector().setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);

画面の左下にFPSの値を表示します。falseにすると非表示になります。

// 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 = HelloLayer.scene();

// Make the Scene active
CCDirector.sharedDirector().runWithScene(scene);



onStart


シーンとレイヤーの設定をしています。

public static CCScene scene() {
CCScene scene = CCScene.node();
CCLayer layer = new HelloLayer();
   
  scene.addChild(layer);
   
return scene;
}

レイヤー内で、処理する描画等を記載しています。

protected HelloLayer() {
this.setIsTouchEnabled(true);
lbl = CCLabel.makeLabel("Hello Cocos", "DroidSans", 24);

addChild(lbl, 0);
lbl.setPosition(CGPoint.ccp(160, 240));

}


HelloLayer.java





HelloCocos.java


画像の表示



をassetsフォルダにコピーします。



CCSprite image = CCSprite.sprite("gclue_logo.gif");
image.setPosition(CGPoint.make(100,100));
addChild(image, 0);


HelloCocos.java



タッチイベント


今度は、タッチイベントで画像の場所を移動するサンプルです。
通常のタッチイベントの座標系は、左上が(0,0)ですが、OpenGLは右下が(0,0)になります。

@Override
public boolean ccTouchesBegan(MotionEvent event) {
CGPoint convertedLocation = CCDirector.sharedDirector().convertToGL(CGPoint.make(event.getX(), event.getY()));
image.setPosition(CGPoint.make(convertedLocation.x,convertedLocation.y));

return CCTouchDispatcher.kEventHandled;
}



HelloCocos.java


アニメーション


this.schedule("moveImage", 0.1f);


public void moveImage(float time) {
y++;
image.setPosition(CGPoint.make(100, y));
}

クラス化


HelloCocos.java


HelloLayer.java


Orientationの組み込み 

SensorEventListenerをimplementsします。

class HelloLayer extends CCLayer implements SensorEventListener {

フィールドで、画像のx座標とy座標、SensorManager型の変数 mSensorManagerを定義します。

/**
 * 画像のx座標
 */
private int y = 100;

/**
 * 画像のy座標
 */
private int x = 100;

/**
 * SensorManager
 */
private SensorManager mSensorManager;

Cocos2Dでは、コンストラクタの後にonEnter()が呼ばれ、終了する際にはonExit()が呼ばれます。
onEnter()でOrientationをリスナーとして登録し、onExit()で解除します。

public void onEnter(){
// SensorManager
mSensorManager = (SensorManager) CCDirector.sharedDirector().getActivity().getSystemService(Context.SENSOR_SERVICE);

// Sensorの取得とリスナーへの登録
List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if (sensors.size() > 0) {
Sensor sensor = sensors.get(0);
mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}
}



public void onExit(){
mSensorManager.unregisterListener(this);
}

onAccuracyChanged()とonSensorChanged()を実装します。onSensorChanged()で取得したOrientationの値をベースに画像を移動させています。

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

@Override
public void onSensorChanged(SensorEvent sensorEvent) {
if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) {
x -= sensorEvent.values[2]/10;
y -= sensorEvent.values[1]/10;
CGPoint convertedLocation = CCDirector.sharedDirector().convertToGL(CGPoint.make(x, y));
image.setPosition(CGPoint.make(convertedLocation.x, convertedLocation.y));
}
}

HelloLayer.java



Box2Dを使う


Box2Dを使用する事で、物理シミュレーションをアプリに組み込む事が可能になります。


のcocos2d-android.jarは古いので、開発用のgithubから取得してきます。


に存在するcocos2d-android.jar をコピーして上書きします。

また、https://github.com/ZhouWeikuan/cocos2d  より、プロジェクトをダウンロードしてきて、cocos2d_android/src/以下にあるcom.badlogic.gdx.*のパッケージ分を丸ごとコピーします。
また、libsフォルダにあるarmebi/libgdx.so とcocos2d-android.jar もフォルダごとコピーします。

asstesフォルダからfps_images.png を削除します。








HelloLayer.java





Comments