Cocos2d-X的一个示例
来源:互联网 发布:上海万户网络 编辑:程序博客网 时间:2024/05/13 05:21
场景资源由Cocostudio示例项目导出.
#include "HelloWorldScene.h"#include "cocostudio/CocoStudio.h"#include "ui/CocosGUI.h"USING_NS_CC;Scene* HelloWorld::createScene(){ // 'scene' is an autorelease object auto scene = Scene::create(); // 'layer' is an autorelease object auto layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){ if ( !Layer::init() ) { return false; } // 初始化全局变量;m_fTime = 0.0f;m_bStart = false;m_bDead = false;m_fPercentage = 100.0f;m_fSpeed = 4.0f;m_fAttackDis = 120.0f;m_pGameScene = cocostudio::SceneReader::getInstance()->createNodeWithSceneFile("publish/FightScene.json");this->addChild(m_pGameScene);// 获取英雄节点;auto render = (cocostudio::ComRender *)(m_pGameScene->getChildByTag(10005)->getComponent("CCArmature"));// 将节点转换为Armature类型对象;auto pArmature = (cocostudio::Armature *)(render->getNode());// 播放“run”动画;pArmature->getAnimation()->play("run");m_bStart = true;// 创建关闭菜单项;//auto closeItem = MenuItemFont::create("End", this, menu_selector(HelloWorld::menuCloseCallback));//closeItem->setColor(Color3B(255, 255, 255));auto closeItem = MenuItemImage::create("CloseNormal.png","CloseSelected.png",CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));// 设置关闭菜单项的位置;auto visibleSize = Director::getInstance()->getVisibleSize();closeItem->setPosition(Vec2(visibleSize.width - closeItem->getContentSize().width/2, closeItem->getContentSize().height/2));// 添加菜单项;auto menu = Menu::create(closeItem, NULL);menu->setPosition(Vec2::ZERO);menu->setZOrder(4);this->addChild(menu);scheduleUpdate();return true; }void HelloWorld::menuCloseCallback(Ref* pSender){// 清理内存并退出游戏;cocostudio::ArmatureDataManager::getInstance()->purge();Director::getInstance()->getActionManager()->pauseAllRunningActions();cocostudio::GUIReader::getInstance()->purgeGUIReader();Director::getInstance()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)exit(0);#endif}void HelloWorld::animationEvent(cocostudio::Armature *pArmature, cocostudio::MovementEventType movementType, const char *movementID){// 获取右侧的怪物节点;auto render = (cocostudio::ComRender *)(m_pGameScene->getChildByTag(10006)->getComponent("CCArmature"));// 转换为Armature类型对象;auto pEnemy = (cocostudio::Armature *)(render->getNode());// 如果是动画播放完成;if (movementType == cocostudio::MovementEventType::COMPLETE){// 怪物播放death动画;pEnemy->getAnimation()->play("death");// 给怪物添加事件监听;pArmature->getAnimation()->setMovementEventCallFunc(NULL, NULL);// 记录B的死亡;m_bDead = true;}}void HelloWorld::update(float delta){// 判断是否是第一次更新;if (m_bStart){// 获取英雄节点;auto pHeroRender = (cocostudio::ComRender *)(m_pGameScene->getChildByTag(10005)->getComponent("CCArmature"));auto pHero = (cocostudio::Armature *)(pHeroRender->getNode());// 给英雄设置坐标;pHero->getParent()->setPositionX(pHero->getParent()->getPositionX() + m_fSpeed);// 获取怪物节点;auto pEnemyRender = (cocostudio::ComRender *)(m_pGameScene->getChildByTag(10006)->getComponent("CCArmature"));auto pEnemy = (cocostudio::Armature *)(pEnemyRender->getNode());// 计算两个armature的间隔,如果小于预设值,则执行英雄的攻击动作;if (ccpDistance(ccp(pHero->getParent()->getPositionX(), 0), ccp(pEnemy->getParent()->getPositionX(), 0)) < m_fAttackDis){// 执行攻击动作;pHero->getAnimation()->play("attack");// 添加帧事件监听;pHero->getAnimation()->setMovementEventCallFunc(this, movementEvent_selector(HelloWorld::animationEvent));m_bStart = false;// 标记已经开始;}}// 判断B是否死亡;if (m_bDead){// 获取ui界面;auto pUIRender = static_cast<cocostudio::ComRender *>(m_pGameScene->getChildByTag(10007)->getComponent("GUIComponent"));auto pUILayer = static_cast<cocos2d::ui::Widget *>(pUIRender->getNode());// 获取血条;auto pHPLoadingBar = static_cast<cocos2d::ui::LoadingBar *>(cocos2d::ui::Helper::seekWidgetByName(pUILayer, "hp02_LoadingBar"));// 获取魔法值;auto pMPLoadingBar = static_cast<cocos2d::ui::LoadingBar *>(cocos2d::ui::Helper::seekWidgetByName(pUILayer, "mp02_LoadingBar"));// 更新血条和魔法值;pHPLoadingBar->setPercent(m_fPercentage);pMPLoadingBar->setPercent(m_fPercentage);// 递减血量;m_fPercentage -= 2.0f;if (m_fPercentage < 0.0f){// 如果血条为空,注销掉帧刷新监听;unscheduleUpdate();}}}
0 0
- Cocos2d-X的一个示例
- SneakInput在cocos2d-x下的示例
- SneakInput在cocos2d-x下的示例
- cocos2d-x box2d 示例
- 【Daimn Cocos2d-x 】如何创建一个Cocos2d-x的项目.
- cocos2d-x做的一个圣诞节软件
- cocos2d-x 一个简单的游戏界面
- cocos2d-x-3.*的一个向下兼容性问题
- Cocos2d-x:制作一个动态的精灵
- Cocos2d-X开发一个简单的小游戏
- [cocos2d-x]CCHttpClient的一个bug
- [Cocos2d-x]创建一个新的HelloWorld
- 发一个基于Cocos2d-x的游戏
- COCOS2D-X示例项目解读
- cocos2d-x lua 示例Demo
- Cocos2d-x_一个简单的Cocos2d-x程序
- Cocos2d-x中Box2d示例无法运行的问题
- cocos2d-x LUA 2.x里tolua++的一个隐患
- 使用Gson解析json并且加载json中的网络图片
- X Window开发编程
- servlet必知细节(一)
- Managing Your App's Memory
- God Save the i-th Queen
- Cocos2d-X的一个示例
- Map集合
- 用C#进行ArcGIS 10 Engine 开发 - 安装配置和入门程序说明
- JAVA学习笔记(一)---单例模式与继承
- Vi 常用命令
- win7 linux配置jdk(windows 和 linux环境下)
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPoo!并讲解两者的区别和游戏中的用途!
- 数据结构---栈的链式实现
- hdu1081To The Max