diff --git a/Classes/RPGBattleMonsterSprite.cpp b/Classes/RPGBattleMonsterSprite.cpp index a8ff201..5efa6a8 100644 --- a/Classes/RPGBattleMonsterSprite.cpp +++ b/Classes/RPGBattleMonsterSprite.cpp @@ -71,27 +71,27 @@ void RPGBattleMonsterSprite::selected(bool isSelected) } -void RPGBattleMonsterSprite::showHurtResults(cocos2d::CCObject *target, int HPResults, CCNode* player) +void RPGBattleMonsterSprite::showEffectResults(cocos2d::CCObject *target, int HPResults, CCNode* player) { - addLab(this, kRPGBattleMonsterSpriteTagHurtResults, CCString::createWithFormat("%i", HPResults), 24, kCCTextAlignmentCenter, ccp(this->getContentSize().width / 2, this->getContentSize().height / 2)); + addLab(this, kRPGBattleMonsterSpriteTagEffectResults, CCString::createWithFormat("%i", HPResults), 24, kCCTextAlignmentCenter, ccp(this->getContentSize().width / 2, this->getContentSize().height / 2)); - CCLabelTTF *hurtResults = (CCLabelTTF*)this->getChildByTag(kRPGBattleMonsterSpriteTagHurtResults); + CCLabelTTF *effectResults = (CCLabelTTF*)this->getChildByTag(kRPGBattleMonsterSpriteTagEffectResults); //增加HP的话则使用绿色 if(HPResults > 0) - hurtResults->setFontFillColor(ccc3(80, 255, 90)); + effectResults->setFontFillColor(ccc3(80, 255, 90)); CCMoveBy *up = CCMoveBy::create(0.5, ccp(0, 30)); CCMoveBy *down = CCMoveBy::create(1, ccp(0, -30)); this->m_HPResults = HPResults; - hurtResults->runAction(CCSequence::create(CCEaseExponentialOut::create(up), CCEaseBounceOut::create(down), CCDelayTime::create(0.5), CCCallFunc::create(this, callfunc_selector(RPGBattleMonsterSprite::showHurtResultsEnd)), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackWithTargetHurtLabEnd), player), NULL)); + effectResults->runAction(CCSequence::create(CCEaseExponentialOut::create(up), CCEaseBounceOut::create(down), CCDelayTime::create(0.5), CCCallFunc::create(this, callfunc_selector(RPGBattleMonsterSprite::showEffectResultsEnd)), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackWithTargetEffectLabEnd), player), NULL)); } //private -void RPGBattleMonsterSprite::showHurtResultsEnd() +void RPGBattleMonsterSprite::showEffectResultsEnd() { this->m_data->m_HP += this->m_HPResults; diff --git a/Classes/RPGBattleMonsterSprite.h b/Classes/RPGBattleMonsterSprite.h index 82db294..d924a22 100644 --- a/Classes/RPGBattleMonsterSprite.h +++ b/Classes/RPGBattleMonsterSprite.h @@ -18,7 +18,7 @@ using namespace std; enum RPGBattleMonsterSpriteTag { kRPGBattleMonsterSpriteTagCursor = 1, - kRPGBattleMonsterSpriteTagHurtResults = 2 + kRPGBattleMonsterSpriteTagEffectResults = 2 }; @@ -29,7 +29,7 @@ private: int m_HPResults; //临时保存HP效果值 - void showHurtResultsEnd(); //showHurtResults执行完毕后执行,然后再执行showHurtResults参数中的回调 + void showEffectResultsEnd(); //showEffectResults执行完毕后执行,然后再执行showEffectResults参数中的回调 public: bool m_isSelected; @@ -44,7 +44,7 @@ public: void selected(bool isSelected); - void showHurtResults(CCObject* target, int HPResults, CCNode* player); //显示伤害值,target为回调对象,攻击的话HPResults传入的是负值 + void showEffectResults(CCObject* target, int HPResults, CCNode* player); //显示效果值,target为回调对象,攻击的话HPResults传入的是负值,回复的话为正值 }; diff --git a/Classes/RPGBattlePlayerSprite.cpp b/Classes/RPGBattlePlayerSprite.cpp index 75c04d2..75d1fb5 100644 --- a/Classes/RPGBattlePlayerSprite.cpp +++ b/Classes/RPGBattlePlayerSprite.cpp @@ -170,15 +170,49 @@ void RPGBattlePlayerSprite::animNormal() if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm)) this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true); + //战斗不能 + if(this->m_data->m_HP <= 0) + this->m_data->m_status = kRPGDataStatusDeath; + + //临死 + else if(this->m_data->m_HP <= 9) + this->m_data->m_status = kRPGDataStatusDying; + + if(this->m_data->m_status == kRPGDataStatusDeath) + { + this->animDeath(); + return; + } + else if(this->m_data->m_status == kRPGDataStatusDying) + { + this->animDying(); + return; + } + CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesNormal, 0.2); CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation)); this->runAction(animate); } +void RPGBattlePlayerSprite::animDying() +{ + this->stopAllActions(); + + if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm)) + this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true); + + CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesDying, 0.2); + CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation)); + this->runAction(animate); +} + void RPGBattlePlayerSprite::animDeath() { this->stopAllActions(); + if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm)) + this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true); + CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesDeath, 0.2); CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation)); this->runAction(animate); @@ -188,6 +222,9 @@ void RPGBattlePlayerSprite::animWin() { this->stopAllActions(); + if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm)) + this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true); + CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesWin, 0.2); CCRepeatForever *animate = CCRepeatForever::create(CCAnimate::create(animation)); this->runAction(animate); @@ -229,3 +266,32 @@ void RPGBattlePlayerSprite::animAttack(CCObject* target, cocos2d::CCObject *targ this->runAction(CCSequence::createWithTwoActions(CCAnimate::create(animation), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackResults), (void*)targetObjData))); } + +void RPGBattlePlayerSprite::showEffectResults(cocos2d::CCObject *target, int HPResults, CCNode* player) +{ + addLab(this, kRPGBattlePlayerSpriteTagEffectResults, CCString::createWithFormat("%i", HPResults), 24, kCCTextAlignmentCenter, ccp(this->getContentSize().width / 2, this->getContentSize().height / 2)); + + CCLabelTTF *effectResults = (CCLabelTTF*)this->getChildByTag(kRPGBattlePlayerSpriteTagEffectResults); + + //增加HP的话则使用绿色 + if(HPResults > 0) + effectResults->setFontFillColor(ccc3(80, 255, 90)); + + CCMoveBy *up = CCMoveBy::create(0.5, ccp(0, 30)); + CCMoveBy *down = CCMoveBy::create(1, ccp(0, -30)); + + this->m_HPResults = HPResults; + + effectResults->runAction(CCSequence::create(CCEaseExponentialOut::create(up), CCEaseBounceOut::create(down), CCDelayTime::create(0.5), CCCallFunc::create(this, callfunc_selector(RPGBattlePlayerSprite::showEffectResultsEnd)), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackWithTargetEffectLabEnd), player), NULL)); + +} + +//private +void RPGBattlePlayerSprite::showEffectResultsEnd() +{ + this->m_data->m_HP += this->m_HPResults; + + if(this->m_data->m_HP < 0) + this->m_data->m_HP = 0; + +} diff --git a/Classes/RPGBattlePlayerSprite.h b/Classes/RPGBattlePlayerSprite.h index 090f93e..7970e32 100644 --- a/Classes/RPGBattlePlayerSprite.h +++ b/Classes/RPGBattlePlayerSprite.h @@ -18,7 +18,8 @@ using namespace std; enum RPGBattlePlayerSpriteTag { kRPGBattlePlayerSpriteTagCursor = 1, - kRPGBattlePlayerSpriteTagArm = 2 + kRPGBattlePlayerSpriteTagArm = 2, + kRPGBattlePlayerSpriteTagEffectResults = 3 }; @@ -26,7 +27,9 @@ class RPGBattlePlayerSprite : public CCSprite { private: - + + int m_HPResults; //临时保存HP效果值 + CCArray* m_spriteFramesNormal; //通常 CCArray* m_spriteFramesHurt; //受到攻击 CCArray* m_spriteFramesDying; //临死 @@ -38,6 +41,8 @@ private: CCArray* m_spriteFramesSpecialAttack; //特殊攻击 CCArray* m_spriteFramesChanting; //咏唱 + void showEffectResultsEnd(); //showEffectResults执行完毕后执行,然后再执行showEffectResults参数中的回调 + public: RPGPlayer* m_data; @@ -51,12 +56,15 @@ public: void selected(bool isSelected); - void animNormal(); //执行通常时的状态 + void animNormal(); //执行通常时的状态,这个方法会根据实际HP的状态执行对应状态 + void animDying(); //执行临死的状态 void animDeath(); //执行战斗不能的状态 void animWin(); //执行胜利的状态 void animAttack(CCObject* target, CCObject *targetObjData); //执行一般攻击的动作,target为回调对象 + void showEffectResults(CCObject* target, int HPResults, CCNode* player); //显示效果值,target为回调对象,攻击的话HPResults传入的是负值,回复的话为正值 + }; #endif /* defined(__OzgGameRPG__RPGBattlePlayerSprite__) */ diff --git a/Classes/RPGBattleSceneLayer.cpp b/Classes/RPGBattleSceneLayer.cpp index 7992c80..4df8dde 100755 --- a/Classes/RPGBattleSceneLayer.cpp +++ b/Classes/RPGBattleSceneLayer.cpp @@ -9,6 +9,7 @@ #include "RPGBattleSceneLayer.h" #include "RPGLoadingSceneLayer.h" #include "RPGComputingResults.h" +#include "RPGStartSceneLayer.h" #define MONSTER_QUERY "select * from monster where map_id = %i order by random() limit 1" //随机出现怪物 @@ -108,6 +109,10 @@ bool RPGBattleSceneLayer::init() playerData->m_texPrefix = query.getStringField("tex_prefix"); playerData->m_exp = query.getIntField("exp"); playerData->m_progress = 0.0; //computingProgress方法会重新计算这个值 + playerData->m_status = kRPGDataStatusNormal; + + if(playerData->m_HP <= 0) + playerData->m_status = kRPGDataStatusDeath; playerData->m_speed = this->computingFloat(playerData->m_speed); this->m_speedTotal += playerData->m_speed; //累加速度总值 @@ -286,7 +291,7 @@ bool RPGBattleSceneLayer::init() this->computingProgress(); this->scheduleUpdate(); - + return true; } return false; @@ -391,6 +396,7 @@ void RPGBattleSceneLayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu); RPGBattleMenu *winResultsDialog = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagWinResultsDialog); + RPGBattleMenu *loseResultsDialog = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagLoseResultsDialog); if(battleMenu) { @@ -412,9 +418,13 @@ void RPGBattleSceneLayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { CCLog("攻击player"); + RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu); + RPGPlayer *playerData = battleMenu->m_playerData; + player->selected(false); this->removeChildByTag(kRPGBattleSceneLayerTagBattleMenu, true); + this->attack(playerData, player->m_data); } else player->selected(true); @@ -498,6 +508,38 @@ void RPGBattleSceneLayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) this->goToMap(); } + else if(loseResultsDialog) + { +// CCLog("战斗输了后返回初始界面"); + + this->enabledTouched(false); + this->removeAllChildrenWithCleanup(true); + + CCTextureCache::sharedTextureCache()->removeTextureForKey("monsters.png"); + CCTextureCache::sharedTextureCache()->removeTextureForKey("battle_bg.png"); + CCTextureCache::sharedTextureCache()->removeTextureForKey("attack10.png"); + CCTextureCache::sharedTextureCache()->removeTextureForKey("attack20.png"); + CCTextureCache::sharedTextureCache()->removeTextureForKey("attack30.png"); + CCTextureCache::sharedTextureCache()->removeTextureForKey("attack40.png"); + CCTextureCache::sharedTextureCache()->removeTextureForKey("attack_damage.png"); + + for (int i = 0; i < this->m_playerDataList->count(); i++) + { + RPGPlayer *playerData = (RPGPlayer*)this->m_playerDataList->objectAtIndex(i); + + CCTextureCache::sharedTextureCache()->removeTextureForKey(CCString::createWithFormat("%s_1.png", playerData->m_texPrefix.c_str())->getCString()); + CCTextureCache::sharedTextureCache()->removeTextureForKey(CCString::createWithFormat("%s_2.png", playerData->m_texPrefix.c_str())->getCString()); + CCTextureCache::sharedTextureCache()->removeTextureForKey(CCString::createWithFormat("%s_3.png", playerData->m_texPrefix.c_str())->getCString()); + } + + CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo(); + + SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(true); + SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio_start.mp3", true); + CCScene *s = RPGStartSceneLayer::scene(); + CCTransitionFade *t = CCTransitionFade::create(GAME_SCENE, s); + CCDirector::sharedDirector()->replaceScene(t); + } } @@ -579,6 +621,7 @@ void RPGBattleSceneLayer::goToMap() releaseTextures->addObject(CCString::create("attack20.png")); releaseTextures->addObject(CCString::create("attack30.png")); releaseTextures->addObject(CCString::create("attack40.png")); + releaseTextures->addObject(CCString::create("attack_damage.png")); for (int i = 0; i < this->m_playerDataList->count(); i++) { @@ -643,13 +686,33 @@ void RPGBattleSceneLayer::attackResults(cocos2d::CCNode *sender, void *data) SimpleAudioEngine::sharedEngine()->playEffect("audio_battle_attack2.wav"); // CCLog("计算伤害值"); - //发起攻击的对象 + + CCPoint particleSysPoint; + + //判断发起攻击的对象是player还是怪物 if(dynamic_cast(sender) != NULL) { - int HPResults = RPGComputingResults::attackResults(((RPGBattlePlayerSprite*)sender)->m_data->m_attack, ((RPGMonster*)data)->m_defense); + if(dynamic_cast((CCObject*)data) != NULL) + { + //player攻击怪物 + + RPGBattleMonsterSprite *targetMonster = (RPGBattleMonsterSprite*)this->getChildByTag(((RPGMonster*)data)->m_tag); + particleSysPoint = targetMonster->getPosition(); + + int HPResults = RPGComputingResults::attackResults(((RPGBattlePlayerSprite*)sender)->m_data->m_attack, ((RPGMonster*)data)->m_defense); + targetMonster->showEffectResults(this, -HPResults, sender); + } + else if(dynamic_cast((CCObject*)data) != NULL) + { + //player攻击player + RPGBattlePlayerSprite *targetPlayer = (RPGBattlePlayerSprite*)this->getChildByTag(kRPGBattleSceneLayerTagPlayer + ((RPGPlayer*)data)->m_dataId); + + particleSysPoint = targetPlayer->getPosition(); + + int HPResults = RPGComputingResults::attackResults(((RPGBattlePlayerSprite*)sender)->m_data->m_attack, ((RPGPlayer*)data)->m_defense); + targetPlayer->showEffectResults(this, -HPResults, sender); + } - RPGBattleMonsterSprite *monster = (RPGBattleMonsterSprite*)this->getChildByTag(((RPGMonster*)data)->m_tag); - monster->showHurtResults(this, -HPResults, sender); } else if(dynamic_cast(sender) != NULL) { @@ -658,15 +721,56 @@ void RPGBattleSceneLayer::attackResults(cocos2d::CCNode *sender, void *data) } + //显示攻击后的粒子效果 + CCParticleSystemQuad *particleSys = CCParticleSystemQuad::create("attack_damage.plist"); + particleSys->setAutoRemoveOnFinish(true); + particleSys->setPosition(particleSysPoint); + this->addChild(particleSys); + } -void RPGBattleSceneLayer::attackWithTargetHurtLabEnd(cocos2d::CCNode *sender, void* data) +void RPGBattleSceneLayer::attackWithTargetEffectLabEnd(cocos2d::CCNode *sender, void* data) { CCLog("攻击流程完毕"); if(dynamic_cast(sender->getParent()) != NULL) { + RPGBattlePlayerSprite *targetPlayer = (RPGBattlePlayerSprite*)sender->getParent(); + if(targetPlayer->m_data->m_HP <= 0) + { + //player战斗不能 + targetPlayer->m_data->m_status = kRPGDataStatusDeath; + targetPlayer->animDeath(); + } + + sender->removeFromParentAndCleanup(true); + + //更新下面显示的HP + CCLabelTTF *targetPlayerHP = (CCLabelTTF*)this->getChildByTag(kRPGBattleSceneLayerTagPlayerHP + targetPlayer->m_data->m_dataId); + targetPlayerHP->setString(CCString::createWithFormat("%i", targetPlayer->m_data->m_HP)->getCString()); + + //发起攻击的player还原通常时状态,并重新计算进度条 + RPGBattlePlayerSprite *srcPlayer = (RPGBattlePlayerSprite*)data; + + if(srcPlayer->m_data->m_status != kRPGDataStatusDeath) + srcPlayer->animNormal(); + + srcPlayer->m_data->m_progress = 0; + CCProgressTimer *battleProgress = (CCProgressTimer*)this->getChildByTag(kRPGBattleSceneLayerTagPlayerProgress + srcPlayer->m_data->m_dataId); + battleProgress->setPercentage(srcPlayer->m_data->m_progress); + + //判断是否胜利了 + if(!this->judgeLose()) + this->scheduleUpdate(); + else + { +// CCLog("输了"); + SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(true); + SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio_battle_lose.mp3", true); + + this->showLoseResults(); + } } else if(dynamic_cast(sender->getParent()) != NULL) { @@ -721,32 +825,34 @@ void RPGBattleSceneLayer::attackWithTargetHurtLabEnd(cocos2d::CCNode *sender, vo else sender->removeFromParentAndCleanup(true); + //发起攻击的player还原通常时状态,并重新计算进度条 RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)data; player->animNormal(); player->m_data->m_progress = 0; CCProgressTimer *battleProgress = (CCProgressTimer*)this->getChildByTag(kRPGBattleSceneLayerTagPlayerProgress + player->m_data->m_dataId); battleProgress->setPercentage(player->m_data->m_progress); - + + //判断是否胜利了 + if(!this->judgeWin()) + this->scheduleUpdate(); + else + { +// CCLog("胜利"); + SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(true); + SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio_battle_end.mp3", true); + + for (int i = 0; i < this->m_playerList->count(); i++) + { + RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)this->m_playerList->objectAtIndex(i); + if(player->m_data->m_status != kRPGDataStatusDeath) + player->animWin(); + } + + this->showWinResults(); + } } - if(!this->judgeWin()) - this->scheduleUpdate(); - else - { -// CCLog("胜利"); - SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(true); - SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio_battle_end.mp3", true); - - for (int i = 0; i < this->m_playerList->count(); i++) - { - RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)this->m_playerList->objectAtIndex(i); - if(player->m_data->m_status != kRPGDataStatusDeath) - player->animWin(); - } - - this->showWinResults(); - } } //private @@ -870,13 +976,21 @@ bool RPGBattleSceneLayer::judgeWin() if(total <= 0) return true; - return false; } bool RPGBattleSceneLayer::judgeLose() { + int total = 0; //统计活着的player + for (int i = 0; i < this->m_playerList->count(); i++) + { + RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)this->m_playerList->objectAtIndex(i); + if(player->m_data->m_status != kRPGDataStatusDeath) + total++; + } + if(total <= 0) + return true; return false; } @@ -1001,3 +1115,15 @@ void RPGBattleSceneLayer::showWinResults() } } + +void RPGBattleSceneLayer::showLoseResults() +{ + CCTMXTiledMap *loseResults = CCTMXTiledMap::create("battle_battle_style1.tmx"); + loseResults->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - loseResults->getContentSize().width) / 2, (CCDirector::sharedDirector()->getWinSize().height - loseResults->getContentSize().height) / 2)); + loseResults->setTag(kRPGBattleSceneLayerTagLoseResultsDialog); + this->addChild(loseResults); + + //显示title + addLab(loseResults, 5, CCString::create(((CCString*)this->m_stringList->objectForKey("lose_title"))->getCString()), 28, kCCTextAlignmentCenter, ccp(loseResults->getContentSize().width / 2, loseResults->getContentSize().height / 2)); + +} diff --git a/Classes/RPGBattleSceneLayer.h b/Classes/RPGBattleSceneLayer.h index a016f7c..bac18e7 100755 --- a/Classes/RPGBattleSceneLayer.h +++ b/Classes/RPGBattleSceneLayer.h @@ -22,6 +22,7 @@ enum RPGBattleSceneLayerTag kRPGBattleSceneLayerTagMenuBg = 2, kRPGBattleSceneLayerTagBattleMenu = 3, kRPGBattleSceneLayerTagWinResultsDialog = 70, + kRPGBattleSceneLayerTagLoseResultsDialog = 71, kRPGBattleSceneLayerTagMsg = 98, kRPGBattleSceneLayerTagPlayer = 100, kRPGBattleSceneLayerTagPlayerNameLab = 200, @@ -73,6 +74,7 @@ private: bool judgeLose(); //判断是否输了,true为输了,false继续战斗 void showWinResults(); //显示胜利后获得的经验值和金钱,统计升级也在这里执行 + void showLoseResults(); //显示输了的界面 public: @@ -101,7 +103,7 @@ public: void attack(CCObject* attackObjData, CCObject* targetObjData); //player或怪物执行攻击 void attackResults(CCNode* sender, void* data); //回调,计算攻击后的结果 - void attackWithTargetHurtLabEnd(CCNode* sender, void* data); //回调,攻击流程完毕后执行,这个sender是被攻击的对象中显示的伤害值CCLabelTTF + void attackWithTargetEffectLabEnd(CCNode* sender, void* data); //回调,攻击流程完毕后执行,这个sender是被攻击的对象中显示的伤害值CCLabelTTF }; diff --git a/Classes/RPGData.h b/Classes/RPGData.h index 335c314..ac84ad6 100644 --- a/Classes/RPGData.h +++ b/Classes/RPGData.h @@ -16,8 +16,8 @@ using namespace std; enum RPGDataStatus { kRPGDataStatusNormal = 1, //通常时 - kRPGDataStatusDeath = 2 //战斗不能 - + kRPGDataStatusDeath = 2, //战斗不能 + kRPGDataStatusDying = 3 //临死 }; class RPGPlayer : public CCObject diff --git a/Classes/RPGMapSceneLayer.cpp b/Classes/RPGMapSceneLayer.cpp index 9fd8236..04c4ba4 100755 --- a/Classes/RPGMapSceneLayer.cpp +++ b/Classes/RPGMapSceneLayer.cpp @@ -615,41 +615,8 @@ void RPGMapSceneLayer::playerMoveEnd() CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); this->unscheduleUpdate(); - //保存进度 CCTMXTiledMap *bgMap = (CCTMXTiledMap*)this->getChildByTag(kRPGMapSceneLayerTagBgMap); - RPGMapRoleSprite *player = (RPGMapRoleSprite*)bgMap->getChildByTag(kRPGMapSceneLayerTagPlayer); - float toX = player->getPositionX(); - float toY = player->getPositionY(); - toX = toX / GAME_TMX_ROLE_WIDTH; - toY = toY / GAME_TMX_ROLE_HEIGHT; - - string playerDirection; - switch (player->m_direction) - { - case kRPGMapRoleSpriteDirectionDown: - playerDirection = "down"; - - break; - case kRPGMapRoleSpriteDirectionLeft: - playerDirection = "left"; - - break; - case kRPGMapRoleSpriteDirectionRight: - playerDirection = "right"; - - break; - default: - //kRPGMapRoleSpriteDirectionUp - playerDirection = "up"; - - break; - } - - saveData(&this->m_db, this->m_mapData.mapId, toX, toY, playerDirection); - - //保存进度结束 - CCArray *loadTextures = CCArray::create(); loadTextures->addObject(CCString::create("monsters.png")); loadTextures->addObject(CCString::create("battle_bg.png")); diff --git a/Resources/attack_damage.plist b/Resources/attack_damage.plist new file mode 100755 index 0000000..21b4ac0 --- /dev/null +++ b/Resources/attack_damage.plist @@ -0,0 +1,108 @@ + + + + + angle + 0 + angleVariance + 140.5500030517578 + blendFuncDestination + 771 + blendFuncSource + 1 + duration + 0.300000011920929 + emitterType + 0 + finishColorAlpha + 0 + finishColorBlue + 0 + finishColorGreen + 0 + finishColorRed + 1 + finishColorVarianceAlpha + 0 + finishColorVarianceBlue + 0 + finishColorVarianceGreen + 0 + finishColorVarianceRed + 1 + finishParticleSize + 0 + finishParticleSizeVariance + 0 + gravityx + 0 + gravityy + -3000 + maxParticles + 197 + maxRadius + 100 + maxRadiusVariance + 0 + minRadius + 0 + particleLifespan + 0 + particleLifespanVariance + 0.328900009393692 + radialAccelVariance + 0 + radialAcceleration + 0 + rotatePerSecond + 0 + rotatePerSecondVariance + 0 + rotationEnd + 0 + rotationEndVariance + 0 + rotationStart + 0 + rotationStartVariance + 0 + sourcePositionVariancex + 0 + sourcePositionVariancey + 0 + sourcePositionx + 163.5 + sourcePositiony + 234.3500061035156 + speed + 519.739990234375 + speedVariance + 440.7900085449219 + startColorAlpha + 1 + startColorBlue + 0 + startColorGreen + 0 + startColorRed + 1 + startColorVarianceAlpha + 0 + startColorVarianceBlue + 0 + startColorVarianceGreen + 0 + startColorVarianceRed + 1 + startParticleSize + 64 + startParticleSizeVariance + 64 + tangentialAccelVariance + 0 + tangentialAcceleration + 309.4700012207031 + textureFileName + attack_damage.png + + diff --git a/Resources/attack_damage.png b/Resources/attack_damage.png new file mode 100755 index 0000000..b19db04 Binary files /dev/null and b/Resources/attack_damage.png differ diff --git a/Resources/audio_battle_lose.mp3 b/Resources/audio_battle_lose.mp3 new file mode 100755 index 0000000..96e6485 Binary files /dev/null and b/Resources/audio_battle_lose.mp3 differ diff --git a/Resources/db.sys b/Resources/db.sys index b8dd748..82370f8 100755 Binary files a/Resources/db.sys and b/Resources/db.sys differ diff --git a/Resources/scene_battle_cns.plist b/Resources/scene_battle_cns.plist index 7e955de..4ccf8b5 100755 --- a/Resources/scene_battle_cns.plist +++ b/Resources/scene_battle_cns.plist @@ -6,6 +6,8 @@ 逃跑成功 escape_fail 逃跑失败 + lose_title + 我方人员已被全灭! win_title 战斗结束! win_gold diff --git a/proj.ios/OzgGameRPG.xcodeproj/project.pbxproj b/proj.ios/OzgGameRPG.xcodeproj/project.pbxproj index 8693331..f8a48a1 100644 --- a/proj.ios/OzgGameRPG.xcodeproj/project.pbxproj +++ b/proj.ios/OzgGameRPG.xcodeproj/project.pbxproj @@ -231,6 +231,8 @@ 890F1B671902E284002F2769 /* attack40.png in Resources */ = {isa = PBXBuildFile; fileRef = 890F1B5B1902E284002F2769 /* attack40.png */; }; 891DEB7819054276005337E5 /* battle_battle_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 891DEB7719054276005337E5 /* battle_battle_style1.tmx */; }; 8936C3B518F6D72100AE709E /* select_player_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 8936C3B418F6D72100AE709E /* select_player_style1.tmx */; }; + 893D34D41906B01100BFE2C5 /* attack_damage.plist in Resources */ = {isa = PBXBuildFile; fileRef = 893D34D21906B01100BFE2C5 /* attack_damage.plist */; }; + 893D34D51906B01100BFE2C5 /* attack_damage.png in Resources */ = {isa = PBXBuildFile; fileRef = 893D34D31906B01100BFE2C5 /* attack_damage.png */; }; 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 /* RPGDialogLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8960C18018E7D51C0075EF99 /* RPGDialogLayer.cpp */; }; @@ -323,6 +325,7 @@ 89F5D14D18E7C5DD009D703C /* Window_b_00.png in Resources */ = {isa = PBXBuildFile; fileRef = 89F5D13C18E7C5DD009D703C /* Window_b_00.png */; }; 89F5D14F18E7C5E5009D703C /* db.sys in Resources */ = {isa = PBXBuildFile; fileRef = 89F5D14E18E7C5E5009D703C /* db.sys */; }; 89F5D15318E7C70F009D703C /* CppSQLite3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 89F5D15118E7C70F009D703C /* CppSQLite3.cpp */; }; + 9E3E72551907740500631E9A /* audio_battle_lose.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 9E3E72541907740500631E9A /* audio_battle_lose.mp3 */; }; 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 */; }; @@ -852,6 +855,8 @@ 890F1B5B1902E284002F2769 /* attack40.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = attack40.png; sourceTree = ""; }; 891DEB7719054276005337E5 /* battle_battle_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = battle_battle_style1.tmx; sourceTree = ""; }; 8936C3B418F6D72100AE709E /* select_player_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = select_player_style1.tmx; sourceTree = ""; }; + 893D34D21906B01100BFE2C5 /* attack_damage.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = attack_damage.plist; sourceTree = ""; }; + 893D34D31906B01100BFE2C5 /* attack_damage.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = attack_damage.png; 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 = ""; }; @@ -976,6 +981,7 @@ 89F5D14E18E7C5E5009D703C /* db.sys */ = {isa = PBXFileReference; lastKnownFileType = file; path = db.sys; sourceTree = ""; }; 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 = ""; }; + 9E3E72541907740500631E9A /* audio_battle_lose.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = audio_battle_lose.mp3; 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 = ""; }; @@ -2416,6 +2422,8 @@ F293BC4615EB859D00256477 /* Resources */ = { isa = PBXGroup; children = ( + 893D34D21906B01100BFE2C5 /* attack_damage.plist */, + 893D34D31906B01100BFE2C5 /* attack_damage.png */, 890F1B501902E284002F2769 /* attack1.ExportJson */, 890F1B511902E284002F2769 /* attack2.ExportJson */, 890F1B521902E284002F2769 /* attack3.ExportJson */, @@ -2432,6 +2440,7 @@ 8988A4DD18F42BDC004277ED /* audio_battle_attack1.wav */, 8988A4DE18F42BDC004277ED /* audio_battle_attack2.wav */, 8909856F18F253DE0021AE26 /* battle_msg_style1.tmx */, + 9E3E72541907740500631E9A /* audio_battle_lose.mp3 */, 896BAEE318EF04CF006581FD /* audio_battle_end.mp3 */, 896BAEE418EF04CF006581FD /* audio_battle_menu.wav */, 896BAEE518EF04CF006581FD /* audio_battle_start.wav */, @@ -2596,6 +2605,7 @@ 89F5D11B18E7C5C0009D703C /* actor113.png in Resources */, 89F5D14C18E7C5DD009D703C /* start_bg.png in Resources */, 89F5D12718E7C5CC009D703C /* audio_effect_btn.wav in Resources */, + 9E3E72551907740500631E9A /* audio_battle_lose.mp3 in Resources */, 89E63C7A18ED83C900BDD04F /* actor8_0.png in Resources */, 890F1B621902E284002F2769 /* attack20.plist in Resources */, 15C156981683138E00D239F2 /* Default-568h@2x.png in Resources */, @@ -2606,6 +2616,7 @@ 89F5D14018E7C5DD009D703C /* main.png in Resources */, 890F1B611902E284002F2769 /* attack10.png in Resources */, 89F5D12618E7C5CC009D703C /* audio_battle.mp3 in Resources */, + 893D34D51906B01100BFE2C5 /* attack_damage.png in Resources */, 89F5D11F18E7C5C0009D703C /* actor120.png in Resources */, 89F5D14218E7C5DD009D703C /* map_02.tmx in Resources */, 89F5D14D18E7C5DD009D703C /* Window_b_00.png in Resources */, @@ -2641,6 +2652,7 @@ 89F5D10F18E7C5C0009D703C /* actor7_4.png in Resources */, 9E5C5F6E18EE59BB00A68C36 /* battle_menu_style1.tmx in Resources */, 1AC3623516D47C5C000847F2 /* fonts in Resources */, + 893D34D41906B01100BFE2C5 /* attack_damage.plist in Resources */, 89F5D14118E7C5DD009D703C /* map_01.tmx in Resources */, 890F1B5C1902E284002F2769 /* attack1.ExportJson in Resources */, 89F5D10C18E7C5C0009D703C /* actor7_1.png in Resources */, diff --git a/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcshareddata/OzgGameRPG.xccheckout b/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcshareddata/OzgGameRPG.xccheckout index 625f10c..51d0224 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 - 19829852-45B5-4792-8CE8-0261AFBA6094 + F2C82415-EB94-4FC6-83CD-0738BAC2C127 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 d3c81ad..26ee2b7 100644 Binary files a/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcuserdata/ouzhigang.xcuserdatad/UserInterfaceState.xcuserstate and b/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcuserdata/ouzhigang.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcuserdata/tpwid.xcuserdatad/UserInterfaceState.xcuserstate b/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcuserdata/tpwid.xcuserdatad/UserInterfaceState.xcuserstate index b7cca9e..4388832 100644 Binary files a/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcuserdata/tpwid.xcuserdatad/UserInterfaceState.xcuserstate and b/proj.ios/OzgGameRPG.xcodeproj/project.xcworkspace/xcuserdata/tpwid.xcuserdatad/UserInterfaceState.xcuserstate differ