// // RPGBattleMenu.cpp // OzgGameRPG // // Created by ozg on 14-4-6. // // #include "RPGBattleMenu.h" RPGBattleMenu::RPGBattleMenu() { } RPGBattleMenu::~RPGBattleMenu() { this->m_stringList->release(); this->m_parentNode->release(); this->m_playerData->release(); CCLog("RPGBattleMenu 释放"); } bool RPGBattleMenu::initWithParentNode(CCDictionary* stringList, CCNode* parentNode, RPGPlayer* playerData) { if(CCMenu::init()) { this->m_stringList = stringList; this->m_stringList->retain(); this->m_parentNode = parentNode; this->m_parentNode->retain(); this->m_playerData = playerData; this->m_playerData->retain(); this->setPosition(CCPointZero); CCTMXTiledMap *bgLayer = (CCTMXTiledMap*)this->m_parentNode->getChildByTag(kRPGBattleMenuTagBg); if(!bgLayer) { bgLayer = CCTMXTiledMap::create("battle_battlemenu_style1.tmx"); bgLayer->setPosition(ccp(750, 64)); bgLayer->setTag(kRPGBattleMenuTagBg); parentNode->addChild(bgLayer); } CCString *menuAttackStr = (CCString*)this->m_stringList->objectForKey("battle_playermenu_attack"); this->createMenuItem(830, 250, menuAttackStr, kRPGBattleMenuTagAttack); CCString *menuSkillStr = (CCString*)this->m_stringList->objectForKey("battle_playermenu_skill"); this->createMenuItem(830, 200, menuSkillStr, kRPGBattleMenuTagSkill); CCString *menuItemsStr = (CCString*)this->m_stringList->objectForKey("battle_playermenu_items"); this->createMenuItem(830, 150, menuItemsStr, kRPGBattleMenuTagItems); CCString *menuEscapeStr = (CCString*)this->m_stringList->objectForKey("battle_playermenu_escape"); this->createMenuItem(830, 100, menuEscapeStr, kRPGBattleMenuTagEscape); SimpleAudioEngine::sharedEngine()->playEffect("audio_battle_menu.wav"); return true; } return false; } RPGBattleMenu* RPGBattleMenu::createWithParentNode(CCDictionary* stringList, CCNode* parentNode, RPGPlayer* playerData) { RPGBattleMenu *obj = new RPGBattleMenu(); if(obj && obj->initWithParentNode(stringList, parentNode, playerData)) { obj->autorelease(); return obj; } CC_SAFE_DELETE(obj); return NULL; } void RPGBattleMenu::showMenu() { CCTMXTiledMap *bgLayer = (CCTMXTiledMap*)this->m_parentNode->getChildByTag(kRPGBattleMenuTagBg); bgLayer->setVisible(true); CCMenuItem *menuAttack = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagAttack); menuAttack->setVisible(true); CCMenuItem *menuSkill = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagSkill); menuSkill->setVisible(true); CCMenuItem *menuItems = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagItems); menuItems->setVisible(true); CCMenuItem *menuEscape = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagEscape); menuEscape->setVisible(true); } void RPGBattleMenu::hideMenu() { CCTMXTiledMap *bgLayer = (CCTMXTiledMap*)this->m_parentNode->getChildByTag(kRPGBattleMenuTagBg); bgLayer->setVisible(false); CCMenuItem *menuAttack = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagAttack); menuAttack->setVisible(false); CCMenuItem *menuSkill = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagSkill); menuSkill->setVisible(false); CCMenuItem *menuItems = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagItems); menuItems->setVisible(false); CCMenuItem *menuEscape = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagEscape); menuEscape->setVisible(false); } //private void RPGBattleMenu::createMenuItem(float x, float y, CCString *text, RPGBattleMenuTag tag) { CCMenuItemLabel *menuItems = (CCMenuItemLabel*)this->getChildByTag(tag); if(!menuItems) { CCLabelTTF *menuItemsLabel = CCLabelTTF::create(OzgCCUtility::generalString(text->getCString()).c_str(), "Arial", 28, CCSizeMake(120, 30), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter); CCMenuItemLabel *menuItems = CCMenuItemLabel::create(menuItemsLabel, this, menu_selector(RPGBattleMenu::onMenu)); menuItems->setPosition(ccp(x, y)); menuItems->setTag(tag); this->addChild(menuItems); } } void RPGBattleMenu::onMenu(cocos2d::CCObject *pObject) { CCMenuItem *menuItem = (CCMenuItem*)pObject; SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav"); switch (menuItem->getTag()) { case kRPGBattleMenuTagSkill: { CCLog("技能"); } break; case kRPGBattleMenuTagItems: { CCLog("道具"); } break; case kRPGBattleMenuTagEscape: { // CCLog("逃跑"); float success = CCRANDOM_0_1(); if(success >= 0.0 && success <= 0.5) { // CCLog("逃跑成功"); this->setEnabled(false); this->removeFromParentAndCleanup(true); ((RPGBattleSceneLayer*)this->m_parentNode)->goToMap(); } else { ((RPGBattleSceneLayer*)this->m_parentNode)->showMsg((CCString*)this->m_stringList->objectForKey("escape_fail")); //重置进度条 this->m_playerData->m_progress = 0.0; CCProgressTimer *battleProgress = (CCProgressTimer*)this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagPlayerProgress + this->m_playerData->m_dataId); battleProgress->setPercentage(this->m_playerData->m_progress); ((RPGBattleSceneLayer*)this->m_parentNode)->scheduleUpdate(); CCTMXTiledMap *bgLayer = (CCTMXTiledMap*)this->m_parentNode->getChildByTag(kRPGBattleMenuTagBg); bgLayer->removeFromParentAndCleanup(true); this->removeFromParentAndCleanup(true); } } break; case kRPGBattleMenuTagCancel: { CCLog("取消"); this->showMenu(); CCMenuItem *menuCancel = (CCMenuItem*)this->getChildByTag(kRPGBattleMenuTagCancel); menuCancel->removeFromParentAndCleanup(true); switch (this->m_selectedMenuTag) { case kRPGBattleMenuTagAttack: ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false); ((RPGBattleSceneLayer*)this->m_parentNode)->cancelAllSelected(); break; // default: // break; } } break; default: { CCLog("攻击"); this->hideMenu(); this->m_selectedMenuTag = kRPGBattleMenuTagAttack; CCMenuItemSprite *menuCancel = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGBattleMenu::onMenu)); menuCancel->setPosition(ccp(75, 660)); menuCancel->setTag(kRPGBattleMenuTagCancel); menuCancel->setScale(0.75); this->addChild(menuCancel); ((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(true); } break; } }