Cocos2d android(一个小时学会FlyppyBird开发)

首先请下载源码程序。。。。。。。

(下面内容请再熟悉Android开发以后继续观看)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

正式写代码之前,先大概介绍一下Cocos2d

Cocos2d-x 是一个支持多平台的 2D 手机游戏引擎,使用 C++ 开发,基于OpenGL ES,基于Cocos2d-iphone,支持 WOPhone, iOS 4.1, Android 2.1 及更高版本, WindowsXP & Windows7,WindowsPhone

8.

Cocos2d引擎框架如下图:

Cocos2d-x

基于Cocos2d-iphone。原则上在IOS上开发完成以后可以通过工具转换为Android版本的APK(具体如何转,在此不做介绍)。

Cocos2d基础理论:

在Cocos2d中需要一个dao

请观看视频http://edu.51cto.com/lesson/id-13256.html

FlyppyBird游戏在此分四步:

1、添加小鸟

2、添加地板

3、改变小鸟速度

4、添加滑块并设置速度

那么接下来开始写代码:

首先搭建Android工程

这里我们仍然默认LauncherActivity为MainActivity

public class MainActivity extends Activity {

static{

System.loadLibrary("gdx");

}

CCGLSurfaceView view;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

view = new CCGLSurfaceView(this);

CCDirector director = CCDirector.sharedDirector();

director.setDeviceOrientation(CCDirector.kCCDeviceOrientationPortrait);//初始化导演类

director.attachInView(view);

director.setAnimationInterval(1/30.0);

director.setDisplayFPS(true);//以上三句设置导演类的属性

setContentView(view);

CCScene scene = CCScene.node();//初始化场景类

FlyppyBirdLayer layer = new FlyppyBirdLayer(this);//布景层

scene.addChild(layer);

director.runWithScene(scene);//运行场景

}

}接下来按照上面四步开始写布景层:

1、添加小鸟

private void addBird() {

bird = CCSprite.sprite("bird.png");

CGSize s = bird.getContentSize();

BodyDef bodyDef = new BodyDef();

bodyDef.type = BodyType.DynamicBody;

bodyDef.position.set(300 / PTM_RATIO, 800 / PTM_RATIO);

// Define another box shape for our dynamic body.

PolygonShape dynamicBox = new PolygonShape();

dynamicBox.setAsBox(s.width / 2 / PTM_RATIO, s.height / 2 / PTM_RATIO);

// These are mid points for our 1m box

// dynamicBox.density = 1.0f;

// dynamicBox.friction = 0.3f;

// Define the dynamic body fixture and set mass so it's dynamic.

Body body = world.createBody(bodyDef);

body.setUserData(bird);

FixtureDef fixtureDef = new FixtureDef();

fixtureDef.shape = dynamicBox;

fixtureDef.density = 1.0f;

fixtureDef.friction = 0.3f;

body.createFixture(fixtureDef);

addChild(bird);

}

2、添加地板

private void addGround() {

CCSprite ground = CCSprite.sprite("ground.png");

CGSize s = ground.getContentSize();

BodyDef def = new BodyDef();

def.type = BodyType.StaticBody;

def.position.set(s.width / 2 / PTM_RATIO, s.height / 2 / PTM_RATIO);

Body groundBody = world.createBody(def);

FixtureDef fDef = new FixtureDef();

PolygonShape pShape = new PolygonShape();

pShape.setAsBox(s.width / 2 / PTM_RATIO, s.height / 2 / PTM_RATIO);

fDef.shape = pShape;

fDef.density = 1.0f;

fDef.friction = 0.3f;

groundBody.createFixture(fDef);

groundBody.setUserData(ground);

addChild(ground);

}

3、改变小鸟速度(在这里设置当点击屏幕时小鸟向上移动)

需要首先设置当前场景的物理环境,这里我们使用Box2D

private void initWorld() {

Vector2 gravity = new Vector2(0f, -9.8f);

world = new World(gravity, true);

world.setContinuousPhysics(true);

world.setContactListener(this);

}

设置屏幕接受点击事件

public FlyppyBirdLayer(Context context) {

this.mContext = context;

this.setIsTouchEnabled(true);

this.setIsAccelerometerEnabled(true);

screenSize = CCDirector.sharedDirector().winSize();

}

给屏幕添加点击事件,当点击屏幕时,改变小鸟速度为向上,初始速度为10

@Override

public boolean ccTouchesBegan(MotionEvent event) {

Iterator

it = world.getBodies();

while (it.hasNext()) {

Body b = it.next();

Object userData = b.getUserData();

if (userData != null && userData instanceof CCSprite

&& userData == bird) {

b.setLinearVelocity(0, 10);

}

}

return super.ccTouchesBegan(event);

}

这里需要注意一点,需要每次重绘小鸟位置,否则小鸟表现为不会运动,我们调用scheduleUpdate()方法,来执行默认的update(float dt)方法(Cocos2d机制)

private void startGame() {

score=0;

addBird();

addGround();

scheduleUpdate();

}public void update(float dt) {

System.out.println(world.getBodyCount());

world.step(FPS, 8, 1);

// Iterate over the bodies in the physics world

Iterator

it = world.getBodies();

while (it.hasNext()) {

Body b = it.next();

Object userData = b.getUserData();

if (userData != null && userData instanceof CCSprite) {

// Synchronize the Sprites position and rotation with the

// corresponding body

final CCSprite sprite = (CCSprite) userData;

final Vector2 pos = b.getPosition();

if(pos.x<0){

sprite.removeFromParentAndCleanup(true);

world.destroyBody(b);

score++;

}else{

sprite.setPosition(pos.x * PTM_RATIO, pos.y * PTM_RATIO);

}

}

}

}

4、添加滑块,并且设置速度,这里我们仍然使用schedule方法,来隔一段时间添加滑块,并且设置从右往左运动。

public void addBar(float dt) {

float offset = -(new Random().nextInt(5));

CCSprite downBar = CCSprite.sprite("downBar.png");

CGSize downBarSize = downBar.getContentSize();

BodyDef def = new BodyDef();

def.type = BodyType.KinematicBody;

def.position.set(screenSize.width / PTM_RATIO + 2, downBarSize.height

/ PTM_RATIO + offset);

def.linearVelocity.set(-5, 0);

Body downBarBody = world.createBody(def);

PolygonShape downPolygonShape = new PolygonShape();

downPolygonShape.setAsBox(downBarSize.width / 2 / PTM_RATIO,

downBarSize.height / 2 / PTM_RATIO);

FixtureDef downBarFixtureDef = new FixtureDef();

downBarFixtureDef.shape = downPolygonShape;

downBarBody.createFixture(downBarFixtureDef);

addChild(downBar);

downBarBody.setUserData(downBar);

CCSprite upBar = CCSprite.sprite("downBar.png");

CGSize upBarSize = upBar.getContentSize();

BodyDef upBardef = new BodyDef();

upBardef.type = BodyType.KinematicBody;

upBardef.position.set(screenSize.width / PTM_RATIO + 2,

upBarSize.height / PTM_RATIO + offset + upBarSize.height * 2

/ PTM_RATIO);

upBardef.linearVelocity.set(-5, 0);

Body upBarBody = world.createBody(upBardef);

PolygonShape upPolygonShape = new PolygonShape();

upPolygonShape.setAsBox(upBarSize.width / 2 / PTM_RATIO,

upBarSize.height / 2 / PTM_RATIO);

FixtureDef upBarFixtureDef = new FixtureDef();

upBarFixtureDef.shape = upPolygonShape;

upBarBody.createFixture(upBarFixtureDef);

addChild(upBar);

upBarBody.setUserData(upBar);

}

这里添加了上下2部分滑块,中间留出空隙,让小鸟可以通过。

最后,我们需要碰撞检测

@Override

public void beginContact(Contact contact) {

if (contact.getFixtureA().getBody().getUserData() == bird

|| contact.getFixtureB().getBody().getUserData() == bird) {

stopGame();

handler.sendEmptyMessage(0);

}

}

大概简单的FlyppyBird已经完成。最后上传一下源码,供各位参考!

http://download.csdn.net/download/kay_wyong/7056443

cocos2d android开发,Cocos2d android(一个钟点学会FlyppyBird开发)相关推荐

  1. 野火stm32开发板给定一个脉冲程序_STM32开发板哪个好,推荐一款高性价比stm32MP157开发板...

    一款能跑Linux的STM32开发板: 一款既可以玩Linux又可以玩单片机的开发板: 一款可同时学习A7和M4的双核异构开发板: 一款支持最新的Linux 5.4.31系统和u-boot 20200 ...

  2. 基于Android平台的个人日历的设计与开发

    基于Android平台的个人日历的设计与开发 摘要 个人日历是基于Android平台开发的,运行在Android手机平台的个人日程管理软件.本文是对基于Android平台的个人日历的设计与开发. 首先 ...

  3. 《团队开发一(求一个数组的连续的子数组之和的最大值)》

    <团队开发一(求一个数组的连续的子数组之和的最大值)> (1)设计思想:一般的,求一个数组的最大子数组之和即是按数组顺序依次让前几个数的和与下一个数进行比较,设一变量来装每次比较后的较大的 ...

  4. 《Linux操作系统 - RK3288开发笔记》第2章 G-3288-02开发环境搭建

    2.1开发环境 Windows 下有很多虚拟机软件,目前市面上流行的有 VMware 和 VirtualBox. VMware 分为收费专业版 Workstation Pro 和非商用免费版 Work ...

  5. 一个帖子学会Android开发四大组件

    注:本文来自"友盟杯",仅在此阅读,学习 这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解 二.Service详解 三.Broadcast Re ...

  6. 用MUI花两天时间快速开发『One·一个』App,兼容Android、iOS双平台 1

    『One·一个』App 线上开源地址 App下载地址 MUI在线文档 以下所有 API 均由产品公司自身提供,本人皆从网络获取.获取与共享之行为或有侵犯产品权益的嫌疑.若被告知需停止共享与使用,本人会 ...

  7. 14天学会安卓开发(第一天)Android架构与环境搭建

    14天学会安卓开发 作者:神秘的N (英文名  corder_raine) 联系方式:369428455(反馈) 交流群 :284552167(示例,原文档下载) 版权为作者所有,如有转载请注明出处 ...

  8. 树莓派Android Things物联网开发:创建一个Things项目

    [转载请注明出处:http://blog.csdn.net/leytton/article/details/77854144] <树莓派Android Things物联网开发>系列文章专栏 ...

  9. 做简单的android 软件推荐,Android_适用于Android开发的简单聊天软件,适用于android 开发。是一个简 - phpStudy...

    适用于Android开发的简单聊天软件 适用于android 开发.是一个简单的聊天软件,包括知识点,各个控件的运用(ExpandableListView,ViewPager,Spinner,Line ...

最新文章

  1. html 右侧滚动条,html中去掉textarea右侧滚动条和右下角拖拽
  2. clickhouse 同步mysql_ClickHouse和他的朋友们(11)MySQL实时复制之GTID模式
  3. 【2019.09.08】2019icpc南昌网络赛
  4. 【ANSYS命令流】通用后处理技术(一):读取结果文件
  5. 三星c9000刷android7.0,三星C9 Pro C9000官方原厂rom线刷包刷机包C9000ZCU1CRI1
  6. 手机变成投影仪 建筑穿上节能衣
  7. HTML表单基本结构
  8. 正则车牌号和新能源车牌
  9. C++笔记--Linux网络编程(15-0)-socket(供自查,文档说明)
  10. 第9章第24节:制作商业计划书的盈利模式幻灯片 [PowerPoint精美幻灯片实战教程]
  11. 此iphone尚未备份显示未连接服务器,iPhone 出现“尚未备份”的提示,如何取消?...
  12. activiti的流程事件
  13. [Java]窗口的跳转
  14. 一篇文章学会日志logback的使用
  15. 求助!沃尔沃S40 2.4i智雅限量版这款车怎么样,能不能买?
  16. 金融情感分析,股市预测(二)
  17. ACT游戏引擎设计及DEMO展示
  18. MATLAB学习之画图(一)
  19. 数据库中各表关联图及其说明_如何在图中思考:图论及其应用的说明性介绍
  20. HTML JS获取当前页面URL

热门文章

  1. Photoshop快捷键有时候会失效
  2. IDEA中出现 等于号、小于等于、大于等于、不等号的缩写
  3. 英雄黑客:一个试图提高物联网安全性的“义务警员”
  4. 初见ZBRUSH(2)
  5. 使用golang的mysql无法插入emoji表情的问题
  6. html5调用本地控件exe,网页上如何判断本地是否安装某个应用程序(js实现)
  7. 1019. 数字黑洞
  8. Firefox:曾经打破黑暗的产品
  9. [RK3568 Android11] 开发之系统永久隐藏导航栏
  10. Unixbench——跨平台跑分