android cocos2d demo

本文介绍了一个简单的Cocos2d-x僵尸行走游戏的开发过程,包括游戏场景、地图生成、僵尸移动、粒子系统模拟飘雪等关键模块的实现。通过此教程,开发者可以快速上手Cocos2d-x游戏引擎,了解如何创建游戏中的基本元素和实现简单的游戏逻辑。

僵尸行走的demo ..比较简单,啥也不想说。但还是想记录下来

mainActivity

package com.zkk;

import org.cocos2d.layers.CCScene;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.opengl.CCGLSurfaceView;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {
	private CCDirector director;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		this.getWindow().setFlags(
				WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
				WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
		CCGLSurfaceView surfaceView=new CCGLSurfaceView(this);
		setContentView(surfaceView);
		WindowManager wm = this.getWindowManager();
		int width = wm.getDefaultDisplay().getWidth();  
	    int height = wm.getDefaultDisplay().getHeight();
	  //  Log.i("zhouke", ":"+width+":"+height);
		director=CCDirector.sharedDirector();
		director.setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);
		director.setScreenSize(720,1280);
		director.setDisplayFPS(true);
		director.attachInView(surfaceView);
		CCScene scene=CCScene.node();
		DemoLayer layer=new DemoLayer();
		scene.addChild(layer);
		director.runWithScene(scene);
	}
	@Override
	protected void onResume() {
		director.onResume();
		super.onResume();
	}
	@Override
	protected void onPause() {
		director.onPause();
		super.onPause();
	}
	
	@Override
	protected void onDestroy() {
		director.end();
		super.onDestroy();
	}

}
demoLayer

package com.zkk;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.cocos2d.actions.base.CCFollow;
import org.cocos2d.actions.base.CCRepeatForever;
import org.cocos2d.actions.instant.CCCallFunc;
import org.cocos2d.actions.instant.CCPlace;
import org.cocos2d.actions.interval.CCAnimate;
import org.cocos2d.actions.interval.CCMoveTo;
import org.cocos2d.actions.interval.CCSequence;
import org.cocos2d.layers.CCLayer;
import org.cocos2d.layers.CCTMXObjectGroup;
import org.cocos2d.layers.CCTMXTiledMap;
import org.cocos2d.nodes.CCAnimation;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.nodes.CCSprite;
import org.cocos2d.nodes.CCSpriteFrame;
import org.cocos2d.nodes.CCTextureCache;
import org.cocos2d.particlesystem.CCParticleSnow;
import org.cocos2d.particlesystem.CCParticleSystem;
import org.cocos2d.sound.SoundEngine;
import org.cocos2d.types.CGPoint;
import org.cocos2d.types.CGRect;
import org.cocos2d.types.CGSize;

import com.example.jsapp.R;

import android.util.Log;
import android.view.MotionEvent;

public class DemoLayer extends CCLayer {
	private CCTMXTiledMap gameMap;
	private List<CGPoint> roadPos;
	private CCParticleSystem particleSystem;

	public DemoLayer() {
		init();
	}

	private void init() {
		// 地图的处理 生成xml
		setIsTouchEnabled(true);
		// 加载地图
		loadMap();
		// 解析地图内容 (按照顺序)
		parseMap();
		// 僵尸的移动 平移 绝对的移动
		move();

		// 序列帧的播放

		// moveMap();

		ArrayList<CCSpriteFrame> frames = new ArrayList<CCSpriteFrame>();
		String filepath = "z_1_%02d.png";// 如果有20张图片
		for (int i = 1; i <= 7; i++) {
			CCSpriteFrame frame = CCSprite.sprite(String.format(filepath, i))
					.displayedFrame();
			frames.add(frame);
		}
		CCAnimation anim = CCAnimation.animation("", 0.2f, frames);
		CCAnimate animate = CCAnimate.action(anim);

		sprint.runAction(CCRepeatForever.action(animate));
		// 声音的处理
		// 飘雪场景
		// 粒子系统模拟飘雪

		particalSystem();
	}

	private void particalSystem() { 
		particleSystem = CCParticleSnow.node();
		particleSystem.setTexture(CCTextureCache.sharedTextureCache().addImage(
				"f.png"));
		this.addChild(particleSystem);
	}

	private void moveMap() {
		// 地图是否是大图
		CCFollow follow = CCFollow.action(sprint);
		this.runAction(follow);

	}

	private void move() {
		sprint = CCSprite.sprite("z_1_01.png");
		// sprint.setAnchorPoint(0, 0);
		sprint.setPosition(roadPos.get(0));
		// 缩放控制
		sprint.setScale(0.5);
		sprint.setFlipX(true);

		// this.addChild(sprint);
		gameMap.addChild(sprint);
		// for 方案一 循环
		/*
		 * for(int index=1;index<roadPos.size();index++){ CCMoveTo
		 * moveTo=CCMoveTo.action(2, roadPos.get(index));
		 * sprint.runAction(moveTo); }
		 */
		// 串连执行
		moveToNext();
	}

	private int index = 0;
	private CCSprite sprint;

	public void moveToNext() {
		index++;
		if (index < roadPos.size()) {
			CGPoint cgPoint = roadPos.get(index);
			CCMoveTo moveTo = CCMoveTo.action(2, cgPoint);
			Log.i("zhouke", "before");
			CCSequence sequence = CCSequence.actions(moveTo,
					CCCallFunc.action(this, "moveToNext"));// 当上一个完成之后,立刻执行moveToNext
															// 时间间隔为0
			Log.i("zhouke", "after");
			sprint.runAction(sequence);
		} else {
			// 瞬间移动到某个点
		/*	index = 0;
			CCPlace place = CCPlace.action(roadPos.get(0));
			sprint.runAction(CCSequence.actions(place,
					CCCallFunc.action(this, "moveToNext")));*/
			particleSystem.stopSystem();
			// 处理声音引擎
			SoundEngine.sharedEngine().playSound(CCDirector.theApp, R.raw.psy,
					true);

		}
	}

	// 加载地图
	private void loadMap() {
		gameMap = CCTMXTiledMap.tiledMap("map.tmx");// .tmx 文件
		CGSize mapSize = gameMap.getContentSize();
		gameMap.setPosition(mapSize.width / 2, mapSize.height / 2);
		gameMap.setAnchorPoint(0.5f, 0.5f);
		this.addChild(gameMap);
	}

	private void parseMap() {
		roadPos = new ArrayList<CGPoint>();
		// 获取系统解析的信息
		CCTMXObjectGroup road = gameMap.objectGroupNamed("road");
		ArrayList<HashMap<String, String>> objects = road.objects;
		for (HashMap<String, String> item : objects) {
			int x = Integer.parseInt(item.get("x"));
			int y = Integer.parseInt(item.get("y"));
			roadPos.add(CGPoint.ccp(x,y));
		}
	}

	@Override
	public boolean ccTouchesMoved(MotionEvent event) {
		gameMap.touchMove(event, gameMap);
		return super.ccTouchesMoved(event);
	}
	@Override
	public boolean ccTouchesBegan(MotionEvent event) {
		//任意点击屏幕暂停游戏
		PauseLayer pauseLayer=new PauseLayer();
		//关于暂停layer 的添加。添加到DemoLayer 的parent 里面
		//一旦Demolayer 处于冻结状态的时候, 他下面所有的东西都不能被点击了
		this.getParent().addChild(pauseLayer);
		this.onExit();//游戏暂停
		return super.ccTouchesBegan(event);
	}
	/**
	 * 暂停的layer
	 * @author Administrator
	 *
	 */
	private class PauseLayer extends CCLayer{
		private CCSprite sprite_;
		public PauseLayer(){
			this.setIsTouchEnabled(true);
			sprite_ = CCSprite.sprite("heart.png");
			CGSize winSize = CCDirector.sharedDirector().getWinSize();
			sprite_.setPosition(winSize.width/2,winSize.height/2);
			this.addChild(sprite_);
		}
		@Override
		public boolean ccTouchesBegan(MotionEvent event) {
			CGPoint touchPos = this.convertTouchToNodeSpace(event);
			if(CGRect.containsPoint(sprite_.getBoundingBox(), touchPos)){
				//游戏继续
				DemoLayer.this.onEnter();//为DemoLayer 添加可以点击操作功能
				//this.setVisible(false);//无法解决问题
				this.removeSelf();
			}
			return super.ccTouchesBegan(event);
		}
	}
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值