- 浏览: 929000 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
itzhongyuan:
java Random类详解 -
david_je:
你好,我看到你在C里面回调JAVA里面的方法是在native里 ...
Android NDK开发(1)----- Java与C互相调用实例详解 -
fykyx521:
请求锁是在 oncreate 释放实在ondestroy?? ...
Android如何保持程序一直运行 -
aduo_vip:
不错,总结得好!
Android读取assets目录下的资源 -
f839903061:
给的网址很给力哦!
Android 4.0.1 源码下载,编译和运行
第四节:怎样发射一些子弹
在HelloWorld.cpp文件中的init方法中添加
在HelloWorldScene.h文件中声明
在HelloWorldScene.cpp文件中实现该方法
第五节:检测碰撞
我们要为两个精灵添加tag,setTag和getTag
在文件中HelloWorldScene.h添加以下两个方法 两个精灵的集合
// in init() 在init方法中 实例化精灵数组
// Initialize arrays
修改 addTarget() to add a new target to targets array, and set its tag to be 1.
// Add to targets array
target->setTag(1);
_targets->addObject(target);
修改ccTouchesEnded()方法
Modify ccTouchesEnded() to add a new bullet to bullets array, and set its tag to be 2.
// Add to projectiles array
modify spriteMoveFinished()
在头文件中声明void update(ccTime dt)方法
每一帧检测碰撞
调用这个方法
第六节 怎么播放声音
HelloWorldScene.cpp中添加
#include "SimpleAudioEngine.h"
在init().方法中
在in ccTouchesEnded() 方法中
第七节 :加入场景跳转
GameOverScene.h:
GameOverScene.cpp:
HelloWorldScene.h:
And Initialize it in HelloWorld::HelloWorld(),
After removeChild(target) in the targetsToDelete for loop of HelloWorld::update(), add the codes below to check the win condition.
Add the codes below to check the failure condition in the “if (sprite->getTag() == 1)” conditional of spriteMoveFinished(),
最好在android.mk文件中加入
在HelloWorld.cpp文件中的init方法中添加
this->setIsTouchEnabled(true); //使可触摸
在HelloWorldScene.h文件中声明
void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
在HelloWorldScene.cpp文件中实现该方法
void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event){ // Choose one of the touches to work with 获取坐标点 CCTouch* touch = (CCTouch*)( touches->anyObject() ); CCPoint location = touch->locationInView(touch->view()); location = CCDirector::sharedDirector()->convertToGL(location); // Set up initial location of projectile CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCSprite *projectile = CCSprite::spriteWithFile("Projectile.png",CCRectMake(0, 0, 20, 20)); projectile->setPosition( ccp(20, winSize.height/2) ); // Determinie offset of location to projectile int offX = location.x - projectile->getPosition().x; int offY = location.y - projectile->getPosition().y; // Bail out if we are shooting down or backwards if (offX <= 0) return; // Ok to add now - we've double checked position this->addChild(projectile); // Determine where we wish to shoot the projectile to int realX = winSize.width + (projectile->getContentSize().width/2); float ratio = (float)offY / (float)offX; int realY = (realX * ratio) + projectile->getPosition().y; CCPoint realDest = ccp(realX, realY); // Determine the length of how far we're shooting int offRealX = realX - projectile->getPosition().x; int offRealY = realY - projectile->getPosition().y; float length = sqrtf((offRealX * offRealX) + (offRealY*offRealY)); float velocity = 480/1; // 480pixels/1sec float realMoveDuration = length/velocity; // Move projectile to actual endpoint projectile->runAction( CCSequence::actions( CCMoveTo::actionWithDuration(realMoveDuration, realDest), CCCallFuncN::actionWithTarget(this, callfuncN_selector(HelloWorld::spriteMoveFinished)), NULL) ); }
第五节:检测碰撞
我们要为两个精灵添加tag,setTag和getTag
在文件中HelloWorldScene.h添加以下两个方法 两个精灵的集合
protected: cocos2d::CCMutableArray<cocos2d::CCSprite*> *_targets; cocos2d::CCMutableArray<cocos2d::CCSprite*> *_projectiles;
// in init() 在init方法中 实例化精灵数组
// Initialize arrays
_targets = new CCMutableArray<CCSprite*>; _projectiles = new CCMutableArray<CCSprite*>; HelloWorld::~HelloWorld(){ //在析构函数中 释放内存操作 if (_targets){ _targets->release(); _targets = NULL; } if (_projectiles){ _projectiles->release(); _projectiles = NULL; } // cpp don't need to call super dealloc // virtual destructor will do this } HelloWorld::HelloWorld():_targets(NULL),_projectiles(NULL){ }
修改 addTarget() to add a new target to targets array, and set its tag to be 1.
// Add to targets array
target->setTag(1);
_targets->addObject(target);
修改ccTouchesEnded()方法
Modify ccTouchesEnded() to add a new bullet to bullets array, and set its tag to be 2.
// Add to projectiles array
projectile->setTag(2); _projectiles->addObject(projectile);
modify spriteMoveFinished()
void HelloWorld::spriteMoveFinished(CCNode* sender){ CCSprite *sprite = (CCSprite *)sender; this->removeChild(sprite, true); if (sprite->getTag() == 1){ // target _targets->removeObject(sprite); } else if (sprite->getTag() == 2){ // projectile _projectiles->removeObject(sprite); } }
在头文件中声明void update(ccTime dt)方法
每一帧检测碰撞
void HelloWorld::update(ccTime dt){ CCMutableArray<CCSprite*> *projectilesToDelete = new CCMutableArray<CCSprite*>; CCMutableArray<CCSprite*>::CCMutableArrayIterator it, jt; for (it = _projectiles->begin(); it != _projectiles->end(); it++){ CCSprite *projectile =*it; CCRect projectileRect = CCRectMake( projectile->getPosition().x - (projectile->getContentSize().width/2), projectile->getPosition().y - (projectile->getContentSize().height/2), projectile->getContentSize().width, projectile->getContentSize().height); CCMutableArray<CCSprite*>*targetsToDelete = new CCMutableArray<CCSprite*>; for (jt = _targets->begin(); jt != _targets->end(); jt++){ CCSprite *target =*jt; CCRect targetRect = CCRectMake( target->getPosition().x - (target->getContentSize().width/2), target->getPosition().y - (target->getContentSize().height/2), target->getContentSize().width, target->getContentSize().height); if (CCRect::CCRectIntersectsRect(projectileRect, targetRect)) { targetsToDelete->addObject(target); } } for (jt = targetsToDelete->begin(); jt != targetsToDelete->end(); jt++){ CCSprite *target =*jt; _targets->removeObject(target); this->removeChild(target, true); } if (targetsToDelete->count() >0){ projectilesToDelete->addObject(projectile); } targetsToDelete->release(); } for (it = projectilesToDelete->begin(); it != projectilesToDelete->end(); it++){ CCSprite* projectile =*it; _projectiles->removeObject(projectile); this->removeChild(projectile, true); } projectilesToDelete->release(); }
调用这个方法
this->schedule( schedule_selector(HelloWorld::update) );
第六节 怎么播放声音
HelloWorldScene.cpp中添加
#include "SimpleAudioEngine.h"
在init().方法中
CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background-music-aac.wav", true);
在in ccTouchesEnded() 方法中
CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pew-pew-lei.wav");
第七节 :加入场景跳转
GameOverScene.h:
#ifndef _GAME_OVER_SCENE_H_ #define _GAME_OVER_SCENE_H_ #include "cocos2d.h" class GameOverLayer : public cocos2d::CCLayerColor{ public: GameOverLayer():_label(NULL) {}; virtual ~GameOverLayer(); bool init(); LAYER_NODE_FUNC(GameOverLayer); void gameOverDone(); CC_SYNTHESIZE_READONLY(cocos2d::CCLabelTTF*, _label, Label); }; class GameOverScene : public cocos2d::CCScene{ public: GameOverScene():_layer(NULL) {}; ~GameOverScene(); bool init(); SCENE_NODE_FUNC(GameOverScene); CC_SYNTHESIZE_READONLY(GameOverLayer*, _layer, Layer); }; #endif // _GAME_OVER_SCENE_H_
GameOverScene.cpp:
#include "GameOverScene.h" #include "HelloWorldScene.h" using namespace cocos2d; bool GameOverScene::init(){ if( CCScene::init() ){ this->_layer = GameOverLayer::node(); this->_layer->retain(); this->addChild(_layer); return true; }else{ return false; } } GameOverScene::~GameOverScene(){ if (_layer){ _layer->release(); _layer = NULL; } } bool GameOverLayer::init(){ if ( CCLayerColor::initWithColor( ccc4(255,255,255,255) ) ) { CCSize winSize = CCDirector::sharedDirector()->getWinSize(); this->_label = CCLabelTTF::labelWithString("","Artial", 32); _label->retain(); _label->setColor( ccc3(0, 0, 0) ); _label->setPosition(ccp(winSize.width/2, winSize.height/2)); this->addChild(_label); this->runAction( CCSequence::actions( CCDelayTime::actionWithDuration(3), CCCallFunc::actionWithTarget(this, callfunc_selector(GameOverLayer::gameOverDone)), NULL)); return true; }else{ return false; } } void GameOverLayer::gameOverDone(){ CCDirector::sharedDirector()->replaceScene(HelloWorld::scene()); } GameOverLayer::~GameOverLayer(){ if (_label){ _label->release(); _label = NULL; } }
HelloWorldScene.h:
protected: int _projectilesDestroyed;
And Initialize it in HelloWorld::HelloWorld(),
_projectilesDestroyed = 0;
After removeChild(target) in the targetsToDelete for loop of HelloWorld::update(), add the codes below to check the win condition.
_projectilesDestroyed++; if (_projectilesDestroyed > 30){ GameOverScene *gameOverScene = GameOverScene::node(); gameOverScene->getLayer()->getLabel()->setString("You Win!"); CCDirector::sharedDirector()->replaceScene(gameOverScene); }
Add the codes below to check the failure condition in the “if (sprite->getTag() == 1)” conditional of spriteMoveFinished(),
GameOverScene *gameOverScene = GameOverScene::node(); gameOverScene->getLayer()->getLabel()->setString("You Lose :["); CCDirector::sharedDirector()->replaceScene(gameOverScene);
最好在android.mk文件中加入
LOCAL_SRC_FILES := AppDelegate.cpp \ HelloWorldScene.cpp \ GameOverScene.cpp
发表评论
-
cocos2d-x学习之自动内存管理和常见宏
2013-07-29 15:41 9081.自动内存管理 1)概述 C++语言默认是 ... -
cocos2dx中利用xcode 调用java中的函数
2013-07-29 11:36 25251. 先把cocos2dx根目录中的 /Users/zhaos ... -
cocos2dx(v2.x)与(v1.x)的一些常用函数区别讲解
2013-07-29 10:35 1109第一个改动: CCLayer初始化 自定义Layer,类名 ... -
xcode与eclipse整合cocos2dx
2013-07-29 10:32 1220文档xcode版本是 204 1. 在xcode中创建coc ... -
粒子效果
2012-05-14 17:12 999#ifndef __HELLOWORLD_SCENE_H__ ... -
cocos2dx 官网的小游戏 1
2012-05-12 18:07 1490cocos2dx 官网的小游戏 第一节: 创建各种平台的工程 ... -
两个eclipse 结合
2012-05-12 16:45 1104对于mac 平台,我使用的是两个eclipse来编写coc ... -
解析Helloworld项目
2012-05-12 11:08 3230在cocos2dx中的helloworld目录中 andro ... -
Cocos2d-x 0120 环境搭建
2012-05-12 09:37 1637从今天开始研究cocos2dx 游戏引擎 1.准备需要的 ... -
在android 上开发弹球例子 cocos2dx+box2d
2012-02-29 17:16 2559create-android-project.sh 批处理新 ... -
在cocos2d里面如何使用物理引擎box2d:弹球
2012-02-29 12:48 1340这个教程的目的就是让 ... -
cocos2d-x -物理引擎box2d(1)
2012-02-28 16:20 1662在游戏中我们经常要加入物理碰撞等和物理有关的内容,在游戏中加入 ... -
Cocos2d-x 结合Box2D开发Android游戏配置方法
2012-02-28 14:46 2627先通过 create-android-projec ... -
cocos2dx编译HelloWorld
2011-12-02 12:55 1721到cocos2d下载 cocos2d-1.0.1-x-0.9 ... -
让Cocos2d-x实现全屏等比缩放适配Android各种分辨率 续
2011-10-07 13:02 4911http://www.cnblogs.com/yangws/a ... -
Java如何将图片打包到jar中
2011-08-04 00:03 3255Eclipse中使用导出Jar包后 ...
相关推荐
Cocos2d-x是一款强大的开源游戏开发框架,主要用于构建2D游戏、演示程序和其他图形交互应用。它基于C++,同时提供了Lua和JavaScript的绑定,使得开发者可以选择自己熟悉的语言进行游戏开发。本资源是一个基于cocos2d...
【cocos2d 切水果游戏】是一款基于cocos2d和box2d游戏引擎开发的手机游戏,模仿了流行的“切西瓜”玩法。在这个游戏中,玩家需要通过滑动屏幕来切割屏幕上飞过的各种水果,尽可能多地得分,同时避免切割到炸弹等负面...
以上就是使用Cocos2d Android开发“打飞机”小游戏涉及的一些核心知识点。通过深入理解和实践这些概念,你将能够创建出具有专业品质的2D游戏。当然,实际项目可能还需要根据需求涉及更多细节,如UI设计、网络对战...
《RunOrDie小游戏基于Cocos2d-x的实现详解》 Cocos2d-x是一款开源的游戏开发框架,它采用C++作为主要编程语言,同时支持Lua和JavaScript等脚本语言,使得开发者能够快速构建高性能的2D游戏。本文将深入探讨如何使用...
总的来说,"躲便便"小游戏是学习Cocos2d的绝佳起点,它将带你熟悉2D游戏开发的基本流程,并帮助你掌握这个强大框架的一些核心特性。通过这个项目,你可以锻炼自己的编程技巧,为未来开发更复杂的游戏打下坚实基础。
这个压缩包“cocos2d-x-cocos2d-x-2.2.2.zip”包含了cocos2d-x 的2.2.2版本,该版本是cocos2d-x发展中的一个重要里程碑,它提供了许多改进和优化,使得开发者能够更加高效地创建2D游戏和应用。 在cocos2d-x 2.2.2中...
《cocos2d-x小游戏小狗快跑源码详解》 cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于2D游戏的开发。它基于C++,支持多种编程语言,包括JavaScript和Lua,使得开发者能够在iOS、Android、Windows等多个...
Cocos2d-x是一款流行的开源跨平台2D游戏开发框架,用C++编写,支持iOS、Android、Windows等多平台。本源码分享是基于Cocos2d-x 3.8版本实现的一个三消游戏,三消游戏,又称消消乐,是一种常见的休闲益智游戏类型,...
【cocos2d-x3.9 数独小游戏】是一个基于cocos2d-x 3.9版本开发的经典数独游戏源代码,适用于初学者进行学习和实践。cocos2d-x是一个跨平台的2D游戏开发框架,它采用C++语言,支持多种操作系统,如iOS、Android、...
Cocos2d-x是一个广泛使用的开源游戏引擎,尤其适合2D游戏开发,它支持多种编程语言,包括C++、Lua和JavaScript。 首先,我们需要了解Cocos2d-x的基本架构。Cocos2d-x包含了一系列的类,如Scene(场景)、Layer(层...
《Cocos2d-x游戏引擎实战开发炸弹超人》是一个基于Cocos2d-x框架的2D游戏开发教程,旨在帮助开发者深入理解并熟练运用这一强大的游戏引擎。Cocos2d-x是一个开源、跨平台的2D游戏开发工具,它支持iOS、Android、...
《Cocos2d-x小游戏Don'tCross可执行文件详解》 Cocos2d-x是一款开源的游戏开发框架,它基于C++,广泛应用于2D游戏、交互式图书、演示和其他图形密集型应用的开发。Don'tCross是利用Cocos2d-x引擎开发的一款小游戏,...
用Cocos2d-x引擎c++语言开发的小游戏 (初学者 , 大学课程设计).zip 用Cocos2d-x引擎c++语言开发的小游戏 (初学者 , 大学课程设计).zip 适合学习/练手、毕业设计、课程设计、期末/期中/大作业、工程实训、相关项目/...
【cocos2d-x 游戏小demo】是一款基于cocos2d-x框架开发的简易游戏示例,主要展示了如何运用这个强大的2D游戏引擎来创建一个基础的魔塔类游戏。cocos2d-x是一个跨平台的游戏开发库,支持iOS、Android、Windows等多...
首先,cocos2d-x是一个跨平台的2D游戏开发框架,基于C++编写,广泛应用于iOS、Android、Windows等多个操作系统。它的强大之处在于提供了一整套易用的API,简化了游戏开发过程,使得开发者能够专注于游戏逻辑而不是...
这个压缩包中的“Cocos2d-X 3D跑酷小游戏”提供了游戏的完整代码示例和游戏运行的视频,对于学习Cocos2d-X以及3D游戏开发的开发者来说,是一个宝贵的资源。 Cocos2d-X基于C++,同时也支持Lua和JavaScript,使其具有...
Cocos2d-iPhone是一个广泛使用的2D游戏开发框架,专为iOS设备(如iPhone和iPad)设计。这个开源项目让开发者能够轻松地创建高质量的游戏、应用和交互式内容,而无需深入理解底层图形和物理编程。"cocos2d-iphone-2.0...
在这个名为“小鸟闯管道”的2D小游戏项目中,我们能够深入理解CocosCreator的核心功能,包括其丰富的组件系统、JavaScript脚本的运用以及2D游戏设计的基本理念。 首先,CocosCreator 2.3.1版本引入了许多优化和新...
Ray Wenderlich的《Cocos2d SimpleGame》,被认为是cocos2d的初学者最好的教程,这本书被Cocos2D-X团队从objective-c转化到了c++版,并发布在了github上。在此感谢Ray Wenderlich的慷慨相助。 源代码是在cocos2d-x ...
《使用cocos2d-x-2.0-2.0.4开发的简单跨平台益智类魔塔小游戏》 cocos2d-x是一个开源的游戏开发框架,它基于C++,支持多平台,包括iOS、Android、Windows以及Mac OS等。在本项目中,开发者利用cocos2d-x 2.0.4版本...