From 241e597718697c5722c2441c4f8b8f62d12f638d Mon Sep 17 00:00:00 2001 From: ozg Date: Thu, 10 Apr 2014 22:32:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=9C=B0=E5=9B=BE=E8=8F=9C?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Classes/RPGBaseSceneLayer.cpp | 2 +- Classes/RPGBaseSceneLayer.h | 9 + Classes/RPGBattlePlayerSprite.cpp | 28 +- Classes/RPGBattlePlayerSprite.h | 3 + Classes/RPGBattleSceneLayer.cpp | 33 +- Classes/RPGBattleSceneLayer.h | 2 + Classes/RPGComputingResults.cpp | 78 ++++ Classes/RPGComputingResults.h | 30 ++ Classes/RPGData.h | 9 +- Classes/RPGMapChoicePlayerMenuLayer.cpp | 91 ++++ Classes/RPGMapChoicePlayerMenuLayer.h | 55 +++ Classes/RPGMapEquipMenuLayer.cpp | 101 +++++ Classes/RPGMapEquipMenuLayer.h | 49 ++ Classes/RPGMapItemsMenuLayer.cpp | 101 +++++ Classes/RPGMapItemsMenuLayer.h | 49 ++ Classes/RPGMapMenuLayer.cpp | 425 ++---------------- Classes/RPGMapMenuLayer.h | 44 +- Classes/RPGMapSkillMenuLayer.cpp | 101 +++++ Classes/RPGMapSkillMenuLayer.h | 49 ++ Classes/RPGMapStatusMenuLayer.cpp | 361 +++++++++++++++ Classes/RPGMapStatusMenuLayer.h | 71 +++ Resources/audio_battle_attack1.wav | Bin 0 -> 1758 bytes Resources/audio_battle_attack2.wav | Bin 0 -> 5060 bytes Resources/db.sys | Bin 327680 -> 327680 bytes Resources/scene_map_cns.plist | 4 +- Resources/select_player_style1.tmx | 16 + proj.ios/OzgGameRPG.xcodeproj/project.pbxproj | 48 ++ .../xcshareddata/OzgGameRPG.xccheckout | 2 +- .../UserInterfaceState.xcuserstate | Bin 66349 -> 69018 bytes .../UserInterfaceState.xcuserstate | Bin 54855 -> 60001 bytes 30 files changed, 1323 insertions(+), 438 deletions(-) create mode 100644 Classes/RPGComputingResults.cpp create mode 100644 Classes/RPGComputingResults.h create mode 100644 Classes/RPGMapChoicePlayerMenuLayer.cpp create mode 100644 Classes/RPGMapChoicePlayerMenuLayer.h create mode 100644 Classes/RPGMapEquipMenuLayer.cpp create mode 100644 Classes/RPGMapEquipMenuLayer.h create mode 100644 Classes/RPGMapItemsMenuLayer.cpp create mode 100644 Classes/RPGMapItemsMenuLayer.h create mode 100644 Classes/RPGMapSkillMenuLayer.cpp create mode 100644 Classes/RPGMapSkillMenuLayer.h create mode 100644 Classes/RPGMapStatusMenuLayer.cpp create mode 100644 Classes/RPGMapStatusMenuLayer.h create mode 100755 Resources/audio_battle_attack1.wav create mode 100755 Resources/audio_battle_attack2.wav create mode 100644 Resources/select_player_style1.tmx diff --git a/Classes/RPGBaseSceneLayer.cpp b/Classes/RPGBaseSceneLayer.cpp index 265a762..5cfbede 100755 --- a/Classes/RPGBaseSceneLayer.cpp +++ b/Classes/RPGBaseSceneLayer.cpp @@ -38,7 +38,7 @@ void savePlayerData(CppSQLite3DB* db, CCArray* playerDataList) { RPGPlayer *playerData = (RPGPlayer*)playerDataList->objectAtIndex(i); - CCString *sql = CCString::createWithFormat("update player set max_hp = %i, hp = %i, max_mp = %i, mp = %i, attack = %f, defense = %f, speed = %f, magic_attack = %f, magic_defense = %f, items_id_arms = %i, items_id_armor = %i, level = %i, skill = '%s', next_exp = %i where id = %i", playerData->m_maxHP, playerData->m_HP, playerData->m_maxMP, playerData->m_MP, playerData->m_attack, playerData->m_defense, playerData->m_speed, playerData->m_magicAttack, playerData->m_magicDefense, playerData->m_itemsIdArms, playerData->m_itemsIdArmor, playerData->m_level, playerData->m_skill.c_str(), playerData->m_nextExp, playerData->m_dataId); + CCString *sql = CCString::createWithFormat("update player set max_hp = %i, hp = %i, max_mp = %i, mp = %i, attack = %f, defense = %f, speed = %f, skill_attack = %f, skill_defense = %f, items_id_arms = %i, items_id_armor = %i, level = %i, skill = '%s', next_exp = %i where id = %i", playerData->m_maxHP, playerData->m_HP, playerData->m_maxMP, playerData->m_MP, playerData->m_attack, playerData->m_defense, playerData->m_speed, playerData->m_skillAttack, playerData->m_skillDefense, playerData->m_itemsIdArms, playerData->m_itemsIdArmor, playerData->m_level, playerData->m_skill.c_str(), playerData->m_nextExp, playerData->m_dataId); db->execDML(sql->getCString()); } } diff --git a/Classes/RPGBaseSceneLayer.h b/Classes/RPGBaseSceneLayer.h index ee8afd0..620c3bc 100755 --- a/Classes/RPGBaseSceneLayer.h +++ b/Classes/RPGBaseSceneLayer.h @@ -27,6 +27,15 @@ using namespace CocosDenshion; //获取player列表 #define PLAYER_QUERY "select * from player order by id asc" +//技能的属性 +enum RPGSkillAttr +{ + kRPGSkillAttrNormal = 1, //通常属性 + kRPGSkillAttrFire = 2, //火 + kRPGSkillAttrIce = 3, //冰 + kRPGSkillAttrNone = 10, //无 +}; + void addLab(CCNode* parentNode, int tag, CCString* text, CCPoint point); //增加状态界面的lab void addLab(CCNode* parentNode, int tag, CCString* text, float fontSize, CCPoint point); void addLab(CCNode* parentNode, int tag, CCString* text, float fontSize, CCTextAlignment textAlignment, CCPoint point); diff --git a/Classes/RPGBattlePlayerSprite.cpp b/Classes/RPGBattlePlayerSprite.cpp index e7c8f7f..5fe80ed 100644 --- a/Classes/RPGBattlePlayerSprite.cpp +++ b/Classes/RPGBattlePlayerSprite.cpp @@ -7,6 +7,7 @@ // #include "RPGBattlePlayerSprite.h" +#include "RPGBattleSceneLayer.h" #include "OzgCCUtility.h" RPGBattlePlayerSprite::RPGBattlePlayerSprite() @@ -108,9 +109,7 @@ bool RPGBattlePlayerSprite::initWithPlayerData(RPGPlayer* data) this->m_isSelected = false; - CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesNormal, 0.2); - CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation)); - this->runAction(animate); + this->animNormal(); return true; } @@ -154,3 +153,26 @@ void RPGBattlePlayerSprite::selected(bool isSelected) } } + +void RPGBattlePlayerSprite::animNormal() +{ + this->stopAllActions(); + + CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesNormal, 0.2); + CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation)); + this->runAction(animate); +} + +void RPGBattlePlayerSprite::animAttack(CCObject* target, cocos2d::CCObject *targetObjData) +{ + this->stopAllActions(); + + SimpleAudioEngine::sharedEngine()->playEffect("audio_battle_attack1.wav"); + + CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesAttack, 0.15); + + //挥动武器的动作跟上面的一起执行 + //waving + + this->runAction(CCSequence::createWithTwoActions(CCAnimate::create(animation), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackResults), targetObjData))); +} diff --git a/Classes/RPGBattlePlayerSprite.h b/Classes/RPGBattlePlayerSprite.h index d0c1109..ccffff6 100644 --- a/Classes/RPGBattlePlayerSprite.h +++ b/Classes/RPGBattlePlayerSprite.h @@ -50,6 +50,9 @@ public: void selected(bool isSelected); + void animNormal(); + void animAttack(CCObject* target, CCObject *targetObjData); + }; #endif /* defined(__OzgGameRPG__RPGBattlePlayerSprite__) */ diff --git a/Classes/RPGBattleSceneLayer.cpp b/Classes/RPGBattleSceneLayer.cpp index 4e2660d..669fa3b 100755 --- a/Classes/RPGBattleSceneLayer.cpp +++ b/Classes/RPGBattleSceneLayer.cpp @@ -8,6 +8,7 @@ #include "RPGBattleSceneLayer.h" #include "RPGLoadingSceneLayer.h" +#include "RPGComputingResults.h" #define MONSTER_QUERY "select * from monster where map_id = %i order by random() limit 1" @@ -92,8 +93,8 @@ bool RPGBattleSceneLayer::init() playerData->m_attack = query.getFloatField("attack"); playerData->m_defense = query.getFloatField("defense"); playerData->m_speed = query.getFloatField("speed"); - playerData->m_magicAttack = query.getFloatField("magic_attack"); - playerData->m_magicDefense = query.getFloatField("magic_defense"); + playerData->m_skillAttack = query.getFloatField("skill_attack"); + playerData->m_skillDefense = query.getFloatField("skill_defense"); playerData->m_level = query.getIntField("level"); playerData->m_name = query.getStringField("name_cns"); playerData->m_nextExp = query.getIntField("next_exp"); @@ -195,8 +196,8 @@ bool RPGBattleSceneLayer::init() monsterData->m_attack = query.getFloatField("attack"); monsterData->m_defense = query.getFloatField("defense"); monsterData->m_speed = query.getFloatField("speed"); - monsterData->m_magicAttack = query.getFloatField("magic_attack"); - monsterData->m_magicDefense = query.getFloatField("magic_defense"); + monsterData->m_skillAttack = query.getFloatField("skill_attack"); + monsterData->m_skillDefense = query.getFloatField("skill_defense"); monsterData->m_exp = query.getIntField("exp"); monsterData->m_skill = query.getStringField("skill"); monsterData->m_tex = query.getStringField("tex"); @@ -372,6 +373,8 @@ void RPGBattleSceneLayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { // CCLog("攻击"); + SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav"); + //检测选中的player for (int i = 0; i < this->m_playerList->count(); i++) { @@ -541,27 +544,25 @@ void RPGBattleSceneLayer::cancelAllSelected() void RPGBattleSceneLayer::attack(cocos2d::CCObject *attackObjData, cocos2d::CCObject *targetObjData) { - CCLog("aaa"); - //发起攻击的对象 if(dynamic_cast(attackObjData) != NULL) { - + RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)this->getChildByTag(kRPGBattleSceneLayerTagPlayer + ((RPGPlayer*)attackObjData)->m_dataId); + player->animAttack(this, targetObjData); } else if(dynamic_cast(attackObjData) != NULL) { } - //受到攻击的对象 - if(dynamic_cast(targetObjData) != NULL) - { - - } - else if(dynamic_cast(targetObjData) != NULL) - { - - } +} + +void RPGBattleSceneLayer::attackResults(cocos2d::CCNode *sender, void *data) +{ + SimpleAudioEngine::sharedEngine()->playEffect("audio_battle_attack2.wav"); + + //计算伤害值 + } diff --git a/Classes/RPGBattleSceneLayer.h b/Classes/RPGBattleSceneLayer.h index 78bad08..2d4c17e 100755 --- a/Classes/RPGBattleSceneLayer.h +++ b/Classes/RPGBattleSceneLayer.h @@ -13,6 +13,7 @@ #include "RPGBattlePlayerSprite.h" #include "RPGBattleMonsterSprite.h" #include "RPGBattleMenu.h" +#include "RPGComputingResults.h" #include "OzgCCUtility.h" enum RPGBattleSceneLayerTag @@ -87,6 +88,7 @@ public: void cancelAllSelected(); //取消全部选中的对象 void attack(CCObject* attackObjData, CCObject* targetObjData); //player或怪物执行攻击 + void attackResults(CCNode* sender, void* data); //计算攻击后的结果 }; diff --git a/Classes/RPGComputingResults.cpp b/Classes/RPGComputingResults.cpp new file mode 100644 index 0000000..38b327b --- /dev/null +++ b/Classes/RPGComputingResults.cpp @@ -0,0 +1,78 @@ +// +// RPGComputingResults.cpp +// OzgGameRPG +// +// Created by ozg on 14-4-8. +// +// + +#include "RPGComputingResults.h" +#include "OzgCCUtility.h" + +int RPGComputingResults::attackResults(float attack, float defense) +{ + attack = attack / 0.25; + attack = OzgCCUtility::randomFloat(attack - (attack * 0.05), attack + (attack * 0.05)); + + defense = defense / 0.5; + defense = OzgCCUtility::randomFloat(defense - (defense * 0.025), defense + (defense * 0.025)); + + int results = (int)(attack - defense); + if(results < 0) + results = 0; + + return results; +} + +int RPGComputingResults::skillAttackResults(float playerSkillAttack, float skillAttack, RPGSkillAttr attackAttr, float skillDefense, RPGSkillAttr defenseAttr) +{ + int results = RPGComputingResults::attackResults(playerSkillAttack, skillDefense); + + skillAttack = skillAttack / 0.25; + skillAttack = OzgCCUtility::randomFloat(skillAttack - (skillAttack * 0.05), skillAttack + (skillAttack * 0.05)); + results = results + (int)skillAttack; + + //下面是属性处理 + //火克冰 + if(attackAttr == kRPGSkillAttrFire && defenseAttr == kRPGSkillAttrIce) + results = results + (results * 0.5); + else if(attackAttr == kRPGSkillAttrIce && defenseAttr == kRPGSkillAttrFire) + results = results - (results * 0.5); + + //无属性克制除自己属性以外的所有属性 + else if(attackAttr == kRPGSkillAttrNone && defenseAttr != kRPGSkillAttrNone) + results = results + (results * 0.5); + else if(attackAttr != kRPGSkillAttrNone && defenseAttr == kRPGSkillAttrNone) + results = results - (results * 0.5); + + return results; +} + +int RPGComputingResults::skillCureResults(float playerSkillAttack, float skillAttack) +{ + //不需要浮动值 + playerSkillAttack = playerSkillAttack / 0.5; + skillAttack = skillAttack / 0.25; + int results = (int)(playerSkillAttack + skillAttack); + return results; +} + +int RPGComputingResults::itemCure(int itemsId) +{ + switch (itemsId) + { + case 6: + //草药治疗,返回的是HP + return 100; + break; + case 7: + //党参治疗,返回的是MP + return 30; + break; + default: + + return 0; + break; + } + +} diff --git a/Classes/RPGComputingResults.h b/Classes/RPGComputingResults.h new file mode 100644 index 0000000..df3bb6d --- /dev/null +++ b/Classes/RPGComputingResults.h @@ -0,0 +1,30 @@ +// +// RPGComputingResults.h +// OzgGameRPG +// +// Created by ozg on 14-4-8. +// +// + +#ifndef __OzgGameRPG__RPGComputingResults__ +#define __OzgGameRPG__RPGComputingResults__ + +#include "cocos2d.h" +#include "RPGBaseSceneLayer.h" + +USING_NS_CC; + +class RPGComputingResults : public CCObject +{ + +public: + + static int attackResults(float attack, float defense); //一般攻击 + static int skillAttackResults(float playerSkillAttack, float skillAttack, RPGSkillAttr attackAttr, float skillDefense, RPGSkillAttr defenseAttr); //技能攻击 + static int skillCureResults(float playerSkillAttack, float skillAttack); //治疗 + + static int itemCure(int itemsId); //道具治疗 + +}; + +#endif /* defined(__OzgGameRPG__RPGComputingResults__) */ diff --git a/Classes/RPGData.h b/Classes/RPGData.h index eb12602..e87243a 100644 --- a/Classes/RPGData.h +++ b/Classes/RPGData.h @@ -28,8 +28,8 @@ public: float m_attack; float m_defense; float m_speed; - float m_magicAttack; - float m_magicDefense; + float m_skillAttack; + float m_skillDefense; int m_itemsIdArms; int m_itemsIdArmor; int m_level; @@ -58,8 +58,8 @@ public: float m_attack; float m_defense; float m_speed; - float m_magicAttack; - float m_magicDefense; + float m_skillAttack; + float m_skillDefense; int m_exp; string m_skill; string m_tex; @@ -80,6 +80,7 @@ class RPGSkill : public CCObject public: string m_name; + float m_skillAttack; int m_mp; RPGSkill(); diff --git a/Classes/RPGMapChoicePlayerMenuLayer.cpp b/Classes/RPGMapChoicePlayerMenuLayer.cpp new file mode 100644 index 0000000..40156ba --- /dev/null +++ b/Classes/RPGMapChoicePlayerMenuLayer.cpp @@ -0,0 +1,91 @@ +// +// RPGMapChoicePlayerMenuLayer.cpp +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +#include "RPGMapChoicePlayerMenuLayer.h" + +RPGMapChoicePlayerMenuLayer::RPGMapChoicePlayerMenuLayer() +{ + +} + +RPGMapChoicePlayerMenuLayer::~RPGMapChoicePlayerMenuLayer() +{ + CCNotificationCenter::sharedNotificationCenter()->removeObserver(this->m_target, "onChoicePlayer"); + this->m_target->release(); + + CCLog("RPGMapChoicePlayerMenuLayer 释放"); +} + +bool RPGMapChoicePlayerMenuLayer::init(CppSQLite3DB *db, CCObject* target, SEL_CallFuncO selector, float width, float height) +{ + if(CCLayerColor::initWithColor(ccc4(0, 0, 0, 200), width, height)) + { + this->m_target = target; + this->m_target->retain(); + + this->m_db = db; + + CCTMXTiledMap *mainBg = CCTMXTiledMap::create("select_player_style1.tmx"); + mainBg->setPosition(ccp(270, 280)); + mainBg->setTag(kRPGMapChoicePlayerMenuLayerTagBg); + this->addChild(mainBg); + + CCMenu *mainMenu = CCMenu::create(); + mainMenu->setTag(kRPGMapChoicePlayerMenuLayerTagMainMenu); + mainMenu->setAnchorPoint(CCPointZero); + mainMenu->setPosition(CCPointZero); + this->addChild(mainMenu); + + this->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2, (CCDirector::sharedDirector()->getWinSize().height - height) / 2)); + + //显示4个角色 + float playerX = 315; + CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY); + while(!query.eof()) + { + CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4); + + CCSprite *playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1)); + CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapChoicePlayerMenuLayerTagMainMenuPlayer + query.getIntField("id")); + if(!player) + { + player = CCMenuItemSprite::create(playerSprite, playerSprite, this, menu_selector(RPGMapChoicePlayerMenuLayer::onMenu)); + player->cocos2d::CCNode::setPosition(ccp(playerX, 330)); + player->setScale(1.5); + player->setTag(kRPGMapChoicePlayerMenuLayerTagMainMenuPlayer + query.getIntField("id")); + mainMenu->addChild(player); + } + + playerX += 120; + query.nextRow(); + } + query.finalize(); + + CCNotificationCenter::sharedNotificationCenter()->addObserver(this->m_target, selector, "onChoicePlayer", NULL); + + return true; + } + return false; +} + +RPGMapChoicePlayerMenuLayer* RPGMapChoicePlayerMenuLayer::create(CppSQLite3DB *db, CCObject* target, SEL_CallFuncO selector, float width, float height) +{ + RPGMapChoicePlayerMenuLayer *obj = new RPGMapChoicePlayerMenuLayer(); + if(obj && obj->init(db, target, selector, width, height)) + { + obj->autorelease(); + return obj; + } + CC_SAFE_DELETE(obj); + return NULL; +} + +void RPGMapChoicePlayerMenuLayer::onMenu(cocos2d::CCObject *pObject) +{ + CCNotificationCenter::sharedNotificationCenter()->postNotification("onChoicePlayer", pObject); +} diff --git a/Classes/RPGMapChoicePlayerMenuLayer.h b/Classes/RPGMapChoicePlayerMenuLayer.h new file mode 100644 index 0000000..52d181d --- /dev/null +++ b/Classes/RPGMapChoicePlayerMenuLayer.h @@ -0,0 +1,55 @@ +// +// RPGMapChoicePlayerMenuLayer.h +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +/* + //test + RPGMapChoicePlayerMenuLayer *choicePlayerMenuLayer = RPGMapChoicePlayerMenuLayer::create(&this->m_db, this, callfuncO_selector(RPGMapSceneLayer::test), 960, 640); + this->addChild(choicePlayerMenuLayer); + + void RPGMapSceneLayer::test(CCObject* obj) + { + CCLog("aaa"); + } + */ + +#ifndef __OzgGameRPG__RPGMapChoicePlayerMenuLayer__ +#define __OzgGameRPG__RPGMapChoicePlayerMenuLayer__ + +#include "cocos2d.h" +#include "RPGBaseSceneLayer.h" +#include "OzgCCUtility.h" + +USING_NS_CC; + +enum RPGMapChoicePlayerMenuLayerTag +{ + kRPGMapChoicePlayerMenuLayerTagMainMenu = 1, + kRPGMapChoicePlayerMenuLayerTagBg = 2, + kRPGMapChoicePlayerMenuLayerTagMainMenuPlayer = 100 +}; + +class RPGMapChoicePlayerMenuLayer : public CCLayerColor +{ + +private: + + CppSQLite3DB* m_db; + CCObject* m_target; + + void onMenu(CCObject *pObject); + +public: + + RPGMapChoicePlayerMenuLayer(); + virtual ~RPGMapChoicePlayerMenuLayer(); + + bool init(CppSQLite3DB *db, CCObject* target, SEL_CallFuncO selector, float width, float height); + static RPGMapChoicePlayerMenuLayer* create(CppSQLite3DB *db, CCObject* target, SEL_CallFuncO selector, float width, float height); +}; + +#endif /* defined(__OzgGameRPG__RPGMapChoicePlayerMenuLayer__) */ diff --git a/Classes/RPGMapEquipMenuLayer.cpp b/Classes/RPGMapEquipMenuLayer.cpp new file mode 100644 index 0000000..09f0c5f --- /dev/null +++ b/Classes/RPGMapEquipMenuLayer.cpp @@ -0,0 +1,101 @@ +// +// RPGMapEquipMenuLayer.cpp +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +#include "RPGMapEquipMenuLayer.h" +#include "RPGMapMenuLayer.h" +#include "RPGMapSceneLayer.h" + +RPGMapEquipMenuLayer::RPGMapEquipMenuLayer() +{ + +} + +RPGMapEquipMenuLayer::~RPGMapEquipMenuLayer() +{ + this->m_stringList->release(); + + CCLog("RPGMapEquipMenuLayer 释放"); +} + +bool RPGMapEquipMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB *db, float width, float height) +{ + if(CCLayerColor::initWithColor(ccc4(0, 0, 0, 200), width, height)) + { + this->m_stringList = stringList; + this->m_stringList->retain(); + + this->m_db = db; + + CCMenu *mainMenu = CCMenu::create(); + mainMenu->setTag(kRPGMapEquipMenuLayerTagMainMenu); + mainMenu->setAnchorPoint(CCPointZero); + mainMenu->setPosition(CCPointZero); + this->addChild(mainMenu); + + CCMenuItemSprite *menuBack = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapEquipMenuLayerTagMainMenuBack); + if(!menuBack) + { + menuBack = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGMapEquipMenuLayer::onMenu)); + menuBack->setPosition(ccp(40, 600)); + menuBack->setTag(kRPGMapEquipMenuLayerTagMainMenuBack); + menuBack->setScale(0.5); + mainMenu->addChild(menuBack); + } + + CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu2_style1.tmx"); + mainBg->setPosition(CCPointZero); + mainBg->setTag(kRPGMapEquipMenuLayerTagBg); + this->addChild(mainBg); + + return true; + } + return false; +} + +RPGMapEquipMenuLayer* RPGMapEquipMenuLayer::create(cocos2d::CCDictionary *stringList, CppSQLite3DB *db, float width, float height) +{ + RPGMapEquipMenuLayer *obj = new RPGMapEquipMenuLayer(); + if(obj && obj->init(stringList, db, width, height)) + { + obj->autorelease(); + return obj; + } + CC_SAFE_DELETE(obj); + return NULL; +} + +//private +void RPGMapEquipMenuLayer::onMenu(cocos2d::CCObject *pObject) +{ + CCMenuItem *menuItem = (CCMenuItem*)pObject; + SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav"); + + switch (menuItem->getTag()) + { + case kRPGMapEquipMenuLayerTagMainMenuBack: + { +// CCLog("后退"); + + //因为动态获取地图的大小会导致了菜单层显示错位,所以定死了 + float width = 960; + float height = 640; + RPGMapMenuLayer *menuLayer = menuLayer = RPGMapMenuLayer::create(this->m_stringList, this->m_db, width, height); + menuLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - height) / 2.0)); + menuLayer->setTag(kRPGMapSceneLayerTagMenuLayer); + this->getParent()->addChild(menuLayer); + + this->removeFromParentAndCleanup(true); + + } + break; + + default: + break; + } + +} diff --git a/Classes/RPGMapEquipMenuLayer.h b/Classes/RPGMapEquipMenuLayer.h new file mode 100644 index 0000000..3bdb88a --- /dev/null +++ b/Classes/RPGMapEquipMenuLayer.h @@ -0,0 +1,49 @@ +// +// RPGMapEquipMenuLayer.h +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +#ifndef __OzgGameRPG__RPGMapEquipMenuLayer__ +#define __OzgGameRPG__RPGMapEquipMenuLayer__ + +#include "cocos2d.h" +#include "cocos-ext.h" +#include "CppSQLite3.h" +#include "JsonBox.h" +#include "RPGMapRoleSprite.h" +#include "RPGBaseSceneLayer.h" + +USING_NS_CC; +USING_NS_CC_EXT; + +enum RPGMapEquipMenuLayerTag +{ + kRPGMapEquipMenuLayerTagMainMenu = 1, + kRPGMapEquipMenuLayerTagMainMenuBack = 2, + kRPGMapEquipMenuLayerTagBg = 3 + +}; + +class RPGMapEquipMenuLayer : public CCLayerColor//, CCTableViewDelegate, CCTableViewDataSource +{ + +private: + CCDictionary* m_stringList; + CppSQLite3DB* m_db; + + void onMenu(cocos2d::CCObject *pObject); + +public: + + RPGMapEquipMenuLayer(); + virtual ~RPGMapEquipMenuLayer(); + + bool init(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); + static RPGMapEquipMenuLayer* create(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); + +}; + +#endif /* defined(__OzgGameRPG__RPGMapEquipMenuLayer__) */ diff --git a/Classes/RPGMapItemsMenuLayer.cpp b/Classes/RPGMapItemsMenuLayer.cpp new file mode 100644 index 0000000..11f99b2 --- /dev/null +++ b/Classes/RPGMapItemsMenuLayer.cpp @@ -0,0 +1,101 @@ +// +// RPGMapItemsMenuLayer.cpp +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +#include "RPGMapItemsMenuLayer.h" +#include "RPGMapMenuLayer.h" +#include "RPGMapSceneLayer.h" + +RPGMapItemsMenuLayer::RPGMapItemsMenuLayer() +{ + +} + +RPGMapItemsMenuLayer::~RPGMapItemsMenuLayer() +{ + this->m_stringList->release(); + + CCLog("RPGMapItemsMenuLayer 释放"); +} + +bool RPGMapItemsMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB *db, float width, float height) +{ + if(CCLayerColor::initWithColor(ccc4(0, 0, 0, 200), width, height)) + { + this->m_stringList = stringList; + this->m_stringList->retain(); + + this->m_db = db; + + CCMenu *mainMenu = CCMenu::create(); + mainMenu->setTag(kRPGMapItemsMenuLayerTagMainMenu); + mainMenu->setAnchorPoint(CCPointZero); + mainMenu->setPosition(CCPointZero); + this->addChild(mainMenu); + + CCMenuItemSprite *menuBack = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapItemsMenuLayerTagMainMenuBack); + if(!menuBack) + { + menuBack = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGMapItemsMenuLayer::onMenu)); + menuBack->setPosition(ccp(40, 600)); + menuBack->setTag(kRPGMapItemsMenuLayerTagMainMenuBack); + menuBack->setScale(0.5); + mainMenu->addChild(menuBack); + } + + CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu3_style1.tmx"); + mainBg->setPosition(CCPointZero); + mainBg->setTag(kRPGMapItemsMenuLayerTagBg); + this->addChild(mainBg); + + return true; + } + return false; +} + +RPGMapItemsMenuLayer* RPGMapItemsMenuLayer::create(cocos2d::CCDictionary *stringList, CppSQLite3DB *db, float width, float height) +{ + RPGMapItemsMenuLayer *obj = new RPGMapItemsMenuLayer(); + if(obj && obj->init(stringList, db, width, height)) + { + obj->autorelease(); + return obj; + } + CC_SAFE_DELETE(obj); + return NULL; +} + +//private +void RPGMapItemsMenuLayer::onMenu(cocos2d::CCObject *pObject) +{ + CCMenuItem *menuItem = (CCMenuItem*)pObject; + SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav"); + + switch (menuItem->getTag()) + { + case kRPGMapItemsMenuLayerTagMainMenuBack: + { +// CCLog("后退"); + + //因为动态获取地图的大小会导致了菜单层显示错位,所以定死了 + float width = 960; + float height = 640; + RPGMapMenuLayer *menuLayer = menuLayer = RPGMapMenuLayer::create(this->m_stringList, this->m_db, width, height); + menuLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - height) / 2.0)); + menuLayer->setTag(kRPGMapSceneLayerTagMenuLayer); + this->getParent()->addChild(menuLayer); + + this->removeFromParentAndCleanup(true); + + } + break; + + default: + break; + } + +} diff --git a/Classes/RPGMapItemsMenuLayer.h b/Classes/RPGMapItemsMenuLayer.h new file mode 100644 index 0000000..41d575b --- /dev/null +++ b/Classes/RPGMapItemsMenuLayer.h @@ -0,0 +1,49 @@ +// +// RPGMapItemsMenuLayer.h +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +#ifndef __OzgGameRPG__RPGMapItemsMenuLayer__ +#define __OzgGameRPG__RPGMapItemsMenuLayer__ + +#include "cocos2d.h" +#include "cocos-ext.h" +#include "CppSQLite3.h" +#include "JsonBox.h" +#include "RPGMapRoleSprite.h" +#include "RPGBaseSceneLayer.h" + +USING_NS_CC; +USING_NS_CC_EXT; + +enum RPGMapItemsMenuLayerTag +{ + kRPGMapItemsMenuLayerTagMainMenu = 1, + kRPGMapItemsMenuLayerTagMainMenuBack = 2, + kRPGMapItemsMenuLayerTagBg = 3 + +}; + +class RPGMapItemsMenuLayer : public CCLayerColor//, CCTableViewDelegate, CCTableViewDataSource +{ + +private: + CCDictionary* m_stringList; + CppSQLite3DB* m_db; + + void onMenu(cocos2d::CCObject *pObject); + +public: + + RPGMapItemsMenuLayer(); + virtual ~RPGMapItemsMenuLayer(); + + bool init(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); + static RPGMapItemsMenuLayer* create(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); + +}; + +#endif /* defined(__OzgGameRPG__RPGMapItemsMenuLayer__) */ diff --git a/Classes/RPGMapMenuLayer.cpp b/Classes/RPGMapMenuLayer.cpp index 7e18aa2..5023978 100755 --- a/Classes/RPGMapMenuLayer.cpp +++ b/Classes/RPGMapMenuLayer.cpp @@ -12,12 +12,10 @@ #include "RPGStartSceneLayer.h" #include "JsonBox.h" #include "OzgCCUtility.h" - -//获取一个player的详细数据 -#define PLAYER_QUERY_DETAIL "select p.*, arms.name_cns as arms_name, armor.name_cns as armor_name from player as p left join items as arms on p.items_id_arms = arms.id left join items as armor on p.items_id_armor = armor.id where p.id = %i" - -//查询一个角色的技能 -#define SKILL_QUERY "select * from skill where id in(%s)" +#include "RPGMapStatusMenuLayer.h" +#include "RPGMapItemsMenuLayer.h" +#include "RPGMapEquipMenuLayer.h" +#include "RPGMapSkillMenuLayer.h" RPGMapMenuLayer::RPGMapMenuLayer() { @@ -27,7 +25,6 @@ RPGMapMenuLayer::RPGMapMenuLayer() RPGMapMenuLayer::~RPGMapMenuLayer() { this->m_stringList->release(); - this->m_skillList->release(); // CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo(); @@ -40,17 +37,12 @@ bool RPGMapMenuLayer::init(CCDictionary* stringList, CppSQLite3DB* db, float wid { this->m_stringList = stringList; this->m_stringList->retain(); - - this->m_skillList = new CCArray(); - this->m_skillList->init(); - + this->m_db = db; this->m_width = width; this->m_height = height; - this->m_statusIsDefault = true; - // CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("main.plist"); CCMenu *mainMenu = CCMenu::create(); @@ -89,42 +81,56 @@ RPGMapMenuLayer* RPGMapMenuLayer::create(CCDictionary* stringList, CppSQLite3DB* //private void RPGMapMenuLayer::onMenu(cocos2d::CCObject *pObject) { - CCMenuItem *menuItem = (CCMenuItem*)pObject; - - //除默认显示角色数据之外,其他所有的点击都有效果音 - if(!(this->m_statusIsDefault && menuItem->getTag() == kRPGMapMenuLayerTagMainMenuPlayerStatus + 1)) - SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav"); + CCMenuItem *menuItem = (CCMenuItem*)pObject; + SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav"); switch (menuItem->getTag()) { case kRPGMapMenuLayerTagMainMenuEquip: { - CCLog("装备"); +// CCLog("装备"); + + //因为动态获取地图的大小会导致了菜单层显示错位,所以定死了 + float width = 960; + float height = 640; + RPGMapEquipMenuLayer *menuLayer = RPGMapEquipMenuLayer::create(this->m_stringList, this->m_db, width, height); + menuLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - height) / 2.0)); + menuLayer->setTag(kRPGMapSceneLayerTagMenuLayer); + this->getParent()->addChild(menuLayer); + + this->removeFromParentAndCleanup(true); } break; case kRPGMapMenuLayerTagMainMenuSkill: { - CCLog("技能"); +// CCLog("技能"); + + //因为动态获取地图的大小会导致了菜单层显示错位,所以定死了 + float width = 960; + float height = 640; + RPGMapSkillMenuLayer *menuLayer = RPGMapSkillMenuLayer::create(this->m_stringList, this->m_db, width, height); + menuLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - height) / 2.0)); + menuLayer->setTag(kRPGMapSceneLayerTagMenuLayer); + this->getParent()->addChild(menuLayer); + + this->removeFromParentAndCleanup(true); } break; case kRPGMapMenuLayerTagMainMenuStatus: { // CCLog("状态"); - this->m_statusIsDefault = true; - this->removeDefaultInterface(); - this->removeChildByTag(kRPGMapMenuLayerTagMainBg, true); + //因为动态获取地图的大小会导致了菜单层显示错位,所以定死了 + float width = 960; + float height = 640; + RPGMapStatusMenuLayer *menuLayer = RPGMapStatusMenuLayer::create(this->m_stringList, this->m_db, width, height); + menuLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - height) / 2.0)); + menuLayer->setTag(kRPGMapSceneLayerTagMenuLayer); + this->getParent()->addChild(menuLayer); - this->setMainMenuStatus(); - - CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu4_style1.tmx"); - mainBg->setPosition(CCPointZero); - mainBg->setTag(kRPGMapMenuLayerTagMainBg); - this->addChild(mainBg); - - this->setStatusInterface(); + this->removeFromParentAndCleanup(true); } break; case kRPGMapMenuLayerTagMainMenuClose: @@ -148,44 +154,6 @@ void RPGMapMenuLayer::onMenu(cocos2d::CCObject *pObject) CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu); mainMenu->setEnabled(false); - } - break; - case kRPGMapMenuLayerTagMainMenuStatusBack: - { - //在状态界面中按后退 - this->removeChildByTag(kRPGMapMenuLayerTagMainBg, true); - - this->setMainMenuDefault(); - this->setDefaultInterface(); - - CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu1_style1.tmx"); - mainBg->setPosition(CCPointZero); - mainBg->setTag(kRPGMapMenuLayerTagMainBg); - this->addChild(mainBg); - - //清理上面的4个角色 - CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu); - CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY); - while(!query.eof()) - { - CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapMenuLayerTagMainMenuPlayerStatus + query.getIntField("id")); - if(player) - player->removeFromParentAndCleanup(true); - - CCTextureCache::sharedTextureCache()->removeTextureForKey(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString()); - - query.nextRow(); - } - query.finalize(); - - //清理各个lab部分 - this->removeAllStatusPlayerLab(); - - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerSkillTable, true); - this->m_skillList->removeAllObjects(); - - //清理光标 - this->removeChildByTag(kRPGMapMenuLayerTagHandCursor, true); } break; case kRPGMapMenuLayerTagConfirmExitOK: @@ -214,54 +182,22 @@ void RPGMapMenuLayer::onMenu(cocos2d::CCObject *pObject) break; case kRPGMapMenuLayerTagMainMenuItems: { - CCLog("道具"); +// CCLog("道具"); + + //因为动态获取地图的大小会导致了菜单层显示错位,所以定死了 + float width = 960; + float height = 640; + RPGMapItemsMenuLayer *menuLayer = RPGMapItemsMenuLayer::create(this->m_stringList, this->m_db, width, height); + menuLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - height) / 2.0)); + menuLayer->setTag(kRPGMapSceneLayerTagMenuLayer); + this->getParent()->addChild(menuLayer); + + this->removeFromParentAndCleanup(true); } break; } - - //player status - if(menuItem->getTag() >= kRPGMapMenuLayerTagMainMenuPlayerStatus && menuItem->getTag() <= kRPGMapMenuLayerTagMainMenuPlayerStatus + 99) - { - CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu); - CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY); - while(!query.eof()) - { - if(menuItem->getTag() == kRPGMapMenuLayerTagMainMenuPlayerStatus + query.getIntField("id")) - { - this->removeAllStatusPlayerLab(); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerSkillTable)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerSkillTable, true); - this->m_skillList->removeAllObjects(); - - this->m_statusIsDefault = false; - -// CCLog("选中了id为%i的角色", query.getIntField("id")); - int dataId = query.getIntField("id"); - this->setStatusPlayer(dataId); - CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapMenuLayerTagMainMenuPlayerStatus + dataId); - - CCSprite *handCursor = (CCSprite*)this->getChildByTag(kRPGMapMenuLayerTagHandCursor); - if(!handCursor) - { - handCursor = CCSprite::createWithSpriteFrameName("gui_hand.png"); - handCursor->setScale(0.3); - handCursor->setTag(kRPGMapMenuLayerTagHandCursor); - this->addChild(handCursor); - } - - //光标的位置 - handCursor->setPosition(ccp(player->getPositionX() + 60, 555)); - - break; - } - query.nextRow(); - } - query.finalize(); - } - } void RPGMapMenuLayer::createMenuItem(float x, float y, CCString *text, RPGMapMenuLayerTag tag) @@ -321,38 +257,10 @@ void RPGMapMenuLayer::setMainMenuDefault() } } -void RPGMapMenuLayer::setMainMenuStatus() -{ - CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu); - - CCMenuItemSprite *menuBack = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapMenuLayerTagMainMenuStatusBack); - if(!menuBack) - { - menuBack = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGMapMenuLayer::onMenu)); - menuBack->setPosition(ccp(40, 600)); - menuBack->setTag(kRPGMapMenuLayerTagMainMenuStatusBack); - menuBack->setScale(0.5); - mainMenu->addChild(menuBack); - - } - - CCObject *item = NULL; - CCARRAY_FOREACH(mainMenu->getChildren(), item) - { - CCMenuItem *menuItem = (CCMenuItem*)item; - - if(menuItem->getTag() == kRPGMapMenuLayerTagMainMenuStatusBack) - menuItem->setVisible(true); - else - menuItem->setVisible(false); - - } -} - void RPGMapMenuLayer::setDefaultInterface() { - //显示上面的4个角色 + //显示左边的4个角色 float playerY = 550; float nameY = 547; float levelY = 568; @@ -389,238 +297,3 @@ void RPGMapMenuLayer::setDefaultInterface() query.finalize(); } - -void RPGMapMenuLayer::removeDefaultInterface() -{ - CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY); - while(!query.eof()) - { - - CCSprite *playerSprite = (CCSprite*)this->getChildByTag(kRPGMapMenuLayerTagDefualtPlayerTex + query.getIntField("id")); - if(playerSprite) - playerSprite->removeFromParentAndCleanup(true); - - CCLabelTTF *nameLab = (CCLabelTTF*)this->getChildByTag(kRPGMapMenuLayerTagDefualtPlayerName + query.getIntField("id")); - if(nameLab) - nameLab->removeFromParentAndCleanup(true); - - CCLabelTTF *levelLab = (CCLabelTTF*)this->getChildByTag(kRPGMapMenuLayerTagDefualtPlayerLevel + query.getIntField("id")); - if(levelLab) - levelLab->removeFromParentAndCleanup(true); - - CCLabelTTF *hpLab = (CCLabelTTF*)this->getChildByTag(kRPGMapMenuLayerTagDefualtPlayerHP + query.getIntField("id")); - if(hpLab) - hpLab->removeFromParentAndCleanup(true); - - CCLabelTTF *mpLab = (CCLabelTTF*)this->getChildByTag(kRPGMapMenuLayerTagDefualtPlayerMP + query.getIntField("id")); - if(mpLab) - mpLab->removeFromParentAndCleanup(true); - - query.nextRow(); - } - query.finalize(); - -} - -void RPGMapMenuLayer::setStatusInterface() -{ - CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu); - - //显示上面的4个角色 - float playerX = 200; - CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY); - while(!query.eof()) - { - CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4); - - CCSprite *playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1)); - CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapMenuLayerTagMainMenuPlayerStatus + query.getIntField("id")); - if(!player) - { - player = CCMenuItemSprite::create(playerSprite, playerSprite, this, menu_selector(RPGMapMenuLayer::onMenu)); - player->cocos2d::CCNode::setPosition(ccp(playerX, 560)); - player->setScale(2); - player->setTag(kRPGMapMenuLayerTagMainMenuPlayerStatus + query.getIntField("id")); - mainMenu->addChild(player); - } - - playerX += 200; - query.nextRow(); - } - query.finalize(); - - //默认选中第一个 - this->onMenu(mainMenu->getChildByTag(kRPGMapMenuLayerTagMainMenuPlayerStatus + 1)); -} - -void RPGMapMenuLayer::setStatusPlayer(int dataId) -{ - CppSQLite3Query query = this->m_db->execQuery(CCString::createWithFormat(PLAYER_QUERY_DETAIL, dataId)->getCString()); - while(!query.eof()) - { - //左边 - addLab(this, kRPGMapMenuLayerTagStatusPlayerName, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_name"))->getCString(), query.getStringField("name_cns")), ccp(250, 410)); - addLab(this, kRPGMapMenuLayerTagStatusPlayerLevel, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_level"))->getCString(), query.getIntField("level"), query.getIntField("next_exp")), ccp(243, 370)); - addLab(this, kRPGMapMenuLayerTagStatusPlayerHP, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_hp"))->getCString(), query.getIntField("hp"), query.getIntField("max_hp")), ccp(262, 330)); - addLab(this, kRPGMapMenuLayerTagStatusPlayerMP, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_mp"))->getCString(), query.getIntField("mp"), query.getIntField("max_mp")), ccp(259, 290)); - addLab(this, kRPGMapMenuLayerTagStatusPlayerAttack, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_attack"))->getCString(), query.getIntField("attack")), ccp(249, 250)); - addLab(this, kRPGMapMenuLayerTagStatusPlayerDefense, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_defense"))->getCString(), query.getIntField("defense")), ccp(249, 210)); - addLab(this, kRPGMapMenuLayerTagStatusPlayerSpeed, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_speed"))->getCString(), query.getIntField("speed")), ccp(249, 170)); - addLab(this, kRPGMapMenuLayerTagStatusPlayerMagicAttack, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_magic_attack"))->getCString(), query.getIntField("magic_attack")), ccp(249, 130)); - addLab(this, kRPGMapMenuLayerTagStatusPlayerMagicDefense, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_magic_defense"))->getCString(), query.getIntField("magic_defense")), ccp(249, 90)); - - //右边装备部分 - addLab(this, kRPGMapMenuLayerTagStatusPlayerEquipArms, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_equip_arms"))->getCString(), query.getStringField("arms_name")), ccp(570, 410)); - addLab(this, kRPGMapMenuLayerTagStatusPlayerEquipArmor, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_equip_armor"))->getCString(), query.getStringField("armor_name")), ccp(570, 370)); - - //右边技能部分 - - //数据处理部分 - this->m_skillList->removeAllObjects(); - string wq = ""; - JsonBox::Value json; - json.loadFromString(query.getStringField("skill")); - JsonBox::Array jsonArr = json.getArray(); - for (int i = 0; i < jsonArr.size(); i++) - { - char* str = (char*)malloc(10 * sizeof(char)); - OzgCCUtility::itoa(jsonArr[i].getInt(), str); - wq.append(str); - - if(i + 1 < jsonArr.size()) - wq.append(", "); - - free(str); - } - if((int)wq.length() > 0) - { - CppSQLite3Query skillQuery = this->m_db->execQuery(CCString::createWithFormat(SKILL_QUERY, wq.c_str())->getCString()); - while(!skillQuery.eof()) - { - RPGSkill *skill = RPGSkill::create(); - skill->m_name = skillQuery.getStringField("name_cns"); - skill->m_mp = skillQuery.getIntField("mp"); - - this->m_skillList->addObject(skill); - - skillQuery.nextRow(); - } - skillQuery.finalize(); - } - - CCTableView *tableView = CCTableView::create(this, CCSizeMake(600, 265)); - tableView->setDirection(kCCScrollViewDirectionVertical); - tableView->setPosition(ccp(340, 20)); - tableView->setDelegate(this); - tableView->setVerticalFillOrder(kCCTableViewFillTopDown); - tableView->setTag(kRPGMapMenuLayerTagStatusPlayerSkillTable); - this->addChild(tableView); - tableView->reloadData(); - - query.nextRow(); - } - query.finalize(); - -} - -void RPGMapMenuLayer::removeAllStatusPlayerLab() -{ - //清理各个lab部分 - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerName)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerName, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerLevel)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerLevel, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerHP)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerHP, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerMP)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerMP, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerAttack)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerAttack, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerDefense)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerDefense, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerSpeed)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerSpeed, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerMagicAttack)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerMagicAttack, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerMagicDefense)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerMagicDefense, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerEquipArms)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerEquipArms, true); - - if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerEquipArmor)) - this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerEquipArmor, true); -} - -//CCTableView -void RPGMapMenuLayer::scrollViewDidScroll(CCScrollView *scrollView) -{ - -} - -void RPGMapMenuLayer::scrollViewDidZoom(CCScrollView *scrollView) -{ - -} - -void RPGMapMenuLayer::tableCellTouched(CCTableView *tableView, CCTableViewCell *cell) -{ - -} - -CCSize RPGMapMenuLayer::cellSizeForTable(CCTableView *tableView) -{ - return CCSizeMake(tableView->getContentSize().width, 80); -} - -CCTableViewCell* RPGMapMenuLayer::tableCellAtIndex(CCTableView *tableView, unsigned int idx) -{ - CCTableViewCell *cell = tableView->dequeueCell(); - if (!cell) - { - cell = new CCTableViewCell(); - cell->autorelease(); - } - else - cell->removeAllChildrenWithCleanup(true); - - float x = 150; - for (int i = 0; i < 3; i++) - { - int index = idx * 3 + i; - - if(index >= this->m_skillList->count()) - break; - - RPGSkill *skillData = (RPGSkill*)this->m_skillList->objectAtIndex(index); - - CCLabelTTF *textLab = CCLabelTTF::create(CCString::createWithFormat("%s (%i)", skillData->m_name.c_str(), skillData->m_mp)->getCString(), "Arial", 20, CCSizeMake(200, 25), kCCTextAlignmentLeft); - textLab->setPosition(ccp(x, 0)); - cell->addChild(textLab); - - x += 200; - } - - return cell; -} - -unsigned int RPGMapMenuLayer::numberOfCellsInTableView(CCTableView *tableView) -{ - int rowItemCount = 3; - int size = this->m_skillList->count(); - - if(size % rowItemCount == 0) - return size / rowItemCount; - else - return size / rowItemCount + 1; -} - -//CCTableView end diff --git a/Classes/RPGMapMenuLayer.h b/Classes/RPGMapMenuLayer.h index 8827591..1bc2724 100755 --- a/Classes/RPGMapMenuLayer.h +++ b/Classes/RPGMapMenuLayer.h @@ -29,8 +29,6 @@ enum RPGMapMenuLayerTag kRPGMapMenuLayerTagMainMenuStatus = 6, kRPGMapMenuLayerTagMainMenuClose = 7, kRPGMapMenuLayerTagMainMenuExit = 8, - kRPGMapMenuLayerTagMainMenuStatusBack = 12, - kRPGMapMenuLayerTagMainMenuPlayerStatus = 100, kRPGMapMenuLayerTagHandCursor = 22, kRPGMapMenuLayerTagConfirmExitOK = 9, kRPGMapMenuLayerTagConfirmCancel = 10, @@ -42,11 +40,10 @@ enum RPGMapMenuLayerTag kRPGMapMenuLayerTagStatusPlayerAttack = 17, kRPGMapMenuLayerTagStatusPlayerDefense = 18, kRPGMapMenuLayerTagStatusPlayerSpeed = 19, - kRPGMapMenuLayerTagStatusPlayerMagicAttack = 20, - kRPGMapMenuLayerTagStatusPlayerMagicDefense = 21, + kRPGMapMenuLayerTagStatusPlayerSkillAttack = 20, + kRPGMapMenuLayerTagStatusPlayerSkillDefense = 21, kRPGMapMenuLayerTagStatusPlayerEquipArms = 23, kRPGMapMenuLayerTagStatusPlayerEquipArmor = 24, - kRPGMapMenuLayerTagStatusPlayerSkillTable = 25, kRPGMapMenuLayerTagDefualtPlayerTex = 200, kRPGMapMenuLayerTagDefualtPlayerName = 300, kRPGMapMenuLayerTagDefualtPlayerLevel = 400, @@ -55,33 +52,23 @@ enum RPGMapMenuLayerTag }; -class RPGMapMenuLayer : public CCLayerColor, public CCTableViewDelegate, public CCTableViewDataSource +class RPGMapMenuLayer : public CCLayerColor { private: - - CCArray* m_skillList; //状态界面的技能列表 - + CCDictionary* m_stringList; CppSQLite3DB* m_db; float m_width; float m_height; - - bool m_statusIsDefault; //是否为第一次进入状态界面,如果是的话就不播放效果音了 - + void onMenu(CCObject *pObject); void createMenuItem(float x, float y, CCString *text, RPGMapMenuLayerTag tag); - void setMainMenuDefault(); //默认 - void setMainMenuStatus(); //状态 - - void setDefaultInterface(); //显示默认界面 - void removeDefaultInterface(); //清理默认界面 - - void setStatusInterface(); //显示状态界面 - void setStatusPlayer(int dataId); //显示状态界面的player数据部分 - void removeAllStatusPlayerLab(); //清理所有状态界面的lab + void setMainMenuDefault(); //显示右边的菜单 + + void setDefaultInterface(); //显示左边的界面 public: @@ -89,20 +76,7 @@ public: virtual ~RPGMapMenuLayer(); bool init(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); static RPGMapMenuLayer* create(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); - - //CCTableViewDelegate继承自CCScrollViewDelegate - virtual void scrollViewDidScroll(CCScrollView* scrollView); - virtual void scrollViewDidZoom(CCScrollView* scrollView); - - //点击哪个cell - virtual void tableCellTouched(CCTableView* tableView, CCTableViewCell* cell); - //每个cell的size - virtual CCSize cellSizeForTable(CCTableView *tableView); - //生成cell - virtual CCTableViewCell* tableCellAtIndex(CCTableView *tableView, unsigned int idx); - //cell的数量 - virtual unsigned int numberOfCellsInTableView(CCTableView *tableView); - + }; #endif /* defined(__OzgGameRPG__RPGMapMenuLayer__) */ diff --git a/Classes/RPGMapSkillMenuLayer.cpp b/Classes/RPGMapSkillMenuLayer.cpp new file mode 100644 index 0000000..e7812d6 --- /dev/null +++ b/Classes/RPGMapSkillMenuLayer.cpp @@ -0,0 +1,101 @@ +// +// RPGMapSkillMenuLayer.cpp +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +#include "RPGMapSkillMenuLayer.h" +#include "RPGMapMenuLayer.h" +#include "RPGMapSceneLayer.h" + +RPGMapSkillMenuLayer::RPGMapSkillMenuLayer() +{ + +} + +RPGMapSkillMenuLayer::~RPGMapSkillMenuLayer() +{ + this->m_stringList->release(); + + CCLog("RPGMapSkillMenuLayer 释放"); +} + +bool RPGMapSkillMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB *db, float width, float height) +{ + if(CCLayerColor::initWithColor(ccc4(0, 0, 0, 200), width, height)) + { + this->m_stringList = stringList; + this->m_stringList->retain(); + + this->m_db = db; + + CCMenu *mainMenu = CCMenu::create(); + mainMenu->setTag(kRPGMapSkillMenuLayerTagMainMenu); + mainMenu->setAnchorPoint(CCPointZero); + mainMenu->setPosition(CCPointZero); + this->addChild(mainMenu); + + CCMenuItemSprite *menuBack = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapSkillMenuLayerTagMainMenuBack); + if(!menuBack) + { + menuBack = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGMapSkillMenuLayer::onMenu)); + menuBack->setPosition(ccp(40, 600)); + menuBack->setTag(kRPGMapSkillMenuLayerTagMainMenuBack); + menuBack->setScale(0.5); + mainMenu->addChild(menuBack); + } + + CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu3_style1.tmx"); + mainBg->setPosition(CCPointZero); + mainBg->setTag(kRPGMapSkillMenuLayerTagBg); + this->addChild(mainBg); + + return true; + } + return false; +} + +RPGMapSkillMenuLayer* RPGMapSkillMenuLayer::create(cocos2d::CCDictionary *stringList, CppSQLite3DB *db, float width, float height) +{ + RPGMapSkillMenuLayer *obj = new RPGMapSkillMenuLayer(); + if(obj && obj->init(stringList, db, width, height)) + { + obj->autorelease(); + return obj; + } + CC_SAFE_DELETE(obj); + return NULL; +} + +//private +void RPGMapSkillMenuLayer::onMenu(cocos2d::CCObject *pObject) +{ + CCMenuItem *menuItem = (CCMenuItem*)pObject; + SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav"); + + switch (menuItem->getTag()) + { + case kRPGMapSkillMenuLayerTagMainMenuBack: + { +// CCLog("后退"); + + //因为动态获取地图的大小会导致了菜单层显示错位,所以定死了 + float width = 960; + float height = 640; + RPGMapMenuLayer *menuLayer = menuLayer = RPGMapMenuLayer::create(this->m_stringList, this->m_db, width, height); + menuLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - height) / 2.0)); + menuLayer->setTag(kRPGMapSceneLayerTagMenuLayer); + this->getParent()->addChild(menuLayer); + + this->removeFromParentAndCleanup(true); + + } + break; + + default: + break; + } + +} diff --git a/Classes/RPGMapSkillMenuLayer.h b/Classes/RPGMapSkillMenuLayer.h new file mode 100644 index 0000000..6cce218 --- /dev/null +++ b/Classes/RPGMapSkillMenuLayer.h @@ -0,0 +1,49 @@ +// +// RPGMapSkillMenuLayer.h +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +#ifndef __OzgGameRPG__RPGMapSkillMenuLayer__ +#define __OzgGameRPG__RPGMapSkillMenuLayer__ + +#include "cocos2d.h" +#include "cocos-ext.h" +#include "CppSQLite3.h" +#include "JsonBox.h" +#include "RPGMapRoleSprite.h" +#include "RPGBaseSceneLayer.h" + +USING_NS_CC; +USING_NS_CC_EXT; + +enum RPGMapSkillMenuLayerTag +{ + kRPGMapSkillMenuLayerTagMainMenu = 1, + kRPGMapSkillMenuLayerTagMainMenuBack = 2, + kRPGMapSkillMenuLayerTagBg = 3 + +}; + +class RPGMapSkillMenuLayer : public CCLayerColor//, CCTableViewDelegate, CCTableViewDataSource +{ + +private: + CCDictionary* m_stringList; + CppSQLite3DB* m_db; + + void onMenu(cocos2d::CCObject *pObject); + +public: + + RPGMapSkillMenuLayer(); + virtual ~RPGMapSkillMenuLayer(); + + bool init(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); + static RPGMapSkillMenuLayer* create(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); + +}; + +#endif /* defined(__OzgGameRPG__RPGMapSkillMenuLayer__) */ diff --git a/Classes/RPGMapStatusMenuLayer.cpp b/Classes/RPGMapStatusMenuLayer.cpp new file mode 100644 index 0000000..55888b1 --- /dev/null +++ b/Classes/RPGMapStatusMenuLayer.cpp @@ -0,0 +1,361 @@ +// +// RPGMapStatusMenuLayer.cpp +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +#include "RPGMapStatusMenuLayer.h" +#include "RPGMapMenuLayer.h" +#include "RPGMapSceneLayer.h" +#include "OzgCCUtility.h" + +//获取一个player的详细数据 +#define PLAYER_QUERY_DETAIL "select p.*, arms.name_cns as arms_name, armor.name_cns as armor_name from player as p left join items as arms on p.items_id_arms = arms.id left join items as armor on p.items_id_armor = armor.id where p.id = %i" + +//查询一个角色的技能 +#define SKILL_QUERY "select * from skill where id in(%s)" + +RPGMapStatusMenuLayer::RPGMapStatusMenuLayer() +{ + +} + +RPGMapStatusMenuLayer::~RPGMapStatusMenuLayer() +{ + this->m_stringList->release(); + this->m_skillList->release(); + +// CCLog("RPGMapStatusMenuLayer 释放"); +} + +bool RPGMapStatusMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB *db, float width, float height) +{ + if(CCLayerColor::initWithColor(ccc4(0, 0, 0, 200), width, height)) + { + this->m_stringList = stringList; + this->m_stringList->retain(); + + this->m_db = db; + + this->m_skillList = new CCArray(); + this->m_skillList->init(); + + this->m_statusIsDefault = true; + + CCMenu *mainMenu = CCMenu::create(); + mainMenu->setTag(kRPGMapStatusMenuLayerTagMainMenu); + mainMenu->setAnchorPoint(CCPointZero); + mainMenu->setPosition(CCPointZero); + this->addChild(mainMenu); + + CCMenuItemSprite *menuBack = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapStatusMenuLayerTagMainMenuBack); + if(!menuBack) + { + menuBack = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGMapStatusMenuLayer::onMenu)); + menuBack->setPosition(ccp(40, 600)); + menuBack->setTag(kRPGMapStatusMenuLayerTagMainMenuBack); + menuBack->setScale(0.5); + mainMenu->addChild(menuBack); + } + + CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu4_style1.tmx"); + mainBg->setPosition(CCPointZero); + mainBg->setTag(kRPGMapStatusMenuLayerTagBg); + this->addChild(mainBg); + + //显示上面的4个角色 + float playerX = 200; + CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY); + while(!query.eof()) + { + CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4); + + CCSprite *playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1)); + CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapStatusMenuLayerTagMainMenuPlayer + query.getIntField("id")); + if(!player) + { + player = CCMenuItemSprite::create(playerSprite, playerSprite, this, menu_selector(RPGMapStatusMenuLayer::onMenu)); + player->cocos2d::CCNode::setPosition(ccp(playerX, 560)); + player->setScale(2); + player->setTag(kRPGMapStatusMenuLayerTagMainMenuPlayer + query.getIntField("id")); + mainMenu->addChild(player); + } + + playerX += 200; + query.nextRow(); + } + query.finalize(); + + //默认选中第一个 + this->onMenu(mainMenu->getChildByTag(kRPGMapStatusMenuLayerTagMainMenuPlayer + 1)); + + return true; + } + return false; +} + +RPGMapStatusMenuLayer* RPGMapStatusMenuLayer::create(cocos2d::CCDictionary *stringList, CppSQLite3DB *db, float width, float height) +{ + RPGMapStatusMenuLayer *obj = new RPGMapStatusMenuLayer(); + if(obj && obj->init(stringList, db, width, height)) + { + obj->autorelease(); + return obj; + } + + CC_SAFE_DELETE(obj); + return NULL; +} + +//private +void RPGMapStatusMenuLayer::onMenu(cocos2d::CCObject *pObject) +{ + //第一次显示数据的话则不播放效果音 + if(!this->m_statusIsDefault) + SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav"); + + CCMenuItem *menuItem = (CCMenuItem*)pObject; + + switch (menuItem->getTag()) + { + case kRPGMapStatusMenuLayerTagMainMenuBack: + { +// CCLog("后退"); + + //因为动态获取地图的大小会导致了菜单层显示错位,所以定死了 + float width = 960; + float height = 640; + RPGMapMenuLayer *menuLayer = menuLayer = RPGMapMenuLayer::create(this->m_stringList, this->m_db, width, height); + menuLayer->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2.0, (CCDirector::sharedDirector()->getWinSize().height - height) / 2.0)); + menuLayer->setTag(kRPGMapSceneLayerTagMenuLayer); + this->getParent()->addChild(menuLayer); + + this->removeFromParentAndCleanup(true); + + } + break; + + default: + break; + } + + //player status + if(menuItem->getTag() >= kRPGMapStatusMenuLayerTagMainMenuPlayer && menuItem->getTag() <= kRPGMapStatusMenuLayerTagMainMenuPlayer + 99) + { + CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu); + + CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY); + while(!query.eof()) + { + if(menuItem->getTag() == kRPGMapStatusMenuLayerTagMainMenuPlayer + query.getIntField("id")) + { + this->m_statusIsDefault = false; + +// CCLog("选中了id为%i的角色", query.getIntField("id")); + int dataId = query.getIntField("id"); + this->setStatusPlayer(dataId); + + //选中的光标部分 + CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapStatusMenuLayerTagMainMenuPlayer + dataId); + + CCSprite *handCursor = (CCSprite*)this->getChildByTag(kRPGMapMenuLayerTagHandCursor); + if(!handCursor) + { + handCursor = CCSprite::createWithSpriteFrameName("gui_hand.png"); + handCursor->setScale(0.3); + handCursor->setTag(kRPGMapMenuLayerTagHandCursor); + this->addChild(handCursor); + } + + //光标的位置 + handCursor->setPosition(ccp(player->getPositionX() + 60, 555)); + + break; + } + query.nextRow(); + } + query.finalize(); + } + +} + +void RPGMapStatusMenuLayer::setStatusPlayer(int dataId) +{ + this->removeAllPlayerLab(); + + CppSQLite3Query query = this->m_db->execQuery(CCString::createWithFormat(PLAYER_QUERY_DETAIL, dataId)->getCString()); + while(!query.eof()) + { + //左边 + addLab(this, kRPGMapMenuLayerTagStatusPlayerName, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_name"))->getCString(), query.getStringField("name_cns")), ccp(250, 410)); + addLab(this, kRPGMapMenuLayerTagStatusPlayerLevel, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_level"))->getCString(), query.getIntField("level"), query.getIntField("next_exp")), ccp(243, 370)); + addLab(this, kRPGMapMenuLayerTagStatusPlayerHP, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_hp"))->getCString(), query.getIntField("hp"), query.getIntField("max_hp")), ccp(262, 330)); + addLab(this, kRPGMapMenuLayerTagStatusPlayerMP, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_mp"))->getCString(), query.getIntField("mp"), query.getIntField("max_mp")), ccp(259, 290)); + addLab(this, kRPGMapMenuLayerTagStatusPlayerAttack, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_attack"))->getCString(), query.getIntField("attack")), ccp(249, 250)); + addLab(this, kRPGMapMenuLayerTagStatusPlayerDefense, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_defense"))->getCString(), query.getIntField("defense")), ccp(249, 210)); + addLab(this, kRPGMapMenuLayerTagStatusPlayerSpeed, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_speed"))->getCString(), query.getIntField("speed")), ccp(249, 170)); + addLab(this, kRPGMapMenuLayerTagStatusPlayerSkillAttack, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_skill_attack"))->getCString(), query.getIntField("skill_attack")), ccp(249, 130)); + addLab(this, kRPGMapMenuLayerTagStatusPlayerSkillDefense, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_skill_defense"))->getCString(), query.getIntField("skill_defense")), ccp(249, 90)); + + //右边装备部分 + addLab(this, kRPGMapMenuLayerTagStatusPlayerEquipArms, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_equip_arms"))->getCString(), query.getStringField("arms_name")), ccp(570, 410)); + addLab(this, kRPGMapMenuLayerTagStatusPlayerEquipArmor, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("status_equip_armor"))->getCString(), query.getStringField("armor_name")), ccp(570, 370)); + + //右边技能部分 + + //数据处理部分 + this->m_skillList->removeAllObjects(); + string wq = ""; + JsonBox::Value json; + json.loadFromString(query.getStringField("skill")); + JsonBox::Array jsonArr = json.getArray(); + for (int i = 0; i < jsonArr.size(); i++) + { + char* str = (char*)malloc(10 * sizeof(char)); + OzgCCUtility::itoa(jsonArr[i].getInt(), str); + wq.append(str); + + if(i + 1 < jsonArr.size()) + wq.append(", "); + + free(str); + } + if((int)wq.length() > 0) + { + CppSQLite3Query skillQuery = this->m_db->execQuery(CCString::createWithFormat(SKILL_QUERY, wq.c_str())->getCString()); + while(!skillQuery.eof()) + { + RPGSkill *skill = RPGSkill::create(); + skill->m_name = skillQuery.getStringField("name_cns"); + skill->m_mp = skillQuery.getIntField("mp"); + skill->m_skillAttack = skillQuery.getIntField("skill_attack"); + + this->m_skillList->addObject(skill); + + skillQuery.nextRow(); + } + skillQuery.finalize(); + } + + CCTableView *tableView = (CCTableView*)this->getChildByTag(kRPGMapStatusMenuLayerTagPlayerSkillTable); + if(!tableView) + { + tableView = CCTableView::create(this, CCSizeMake(600, 265)); + tableView->setDirection(kCCScrollViewDirectionVertical); + tableView->setPosition(ccp(340, 20)); + tableView->setDelegate(this); + tableView->setVerticalFillOrder(kCCTableViewFillTopDown); + tableView->setTag(kRPGMapStatusMenuLayerTagPlayerSkillTable); + this->addChild(tableView); + } + tableView->reloadData(); + + query.nextRow(); + } + query.finalize(); + +} + +void RPGMapStatusMenuLayer::removeAllPlayerLab() +{ + //清理各个lab部分 + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerName)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerName, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerLevel)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerLevel, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerHP)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerHP, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerMP)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerMP, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerAttack)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerAttack, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerDefense)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerDefense, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerSpeed)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerSpeed, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerSkillAttack)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerSkillAttack, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerSkillDefense)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerSkillDefense, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerEquipArms)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerEquipArms, true); + + if(this->getChildByTag(kRPGMapMenuLayerTagStatusPlayerEquipArmor)) + this->removeChildByTag(kRPGMapMenuLayerTagStatusPlayerEquipArmor, true); +} + +//CCTableView +void RPGMapStatusMenuLayer::scrollViewDidScroll(CCScrollView *scrollView) +{ + +} + +void RPGMapStatusMenuLayer::scrollViewDidZoom(CCScrollView *scrollView) +{ + +} + +void RPGMapStatusMenuLayer::tableCellTouched(CCTableView *tableView, CCTableViewCell *cell) +{ + +} + +CCSize RPGMapStatusMenuLayer::cellSizeForTable(CCTableView *tableView) +{ + return CCSizeMake(tableView->getContentSize().width, 80); +} + +CCTableViewCell* RPGMapStatusMenuLayer::tableCellAtIndex(CCTableView *tableView, unsigned int idx) +{ + CCTableViewCell *cell = tableView->dequeueCell(); + if (!cell) + { + cell = new CCTableViewCell(); + cell->autorelease(); + } + else + cell->removeAllChildrenWithCleanup(true); + + float x = 150; + for (int i = 0; i < 3; i++) + { + int index = idx * 3 + i; + + if(index >= this->m_skillList->count()) + break; + + RPGSkill *skillData = (RPGSkill*)this->m_skillList->objectAtIndex(index); + + CCLabelTTF *textLab = CCLabelTTF::create(CCString::createWithFormat("%s (%i)", skillData->m_name.c_str(), skillData->m_mp)->getCString(), "Arial", 20, CCSizeMake(200, 25), kCCTextAlignmentLeft); + textLab->setPosition(ccp(x, 0)); + cell->addChild(textLab); + + x += 200; + } + + return cell; +} + +unsigned int RPGMapStatusMenuLayer::numberOfCellsInTableView(CCTableView *tableView) +{ + int rowItemCount = 3; + int size = this->m_skillList->count(); + + if(size % rowItemCount == 0) + return size / rowItemCount; + else + return size / rowItemCount + 1; +} + +//CCTableView end diff --git a/Classes/RPGMapStatusMenuLayer.h b/Classes/RPGMapStatusMenuLayer.h new file mode 100644 index 0000000..cf84e00 --- /dev/null +++ b/Classes/RPGMapStatusMenuLayer.h @@ -0,0 +1,71 @@ +// +// RPGMapStatusMenuLayer.h +// OzgGameRPG +// +// Created by ozg on 14-4-10. +// +// + +#ifndef __OzgGameRPG__RPGMapStatusMenuLayer__ +#define __OzgGameRPG__RPGMapStatusMenuLayer__ + +#include "cocos2d.h" +#include "cocos-ext.h" +#include "CppSQLite3.h" +#include "JsonBox.h" +#include "RPGMapRoleSprite.h" +#include "RPGBaseSceneLayer.h" + +USING_NS_CC; +USING_NS_CC_EXT; + +enum RPGMapStatusMenuLayerTag +{ + kRPGMapStatusMenuLayerTagBg = 1, + kRPGMapStatusMenuLayerTagMainMenu = 2, + kRPGMapStatusMenuLayerTagMainMenuBack = 12, + kRPGMapStatusMenuLayerTagPlayerSkillTable = 25, + kRPGMapStatusMenuLayerTagMainMenuPlayer = 100 + +}; + +class RPGMapStatusMenuLayer : public CCLayerColor, CCTableViewDelegate, CCTableViewDataSource +{ + +private: + + bool m_statusIsDefault; //是否为第一次进入状态界面,如果是的话就不播放效果音了 + + CCDictionary* m_stringList; + CppSQLite3DB* m_db; + + CCArray* m_skillList; //状态界面的技能列表 + + void onMenu(cocos2d::CCObject *pObject); + void setStatusPlayer(int dataId); + void removeAllPlayerLab(); //每次点击查看状态的时候都要将正在显示的lab部分清理掉 + +public: + + RPGMapStatusMenuLayer(); + virtual ~RPGMapStatusMenuLayer(); + + bool init(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); + static RPGMapStatusMenuLayer* create(CCDictionary* stringList, CppSQLite3DB* db, float width, float height); + + //CCTableViewDelegate继承自CCScrollViewDelegate + virtual void scrollViewDidScroll(CCScrollView* scrollView); + virtual void scrollViewDidZoom(CCScrollView* scrollView); + + //点击哪个cell + virtual void tableCellTouched(CCTableView* tableView, CCTableViewCell* cell); + //每个cell的size + virtual CCSize cellSizeForTable(CCTableView *tableView); + //生成cell + virtual CCTableViewCell* tableCellAtIndex(CCTableView *tableView, unsigned int idx); + //cell的数量 + virtual unsigned int numberOfCellsInTableView(CCTableView *tableView); + +}; + +#endif /* defined(__OzgGameRPG__RPGMapStatusMenuLayer__) */ diff --git a/Resources/audio_battle_attack1.wav b/Resources/audio_battle_attack1.wav new file mode 100755 index 0000000000000000000000000000000000000000..22b2a9962c8d003a0a8abd6b4fb6bd4ce7fbaa31 GIT binary patch literal 1758 zcmah~PiWg#7gkaVXf(f3QGf0Tj5Xr}QAOcRY=XwYe%0(0>5yzfmnT|(%kz`pc z81Y=kwp~n_NRrTJ1OXoEc@X$qc3>EJo+lglL6pWJM~bG>AfLe?WL%9mm#CQx(5DnM}E+Jl$}d;;f1+LoskPnh2Vi zEi)=d3D=x#T!g6KSBGRe9r0d!*xgmrvspP2Nblpx`8du|zqwjF7K&+W7bt zQHMLvy7RZEqP5<(%Ac>UFTCCLy?qqW?0kj{Md@|u(dA+WT$}cMF*RH3&24*e{caKU zAKl;8r>9r%$-~bcuA{Sef1JC!?T#{je|?z`wjC0h9m~V}~AjC%J2Ax-ptp%SCQ(Z*Hs6>B~2l;qHUG-}-Mq{5I0s&6XX_PL|6m zu)FI|I^~;pua?Qyy?d>4dG+TTy!OrJ08L;2l6SURecel^C)H#m^qx&A7UR(I7<2oI z9TnAb>~{C|-KZ=wj*zB!f_fer&q9VZ6~z(ORV&EHh2T!7Z6@Vp6uSe>4ybDSLX1kM zt(rd*ru;15lbTG+<*=cs;d37*mgWkYG z*)+3ZyIyp7G!Bf`vpv_(s6pU70vYWc{K}+c56VQq%86@^fbeU2|^zu3=h0W^UyU7hlp}q5Vh}6o{WkjrN%%t zNK_oa^NWCz!jqk4k*9QZ62@svFyh>g1A++iF%v$vG~GrbDvxHdqx6QB8y30GuwfF0 zc@+9^f_*r=o^4wW4x%_qeOq_n82bT;fjpdnPmt>vhU?KVj%2B(+D%6|{pl#V{1EwM6QfOo2MVHx~gIkYy{ug5I!UV5ag; z*9g8^tGd;MvH{>Z3@arLY*{URImBw!F+kwd6!_!(z literal 0 HcmV?d00001 diff --git a/Resources/audio_battle_attack2.wav b/Resources/audio_battle_attack2.wav new file mode 100755 index 0000000000000000000000000000000000000000..500df4fb9bf95d99ed5b1689441c5ad2d3ade1e3 GIT binary patch literal 5060 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防御:%i status_speed 速度:%i - status_magic_attack + status_skill_attack 魔攻:%i - status_magic_defense + status_skill_defense 魔防:%i confirm_exit_ok 确定 diff --git a/Resources/select_player_style1.tmx b/Resources/select_player_style1.tmx new file mode 100644 index 0000000..7c7aa98 --- /dev/null +++ b/Resources/select_player_style1.tmx @@ -0,0 +1,16 @@ + + + + + + + + eJwTYWBgEKEhZkHDtLRr1D7KzKS3/9DNxoYBiMELMQ== + + + + + eJxjZWBgYKcT5gBiUQb6AYlR+6hunywQy9MJKwAxAIfVBNs= + + + diff --git a/proj.ios/OzgGameRPG.xcodeproj/project.pbxproj b/proj.ios/OzgGameRPG.xcodeproj/project.pbxproj index 5a8e77e..571f4fd 100644 --- a/proj.ios/OzgGameRPG.xcodeproj/project.pbxproj +++ b/proj.ios/OzgGameRPG.xcodeproj/project.pbxproj @@ -217,12 +217,16 @@ 46C59AD317641FF300F43DC3 /* AudioEngine.lua in Resources */ = {isa = PBXBuildFile; fileRef = 46C59AD117641FF300F43DC3 /* AudioEngine.lua */; }; 46C59AD417641FF300F43DC3 /* CCBReaderLoad.lua in Resources */ = {isa = PBXBuildFile; fileRef = 46C59AD217641FF300F43DC3 /* CCBReaderLoad.lua */; }; 8909857018F253DE0021AE26 /* battle_msg_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 8909856F18F253DE0021AE26 /* battle_msg_style1.tmx */; }; + 8936C3B518F6D72100AE709E /* select_player_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 8936C3B418F6D72100AE709E /* select_player_style1.tmx */; }; 895EC07318F05AE600C3814D /* RPGData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 895EC07118F05AE600C3814D /* RPGData.cpp */; }; 8960C17F18E7D0BD0075EF99 /* alert_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 8960C17E18E7D0BD0075EF99 /* alert_style1.tmx */; }; 8960C18218E7D51C0075EF99 /* RPGConfirmLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8960C18018E7D51C0075EF99 /* RPGConfirmLayer.cpp */; }; 896BAEE618EF04CF006581FD /* audio_battle_end.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 896BAEE318EF04CF006581FD /* audio_battle_end.mp3 */; }; 896BAEE718EF04CF006581FD /* audio_battle_menu.wav in Resources */ = {isa = PBXBuildFile; fileRef = 896BAEE418EF04CF006581FD /* audio_battle_menu.wav */; }; 896BAEE818EF04CF006581FD /* audio_battle_start.wav in Resources */ = {isa = PBXBuildFile; fileRef = 896BAEE518EF04CF006581FD /* audio_battle_start.wav */; }; + 8988A4DF18F42BDC004277ED /* audio_battle_attack1.wav in Resources */ = {isa = PBXBuildFile; fileRef = 8988A4DD18F42BDC004277ED /* audio_battle_attack1.wav */; }; + 8988A4E018F42BDC004277ED /* audio_battle_attack2.wav in Resources */ = {isa = PBXBuildFile; fileRef = 8988A4DE18F42BDC004277ED /* audio_battle_attack2.wav */; }; + 8988A4E318F42EDB004277ED /* RPGComputingResults.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8988A4E118F42EDB004277ED /* RPGComputingResults.cpp */; }; 8999051A18F17A3D00012A0E /* RPGBattleMenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8999051818F17A3D00012A0E /* RPGBattleMenu.cpp */; }; 8999051D18F17E6C00012A0E /* battle_battlemenu_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 8999051C18F17E6C00012A0E /* battle_battlemenu_style1.tmx */; }; 89CB7D7F18E9A47800A5921B /* map_menu1_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 89CB7D7C18E9A47800A5921B /* map_menu1_style1.tmx */; }; @@ -305,8 +309,13 @@ 89F5D14F18E7C5E5009D703C /* db.sys in Resources */ = {isa = PBXBuildFile; fileRef = 89F5D14E18E7C5E5009D703C /* db.sys */; }; 89F5D15318E7C70F009D703C /* CppSQLite3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 89F5D15118E7C70F009D703C /* CppSQLite3.cpp */; }; 9E427D0518EBBA9F00DA4E79 /* map_menu4_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 9E427D0418EBBA9F00DA4E79 /* map_menu4_style1.tmx */; }; + 9E5271DD18F647400018BD94 /* RPGMapStatusMenuLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E5271DB18F647400018BD94 /* RPGMapStatusMenuLayer.cpp */; }; + 9E5271E018F647B90018BD94 /* RPGMapItemsMenuLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E5271DE18F647B90018BD94 /* RPGMapItemsMenuLayer.cpp */; }; + 9E5271E318F648750018BD94 /* RPGMapEquipMenuLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E5271E118F648750018BD94 /* RPGMapEquipMenuLayer.cpp */; }; + 9E5271E618F6489B0018BD94 /* RPGMapSkillMenuLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E5271E418F6489B0018BD94 /* RPGMapSkillMenuLayer.cpp */; }; 9E5C5F6E18EE59BB00A68C36 /* battle_menu_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 9E5C5F6D18EE59BB00A68C36 /* battle_menu_style1.tmx */; }; 9E5C5F7118EE68BD00A68C36 /* RPGBattleMonsterSprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E5C5F6F18EE68BD00A68C36 /* RPGBattleMonsterSprite.cpp */; }; + 9E83B14A18F66151001E9616 /* RPGMapChoicePlayerMenuLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E83B14818F66151001E9616 /* RPGMapChoicePlayerMenuLayer.cpp */; }; ED35C0C718323498002A0750 /* CCArmatureAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED35C03818323497002A0750 /* CCArmatureAnimation.cpp */; }; ED35C0C818323498002A0750 /* CCProcessBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED35C03A18323497002A0750 /* CCProcessBase.cpp */; }; ED35C0C918323498002A0750 /* CCTween.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED35C03C18323497002A0750 /* CCTween.cpp */; }; @@ -814,6 +823,7 @@ 46C59AD117641FF300F43DC3 /* AudioEngine.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AudioEngine.lua; sourceTree = ""; }; 46C59AD217641FF300F43DC3 /* CCBReaderLoad.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CCBReaderLoad.lua; sourceTree = ""; }; 8909856F18F253DE0021AE26 /* battle_msg_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = battle_msg_style1.tmx; sourceTree = ""; }; + 8936C3B418F6D72100AE709E /* select_player_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = select_player_style1.tmx; sourceTree = ""; }; 895EC07118F05AE600C3814D /* RPGData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGData.cpp; path = ../Classes/RPGData.cpp; sourceTree = ""; }; 895EC07218F05AE600C3814D /* RPGData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGData.h; path = ../Classes/RPGData.h; sourceTree = ""; }; 8960C17E18E7D0BD0075EF99 /* alert_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = alert_style1.tmx; sourceTree = ""; }; @@ -822,6 +832,10 @@ 896BAEE318EF04CF006581FD /* audio_battle_end.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = audio_battle_end.mp3; sourceTree = ""; }; 896BAEE418EF04CF006581FD /* audio_battle_menu.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = audio_battle_menu.wav; sourceTree = ""; }; 896BAEE518EF04CF006581FD /* audio_battle_start.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = audio_battle_start.wav; sourceTree = ""; }; + 8988A4DD18F42BDC004277ED /* audio_battle_attack1.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = audio_battle_attack1.wav; sourceTree = ""; }; + 8988A4DE18F42BDC004277ED /* audio_battle_attack2.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = audio_battle_attack2.wav; sourceTree = ""; }; + 8988A4E118F42EDB004277ED /* RPGComputingResults.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGComputingResults.cpp; path = ../Classes/RPGComputingResults.cpp; sourceTree = ""; }; + 8988A4E218F42EDB004277ED /* RPGComputingResults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGComputingResults.h; path = ../Classes/RPGComputingResults.h; sourceTree = ""; }; 8999051818F17A3D00012A0E /* RPGBattleMenu.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGBattleMenu.cpp; path = ../Classes/RPGBattleMenu.cpp; sourceTree = ""; }; 8999051918F17A3D00012A0E /* RPGBattleMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGBattleMenu.h; path = ../Classes/RPGBattleMenu.h; sourceTree = ""; }; 8999051C18F17E6C00012A0E /* battle_battlemenu_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = battle_battlemenu_style1.tmx; sourceTree = ""; }; @@ -932,9 +946,19 @@ 89F5D15118E7C70F009D703C /* CppSQLite3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CppSQLite3.cpp; sourceTree = ""; }; 89F5D15218E7C70F009D703C /* CppSQLite3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CppSQLite3.h; sourceTree = ""; }; 9E427D0418EBBA9F00DA4E79 /* map_menu4_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = map_menu4_style1.tmx; sourceTree = ""; }; + 9E5271DB18F647400018BD94 /* RPGMapStatusMenuLayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGMapStatusMenuLayer.cpp; path = ../Classes/RPGMapStatusMenuLayer.cpp; sourceTree = ""; }; + 9E5271DC18F647400018BD94 /* RPGMapStatusMenuLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGMapStatusMenuLayer.h; path = ../Classes/RPGMapStatusMenuLayer.h; sourceTree = ""; }; + 9E5271DE18F647B90018BD94 /* RPGMapItemsMenuLayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGMapItemsMenuLayer.cpp; path = ../Classes/RPGMapItemsMenuLayer.cpp; sourceTree = ""; }; + 9E5271DF18F647B90018BD94 /* RPGMapItemsMenuLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGMapItemsMenuLayer.h; path = ../Classes/RPGMapItemsMenuLayer.h; sourceTree = ""; }; + 9E5271E118F648750018BD94 /* RPGMapEquipMenuLayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGMapEquipMenuLayer.cpp; path = ../Classes/RPGMapEquipMenuLayer.cpp; sourceTree = ""; }; + 9E5271E218F648750018BD94 /* RPGMapEquipMenuLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGMapEquipMenuLayer.h; path = ../Classes/RPGMapEquipMenuLayer.h; sourceTree = ""; }; + 9E5271E418F6489B0018BD94 /* RPGMapSkillMenuLayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGMapSkillMenuLayer.cpp; path = ../Classes/RPGMapSkillMenuLayer.cpp; sourceTree = ""; }; + 9E5271E518F6489B0018BD94 /* RPGMapSkillMenuLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGMapSkillMenuLayer.h; path = ../Classes/RPGMapSkillMenuLayer.h; sourceTree = ""; }; 9E5C5F6D18EE59BB00A68C36 /* battle_menu_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = battle_menu_style1.tmx; sourceTree = ""; }; 9E5C5F6F18EE68BD00A68C36 /* RPGBattleMonsterSprite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGBattleMonsterSprite.cpp; path = ../Classes/RPGBattleMonsterSprite.cpp; sourceTree = ""; }; 9E5C5F7018EE68BD00A68C36 /* RPGBattleMonsterSprite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGBattleMonsterSprite.h; path = ../Classes/RPGBattleMonsterSprite.h; sourceTree = ""; }; + 9E83B14818F66151001E9616 /* RPGMapChoicePlayerMenuLayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGMapChoicePlayerMenuLayer.cpp; path = ../Classes/RPGMapChoicePlayerMenuLayer.cpp; sourceTree = ""; }; + 9E83B14918F66151001E9616 /* RPGMapChoicePlayerMenuLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGMapChoicePlayerMenuLayer.h; path = ../Classes/RPGMapChoicePlayerMenuLayer.h; sourceTree = ""; }; ED35C03818323497002A0750 /* CCArmatureAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCArmatureAnimation.cpp; sourceTree = ""; }; ED35C03918323497002A0750 /* CCArmatureAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCArmatureAnimation.h; sourceTree = ""; }; ED35C03A18323497002A0750 /* CCProcessBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCProcessBase.cpp; sourceTree = ""; }; @@ -2316,6 +2340,16 @@ 89F5D0C918E7C579009D703C /* RPGLoadingSceneLayer.h */, 89F5D0CA18E7C579009D703C /* RPGMapMenuLayer.cpp */, 89F5D0CB18E7C579009D703C /* RPGMapMenuLayer.h */, + 9E5271DB18F647400018BD94 /* RPGMapStatusMenuLayer.cpp */, + 9E5271DC18F647400018BD94 /* RPGMapStatusMenuLayer.h */, + 9E5271DE18F647B90018BD94 /* RPGMapItemsMenuLayer.cpp */, + 9E5271DF18F647B90018BD94 /* RPGMapItemsMenuLayer.h */, + 9E5271E118F648750018BD94 /* RPGMapEquipMenuLayer.cpp */, + 9E5271E218F648750018BD94 /* RPGMapEquipMenuLayer.h */, + 9E5271E418F6489B0018BD94 /* RPGMapSkillMenuLayer.cpp */, + 9E5271E518F6489B0018BD94 /* RPGMapSkillMenuLayer.h */, + 9E83B14818F66151001E9616 /* RPGMapChoicePlayerMenuLayer.cpp */, + 9E83B14918F66151001E9616 /* RPGMapChoicePlayerMenuLayer.h */, 89CB7D8918E9A8BF00A5921B /* RPGMapDialogLayer.cpp */, 89CB7D8A18E9A8BF00A5921B /* RPGMapDialogLayer.h */, 89F5D0CC18E7C579009D703C /* RPGMapNPCRoleSprite.cpp */, @@ -2338,6 +2372,8 @@ 89F5D0D918E7C579009D703C /* RPGStartSceneLayer.h */, 8960C18018E7D51C0075EF99 /* RPGConfirmLayer.cpp */, 8960C18118E7D51C0075EF99 /* RPGConfirmLayer.h */, + 8988A4E118F42EDB004277ED /* RPGComputingResults.cpp */, + 8988A4E218F42EDB004277ED /* RPGComputingResults.h */, F293BB7E15EB831F00256477 /* AppDelegate.cpp */, F293BB7F15EB831F00256477 /* AppDelegate.h */, ); @@ -2347,6 +2383,9 @@ F293BC4615EB859D00256477 /* Resources */ = { isa = PBXGroup; children = ( + 8936C3B418F6D72100AE709E /* select_player_style1.tmx */, + 8988A4DD18F42BDC004277ED /* audio_battle_attack1.wav */, + 8988A4DE18F42BDC004277ED /* audio_battle_attack2.wav */, 8909856F18F253DE0021AE26 /* battle_msg_style1.tmx */, 896BAEE318EF04CF006581FD /* audio_battle_end.mp3 */, 896BAEE418EF04CF006581FD /* audio_battle_menu.wav */, @@ -2496,7 +2535,9 @@ 89F5D11D18E7C5C0009D703C /* actor115.png in Resources */, 896BAEE818EF04CF006581FD /* audio_battle_start.wav in Resources */, 89CB7D8118E9A47800A5921B /* map_menu3_style1.tmx in Resources */, + 8988A4E018F42BDC004277ED /* audio_battle_attack2.wav in Resources */, 89F5D10B18E7C5C0009D703C /* actor7_0.png in Resources */, + 8936C3B518F6D72100AE709E /* select_player_style1.tmx in Resources */, 89F5D14B18E7C5DD009D703C /* scene_start_cns.plist in Resources */, 896BAEE618EF04CF006581FD /* audio_battle_end.mp3 in Resources */, 89F5D10E18E7C5C0009D703C /* actor7_3.png in Resources */, @@ -2533,6 +2574,7 @@ 15C1569B1683138E00D239F2 /* Icon-57.png in Resources */, 15C1569C1683138E00D239F2 /* Icon-72.png in Resources */, 89EA57BE18EAF1EC00A10956 /* monsters.plist in Resources */, + 8988A4DF18F42BDC004277ED /* audio_battle_attack1.wav in Resources */, 15C1569D1683138E00D239F2 /* Icon-114.png in Resources */, 89F5D0EB18E7C5B4009D703C /* 方正粗圆简体.ttf in Resources */, 89EA57C118EAF2CB00A10956 /* battle_bg.png in Resources */, @@ -2622,6 +2664,7 @@ 298B2A3518D0671400C1920F /* ListViewReader.cpp in Sources */, 89EA57E418EB16F100A10956 /* Indenter.cpp in Sources */, 15C154111683112E00D239F2 /* CCControlColourPicker.cpp in Sources */, + 9E5271DD18F647400018BD94 /* RPGMapStatusMenuLayer.cpp in Sources */, 15C154121683112E00D239F2 /* CCControlHuePicker.cpp in Sources */, ED35C0EC18323498002A0750 /* UIButton.cpp in Sources */, 15C154131683112E00D239F2 /* CCControlPotentiometer.cpp in Sources */, @@ -2699,6 +2742,7 @@ ED35C0E018323498002A0750 /* UIWidget.cpp in Sources */, 15C1551F1683118600D239F2 /* b2BroadPhase.cpp in Sources */, 15C155201683118600D239F2 /* b2CollideCircle.cpp in Sources */, + 8988A4E318F42EDB004277ED /* RPGComputingResults.cpp in Sources */, 15C155211683118600D239F2 /* b2CollideEdge.cpp in Sources */, 15C155221683118600D239F2 /* b2CollidePolygon.cpp in Sources */, ED35C0E418323498002A0750 /* CocosGUI.cpp in Sources */, @@ -2732,10 +2776,12 @@ 375BD562186846090024609E /* TriggerObj.cpp in Sources */, 89F5D0DA18E7C579009D703C /* OzgCCScrollBgNode.cpp in Sources */, 15C155311683118600D239F2 /* b2Body.cpp in Sources */, + 9E5271E018F647B90018BD94 /* RPGMapItemsMenuLayer.cpp in Sources */, ED35C0ED18323498002A0750 /* UICheckBox.cpp in Sources */, 15C155321683118600D239F2 /* b2ContactManager.cpp in Sources */, 15C155331683118600D239F2 /* b2Fixture.cpp in Sources */, 15C155341683118600D239F2 /* b2Island.cpp in Sources */, + 9E5271E318F648750018BD94 /* RPGMapEquipMenuLayer.cpp in Sources */, 15C155351683118600D239F2 /* b2World.cpp in Sources */, 15C155361683118600D239F2 /* b2WorldCallbacks.cpp in Sources */, 15C155371683118600D239F2 /* b2ChainAndCircleContact.cpp in Sources */, @@ -2770,6 +2816,7 @@ 15C155491683118600D239F2 /* b2WeldJoint.cpp in Sources */, 15C1554A1683118600D239F2 /* b2WheelJoint.cpp in Sources */, 15C155591683118600D239F2 /* b2Rope.cpp in Sources */, + 9E5271E618F6489B0018BD94 /* RPGMapSkillMenuLayer.cpp in Sources */, 89F5D0E018E7C579009D703C /* RPGMapMenuLayer.cpp in Sources */, 15C155DA168311AA00D239F2 /* CDAudioManager.m in Sources */, ED35C0CE18323498002A0750 /* CCDecorativeDisplay.cpp in Sources */, @@ -2784,6 +2831,7 @@ 89F5D0E118E7C579009D703C /* RPGMapNPCRoleSprite.cpp in Sources */, 1583F16918D09FF900F3D630 /* UIScrollView.cpp in Sources */, 15C15688168311CB00D239F2 /* tolua_push.c in Sources */, + 9E83B14A18F66151001E9616 /* RPGMapChoicePlayerMenuLayer.cpp in Sources */, 89F5D0DE18E7C579009D703C /* RPGBaseSceneLayer.cpp in Sources */, 15C15689168311CB00D239F2 /* tolua_to.c in Sources */, 15CA8CF718696744000032AB /* LuaCocoStudio.cpp in Sources */, diff --git a/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcshareddata/OzgGameRPG.xccheckout b/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcshareddata/OzgGameRPG.xccheckout index 4c35f76..650d72b 100644 --- a/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcshareddata/OzgGameRPG.xccheckout +++ b/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcshareddata/OzgGameRPG.xccheckout @@ -5,7 +5,7 @@ IDESourceControlProjectFavoriteDictionaryKey IDESourceControlProjectIdentifier - 4FDD62E9-2541-480F-803E-E5350F16C735 + 3EC08042-5D09-4151-9F7B-A5E1B350A197 IDESourceControlProjectName OzgGameRPG IDESourceControlProjectOriginsDictionary diff --git a/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcuserdata/ouzhigang.xcuserdatad/UserInterfaceState.xcuserstate b/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcuserdata/ouzhigang.xcuserdatad/UserInterfaceState.xcuserstate index d038c627ca365d64be1a87f006ac73382a5b00e8..01f298510a09eee3cac4652181c5c4526a85dac5 100644 GIT binary patch delta 25212 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 delta 23634 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�p(U@dgljhwTpoK^9`Bf?H&Rb-FM{LY~fh;p?I7`FeQ zS_t7nks+G*4^A|OLO@msWq8dgKpjy%@>*4%SFZ2Tm_K5`wfoYD7||HOrPU=>MHS#< zBAKlkG--!ewMRwE4I}XBf0j>FYG%xZn*3=VMqemjFarBD{_%$q-YL@gja8ek8R$Oq ziuj;#(hYV3A!1;ME!Z=&5kY**AouA{Vj!a;2X*x9z@-O1jD$AdGr$9#zeKpWDG|yc zdSOXjJ1Q{jU}|x@dP3Aa3yxPthrmBED%A(5B|TFyLLP{+olyM%=@{<&m);=(MHhAy zC!bYVJYcG3yPQU$>o-PXpNUPB@OvHwlnPwzSXK=7pA7pzO-x*Dwpj-GOi@1UG~}^e zA8-v(rK^7!fs}H$GrYM1)sil!=Cz|Ttc7-bEPAs=M67$-KD!$o!8EfYNgzLXcp<#P zM4ka0>1KDZ*C#sRy0KNOVS@)sHta{Zs9mc~ty;4N%6Cjf*@mgQ=LAO^oh5aUw&_S_ zhE#q4NO4g->e*!QnqgS=;R@q90a0S$M;#Kl&ZnJ0<#&ft_rXC3+7*xbTGB@e2GNK&nYB`)$;H>m|p*V!$v74c~Xvu-&!NqF@YS~a1+AszgM_mpaQgeTLWDuRo ziX$0#;i2#gzBGI-f-%jb8R)D-0SyP!uq|&?PsMSEELvu6)lz{j+KGqEXxNbFl|#*5 zM?Hd}s+UW}S_)&r+`js@R=9+w+tPtklhu{%%(uE{$Tpl+;E3r+V$enVknH}UVGkI# zkiq#lEA$;1F@?d_9uh2^fMCqK02TJC)kM{muN9MYxui2HaC>BrYh(Y+M^k|(Br0aZ z8Cav9DrPYP6}?8Fw3r72>gCrRWx`#A>ldoGsRhb>bXxt~gJeFD?*0;zH3Y zE)wg-2GJ)j7MF-iMZb8QxJ+ymo5W@@Ahw9di>+c%42f;xa&d*YQd}jj7Td)&;#%

v`P`rxbc8b?hd?Lk^;*%*pmEzMW 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