数据结构调整,战斗场景完成一部分功能

This commit is contained in:
ozg
2014-04-22 20:35:39 +08:00
parent 0bd7d5a190
commit 97ca37bddd
47 changed files with 575 additions and 321 deletions
+5 -1
View File
@@ -16,6 +16,10 @@
#define GAME_TMX_ROLE_HEIGHT 32.0
#define GAME_PLAYER_MOVESPEED 0.5
#define GAME_INIT_SQL "insert into save_data (map_id, player_to_x, player_to_y, player_direction) values(1, 14.5, 9.5, 'down');"
#define GAME_INIT_SQL "insert into save_data (map_id, player_to_x, player_to_y, player_direction, gold) values(1, 14.5, 9.5, 'down', 200);"
#define MAX_GOLD 999999 //金钱最大值
#define MAX_STATUS1 9999 //HP最大值
#define MAX_STATUS2 999 //MP、攻击力、防御力、速度、技能攻击、技能防御的最大值
#endif
+2
View File
@@ -41,6 +41,8 @@ using namespace CocosDenshion;
//查询一个角色的技能
#define SKILL_QUERY "select * from skill where id in(%s)"
#define SAVEDATA_MAP_QUERY "select m.name as map_name, m.location_cns, sd.map_id, m.has_enemy, m.bg_audio, sd.player_to_x, sd.player_to_y, sd.player_direction, sd.gold from save_data as sd inner join map as m on sd.map_id = m.id where sd.id = 1" //获取存档和地图数据
//技能的属性
enum RPGSkillAttr
{
+1 -1
View File
@@ -86,7 +86,7 @@ void RPGBattleMonsterSprite::showHurtResults(cocos2d::CCObject *target, int HPRe
this->m_HPResults = HPResults;
hurtResults->runAction(CCSequence::create(CCEaseExponentialOut::create(up), CCEaseBounceOut::create(down), CCCallFunc::create(this, callfunc_selector(RPGBattleMonsterSprite::showHurtResultsEnd)), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackWithTargetHurtLabEnd), player), NULL));
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));
}
+232 -47
View File
@@ -10,7 +10,10 @@
#include "RPGLoadingSceneLayer.h"
#include "RPGComputingResults.h"
#define MONSTER_QUERY "select * from monster where map_id = %i order by random() limit 1"
#define MONSTER_QUERY "select * from monster where map_id = %i order by random() limit 1" //随机出现怪物
#define SAVE_GOLD "update save_data set gold = %i where id = 1" //保存金钱
#define UPDATE_PLAYER "update player set hp = %i, mp = %i, attack = %f, defense = %f, speed = %f, skill_attack = %f, skill_defense = %f, level = %i, skill = '%s', next_exp = %i, exp = %i where id = %i" //更新player数据,升级时用到
RPGBattleSceneLayer::RPGBattleSceneLayer()
{
@@ -26,6 +29,7 @@ RPGBattleSceneLayer::~RPGBattleSceneLayer()
CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFramesFromFile("monsters.plist");
// CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
CCLog("RPGBattleSceneLayer 释放");
}
@@ -102,6 +106,7 @@ bool RPGBattleSceneLayer::init()
playerData->m_itemsIdArms = query.getIntField("items_id_arms");
playerData->m_skill = query.getStringField("skill");
playerData->m_texPrefix = query.getStringField("tex_prefix");
playerData->m_exp = query.getIntField("exp");
playerData->m_progress = 0.0; //computingProgress方法会重新计算这个值
playerData->m_speed = this->computingFloat(playerData->m_speed);
@@ -205,6 +210,7 @@ bool RPGBattleSceneLayer::init()
monsterData->m_exp = query.getIntField("exp");
monsterData->m_skill = query.getStringField("skill");
monsterData->m_tex = query.getStringField("tex");
monsterData->m_gold = query.getIntField("gold");
monsterData->m_progress = 0.0; //computingProgress方法会重新计算这个值
monsterData->m_speed = this->computingFloat(monsterData->m_speed);
@@ -280,6 +286,7 @@ bool RPGBattleSceneLayer::init()
this->computingProgress();
this->scheduleUpdate();
return true;
}
return false;
@@ -383,68 +390,113 @@ void RPGBattleSceneLayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
CCPoint point = pTouch->getLocation();
RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu);
RPGBattleMenu *winResultsDialog = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagWinResultsDialog);
switch (battleMenu->m_selectedMenuTag)
if(battleMenu)
{
case kRPGBattleMenuTagAttack:
switch (battleMenu->m_selectedMenuTag)
{
// CCLog("攻击");
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
//检测选中的player
for (int i = 0; i < this->m_playerList->count(); i++)
case kRPGBattleMenuTagAttack:
{
RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)this->m_playerList->objectAtIndex(i);
if(player->boundingBox().containsPoint(point))
// CCLog("攻击");
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
//检测选中的player
for (int i = 0; i < this->m_playerList->count(); i++)
{
if(player->m_isSelected)
RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)this->m_playerList->objectAtIndex(i);
if(player->boundingBox().containsPoint(point))
{
CCLog("攻击player");
if(player->m_isSelected)
{
CCLog("攻击player");
player->selected(false);
this->removeChildByTag(kRPGBattleSceneLayerTagBattleMenu, true);
}
else
player->selected(true);
}
else
player->selected(false);
this->removeChildByTag(kRPGBattleSceneLayerTagBattleMenu, true);
}
else
player->selected(true);
}
else
player->selected(false);
}
//检测选中的怪物
for (int i = 0; i < this->m_monsterList->count(); i++)
{
RPGBattleMonsterSprite *monster = (RPGBattleMonsterSprite*)this->m_monsterList->objectAtIndex(i);
if(monster->boundingBox().containsPoint(point))
//检测选中的怪物
for (int i = 0; i < this->m_monsterList->count(); i++)
{
if(monster->m_isSelected)
RPGBattleMonsterSprite *monster = (RPGBattleMonsterSprite*)this->m_monsterList->objectAtIndex(i);
if(monster->boundingBox().containsPoint(point))
{
CCLog("攻击怪物");
RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu);
RPGPlayer *playerData = battleMenu->m_playerData;
monster->selected(false);
battleMenu->removeFromParentAndCleanup(true);
this->attack(playerData, monster->m_data);
if(monster->m_isSelected)
{
CCLog("攻击怪物");
RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu);
RPGPlayer *playerData = battleMenu->m_playerData;
monster->selected(false);
battleMenu->removeFromParentAndCleanup(true);
this->attack(playerData, monster->m_data);
}
else
monster->selected(true);
}
else
monster->selected(true);
monster->selected(false);
}
else
monster->selected(false);
}
break;
// default:
// break;
}
break;
// default:
// break;
}
else if(winResultsDialog)
{
CCLog("战斗胜利后返回地图界面");
//保存获得的金钱到数据库
{
CCString *sql = NULL;
CppSQLite3Query query = this->m_db.execQuery(CCString::create(SAVEDATA_QUERY)->getCString());
while(!query.eof())
{
this->m_totalGold = query.getIntField("gold") + this->m_totalGold;
//最大值的处理
if(this->m_totalGold > MAX_GOLD)
this->m_totalGold = MAX_GOLD;
sql = CCString::createWithFormat(SAVE_GOLD, this->m_totalGold);
query.nextRow();
}
query.finalize();
if(sql) this->m_db.execDML(sql->getCString());
}
//保存player的状态到数据库
for (int i = 0; i < this->m_playerDataList->count(); i++)
{
RPGPlayer *playerData = (RPGPlayer*)this->m_playerDataList->objectAtIndex(i);
CCString *sql = CCString::createWithFormat(UPDATE_PLAYER, playerData->m_HP, playerData->m_MP, playerData->m_attack, playerData->m_defense, playerData->m_speed, playerData->m_skillAttack, playerData->m_skillDefense, playerData->m_level, playerData->m_skill.c_str(), playerData->m_nextExp, playerData->m_exp, playerData->m_dataId);
// CCLog("%s", sql->getCString());
this->m_db.execDML(sql->getCString());
}
//保存现有道具到数据库
this->goToMap();
}
}
@@ -523,6 +575,18 @@ void RPGBattleSceneLayer::goToMap()
CCArray *releaseTextures = CCArray::create();
releaseTextures->addObject(CCString::create("monsters.png"));
releaseTextures->addObject(CCString::create("battle_bg.png"));
releaseTextures->addObject(CCString::create("attack10.png"));
releaseTextures->addObject(CCString::create("attack20.png"));
releaseTextures->addObject(CCString::create("attack30.png"));
releaseTextures->addObject(CCString::create("attack40.png"));
for (int i = 0; i < this->m_playerDataList->count(); i++)
{
RPGPlayer *playerData = (RPGPlayer*)this->m_playerDataList->objectAtIndex(i);
releaseTextures->addObject(CCString::createWithFormat("%s_1.png", playerData->m_texPrefix.c_str()));
releaseTextures->addObject(CCString::createWithFormat("%s_2.png", playerData->m_texPrefix.c_str()));
releaseTextures->addObject(CCString::createWithFormat("%s_3.png", playerData->m_texPrefix.c_str()));
}
CCScene *s = RPGLoadingSceneLayer::scene(loadTextures, releaseTextures, "single_map");
CCTransitionFade *t = CCTransitionFade::create(GAME_SCENE, s);
@@ -681,8 +745,7 @@ void RPGBattleSceneLayer::attackWithTargetHurtLabEnd(cocos2d::CCNode *sender, vo
player->animWin();
}
//!!!计算获得的经验值和金钱后,显示
this->showWinResults();
}
}
@@ -816,3 +879,125 @@ bool RPGBattleSceneLayer::judgeLose()
return false;
}
void RPGBattleSceneLayer::showWinResults()
{
CCTMXTiledMap *winResults = CCTMXTiledMap::create("battle_battle_style1.tmx");
winResults->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - winResults->getContentSize().width) / 2, (CCDirector::sharedDirector()->getWinSize().height - winResults->getContentSize().height) / 2));
winResults->setTag(kRPGBattleSceneLayerTagWinResultsDialog);
this->addChild(winResults);
//显示title
addLab(winResults, 5, CCString::create(((CCString*)this->m_stringList->objectForKey("win_title"))->getCString()), 26, kCCTextAlignmentCenter, ccp(winResults->getContentSize().width / 2, 270));
//统计经验值,怪物的总经验值 / 活着的player总数
//player
int totalPlayer = 0;
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)
totalPlayer++;
}
//经验值和金钱
int totalExp = 0;
int totalGold = 0;
for (int i = 0; i < this->m_monsterDataList->count(); i++)
{
CCArray *monsters = (CCArray*)this->m_monsterDataList->objectAtIndex(i);
for (int j = 0; j < monsters->count(); j++)
{
RPGMonster *monsterData = (RPGMonster*)monsters->objectAtIndex(j);
totalExp += monsterData->m_exp;
totalGold += monsterData->m_gold;
}
}
this->m_totalGold = totalGold;
//显示获得的金钱
addLab(winResults, 6, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("win_gold"))->getCString(), totalGold), 20, kCCTextAlignmentCenter, ccp(winResults->getContentSize().width / 2, 220));
//显示各个player获得的经验值
float y = 170;
int exp = totalExp / totalPlayer;
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->m_data->m_exp += exp; //累加总经验
player->m_data->m_nextExp -= exp; //累减下一级经验值
if(player->m_data->m_nextExp <= 0)
{
//升级了
player->m_data->m_level++;
player->m_data->m_nextExp = player->m_data->m_level * player->m_data->m_exp; //计算下一级经验值
//提升能力值
switch (player->m_data->m_dataId)
{
case 2:
player->m_data->m_maxHP += 12;
player->m_data->m_maxMP += 43;
player->m_data->m_attack += 1;
player->m_data->m_defense += 2;
player->m_data->m_speed += 2;
player->m_data->m_skillAttack += 5;
player->m_data->m_skillDefense += 4;
break;
case 3:
player->m_data->m_maxHP += 8;
player->m_data->m_maxMP += 48;
player->m_data->m_attack += 1;
player->m_data->m_defense += 3;
player->m_data->m_speed += 2;
player->m_data->m_skillAttack += 4;
player->m_data->m_skillDefense += 5;
break;
case 4:
player->m_data->m_maxHP += 23;
player->m_data->m_maxMP += 21;
player->m_data->m_attack += 3;
player->m_data->m_defense += 3;
player->m_data->m_speed += 6;
player->m_data->m_skillAttack += 2;
player->m_data->m_skillDefense += 2;
break;
default:
player->m_data->m_maxHP += 49;
player->m_data->m_maxMP += 8;
player->m_data->m_attack += 6;
player->m_data->m_defense += 4;
player->m_data->m_speed += 3;
player->m_data->m_skillAttack += 1;
player->m_data->m_skillDefense += 1;
break;
}
//最大值的处理
if(player->m_data->m_maxHP > MAX_STATUS1) player->m_data->m_maxHP = MAX_STATUS1;
if(player->m_data->m_maxMP > MAX_STATUS2) player->m_data->m_maxMP = MAX_STATUS2;
if(player->m_data->m_attack > MAX_STATUS2) player->m_data->m_attack = MAX_STATUS2;
if(player->m_data->m_defense > MAX_STATUS2) player->m_data->m_defense = MAX_STATUS2;
if(player->m_data->m_speed > MAX_STATUS2) player->m_data->m_speed = MAX_STATUS2;
if(player->m_data->m_skillAttack > MAX_STATUS2) player->m_data->m_skillAttack = MAX_STATUS2;
if(player->m_data->m_skillDefense > MAX_STATUS2) player->m_data->m_skillDefense = MAX_STATUS2;
addLab(winResults, player->m_data->m_dataId, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("win_level_up"))->getCString(), player->m_data->m_name.c_str()), 18, kCCTextAlignmentLeft, ccp(230, y));
}
else
addLab(winResults, player->m_data->m_dataId, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("win_exp"))->getCString(), player->m_data->m_name.c_str(), exp), 18, kCCTextAlignmentLeft, ccp(230, y));
}
else
addLab(winResults, player->m_data->m_dataId, CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("win_exp"))->getCString(), player->m_data->m_name.c_str(), 0), 18, kCCTextAlignmentLeft, ccp(230, y));
y -= 40;
}
}
+5
View File
@@ -21,6 +21,7 @@ enum RPGBattleSceneLayerTag
kRPGBattleSceneLayerTagBg = 1,
kRPGBattleSceneLayerTagMenuBg = 2,
kRPGBattleSceneLayerTagBattleMenu = 3,
kRPGBattleSceneLayerTagWinResultsDialog = 70,
kRPGBattleSceneLayerTagMsg = 98,
kRPGBattleSceneLayerTagPlayer = 100,
kRPGBattleSceneLayerTagPlayerNameLab = 200,
@@ -55,6 +56,8 @@ private:
bool m_enabledTouched; //是否打开了可点击状态(主要可点击player或怪物)
int m_totalGold; //临时保存战斗胜利后所获得的金钱,用来在胜利后执行goToMap()之前使用的
//对应的怪物的tag是否存在m_monsterDataList
bool monsterDataListExistWithTag(int tag);
@@ -69,6 +72,8 @@ private:
bool judgeWin(); //判断是否胜利,true为胜利,false继续战斗
bool judgeLose(); //判断是否输了,true为输了,false继续战斗
void showWinResults(); //显示胜利后获得的经验值和金钱,统计升级也在这里执行
public:
RPGBattleSceneLayer();
+2
View File
@@ -42,6 +42,7 @@ public:
string m_skill;
int m_nextExp;
string m_texPrefix;
int m_exp; //总经验值
float m_progress; //进度条,数据库没有这个字段
@@ -71,6 +72,7 @@ public:
int m_exp;
string m_skill;
string m_tex;
int m_gold;
int m_tag; //格式为 enum tag + 0到999的无重复数(就算同一个怪物也不能重复)
+20 -15
View File
@@ -219,7 +219,7 @@ void RPGMapMenuLayer::createMenuItem(float x, float y, CCString *text, RPGMapMen
{
CCLabelTTF *menuItemsLabel = CCLabelTTF::create(OzgCCUtility::generalString(text->getCString()).c_str(), "FZCuYuan-M03S", 25, CCSizeMake(120, 40), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter);
CCMenuItemLabel *menuItems = CCMenuItemLabel::create(menuItemsLabel, this, menu_selector(RPGMapMenuLayer::onMenu));
menuItems = CCMenuItemLabel::create(menuItemsLabel, this, menu_selector(RPGMapMenuLayer::onMenu));
menuItems->setPosition(ccp(x, y));
menuItems->setTag(tag);
mainMenu->addChild(menuItems);
@@ -229,7 +229,7 @@ void RPGMapMenuLayer::createMenuItem(float x, float y, CCString *text, RPGMapMen
void RPGMapMenuLayer::setMainMenuDefault()
{
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu);
//显示右边的菜单项
CCString *menuItemsStr = (CCString*)this->m_stringList->objectForKey("menu_items");
this->createMenuItem(835, 570, menuItemsStr, kRPGMapMenuLayerTagMainMenuItems);
@@ -249,22 +249,27 @@ void RPGMapMenuLayer::setMainMenuDefault()
CCString *menuExitStr = (CCString*)this->m_stringList->objectForKey("menu_exit");
this->createMenuItem(835, 220, menuExitStr, kRPGMapMenuLayerTagMainMenuExit);
CCObject *item = NULL;
CCARRAY_FOREACH(mainMenu->getChildren(), item)
//分割线
CCSprite *separate = CCSprite::createWithSpriteFrameName("separate.png");
separate->setTag(kRPGMapMenuLayerTagSeparate);
separate->setPosition(ccp(840, 170));
separate->setScaleX(0.52);
this->addChild(separate);
//显示右下角的部分
addLab(this, kRPGMapMenuLayerTagGoldLab, CCString::createWithFormat("%s", ((CCString*)this->m_stringList->objectForKey("menu_gold"))->getCString()), 18, kCCTextAlignmentRight, ccp(630, 130));
addLab(this, kRPGMapMenuLayerTagMapLab, CCString::createWithFormat("%s", ((CCString*)this->m_stringList->objectForKey("menu_map"))->getCString()), 18, kCCTextAlignmentRight, ccp(630, 90));
CppSQLite3Query query = this->m_db->execQuery(CCString::create(SAVEDATA_MAP_QUERY)->getCString());
while(!query.eof())
{
CCMenuItem *menuItem = (CCMenuItem*)item;
if(menuItem->getTag() == kRPGMapMenuLayerTagMainMenuItems ||
menuItem->getTag() == kRPGMapMenuLayerTagMainMenuEquip ||
menuItem->getTag() == kRPGMapMenuLayerTagMainMenuSkill ||
menuItem->getTag() == kRPGMapMenuLayerTagMainMenuStatus ||
menuItem->getTag() == kRPGMapMenuLayerTagMainMenuClose ||
menuItem->getTag() == kRPGMapMenuLayerTagMainMenuExit)
menuItem->setVisible(true);
else
menuItem->setVisible(false);
addLab(this, kRPGMapMenuLayerTagGoldLab, CCString::createWithFormat("%i", query.getIntField("gold")), 18, kCCTextAlignmentLeft, ccp(1030, 130));
addLab(this, kRPGMapMenuLayerTagMapLab, CCString::createWithFormat("%s", query.getStringField("location_cns")), 18, kCCTextAlignmentLeft, ccp(1030, 90));
query.nextRow();
}
query.finalize();
}
void RPGMapMenuLayer::setDefaultInterface()
+5
View File
@@ -33,6 +33,11 @@ enum RPGMapMenuLayerTag
kRPGMapMenuLayerTagDialogExitOK = 9,
kRPGMapMenuLayerTagDialogCancel = 10,
kRPGMapMenuLayerTagDialog = 11,
kRPGMapMenuLayerTagSeparate = 23,
kRPGMapMenuLayerTagGoldLab = 24,
kRPGMapMenuLayerTagMapLab = 25,
kRPGMapMenuLayerTagGold = 26,
kRPGMapMenuLayerTagMap = 27,
kRPGMapMenuLayerTagDefualtPlayerTex = 200,
kRPGMapMenuLayerTagDefualtPlayerName = 300,
kRPGMapMenuLayerTagDefualtPlayerLevel = 400,
+18 -13
View File
@@ -14,6 +14,8 @@
#include "RPGMapDialogLayer.h"
#include "RPGLoadingSceneLayer.h"
#define NPC_QUERY "select * from npc where map_id = %i order by id desc" //查询该地图的NPC
RPGMapSceneLayer::RPGMapSceneLayer()
{
@@ -38,16 +40,6 @@ RPGMapSceneLayer::~RPGMapSceneLayer()
if(this->m_releaseTexture)
{
CCTextureCache::sharedTextureCache()->removeTextureForKey("map.png");
CCTextureCache::sharedTextureCache()->removeTextureForKey("main.png");
//数据库部分,释放npc的纹理
CppSQLite3Query query = this->m_db.execQuery("select * from npc order by id desc");
while(!query.eof())
{
CCTextureCache::sharedTextureCache()->removeTextureForKey(query.getStringField("map_texture"));
query.nextRow();
}
query.finalize();
//player部分
CCTextureCache::sharedTextureCache()->removeTextureForKey("actor4_0.png");
@@ -55,7 +47,17 @@ RPGMapSceneLayer::~RPGMapSceneLayer()
}
// CCLog("RPGMapSceneLayer释放");
//数据库部分,释放npc的纹理
CppSQLite3Query query = this->m_db.execQuery(CCString::createWithFormat(NPC_QUERY, this->m_mapData.mapId)->getCString());
while(!query.eof())
{
CCTextureCache::sharedTextureCache()->removeTextureForKey(query.getStringField("map_texture"));
query.nextRow();
}
query.finalize();
// CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
CCLog("RPGMapSceneLayer 释放");
}
bool RPGMapSceneLayer::init(float showObjectTime)
@@ -71,7 +73,7 @@ bool RPGMapSceneLayer::init(float showObjectTime)
this->m_stringList->retain();
//数据库部分,读取进度记录
CppSQLite3Query query = this->m_db.execQuery("select m.name as map_name, sd.map_id, m.has_enemy, m.bg_audio, sd.player_to_x, sd.player_to_y, sd.player_direction from save_data as sd inner join map as m on sd.map_id = m.id where sd.id = 1");
CppSQLite3Query query = this->m_db.execQuery(SAVEDATA_MAP_QUERY);
this->m_mapData.mapId = query.getIntField("map_id");
this->m_mapData.mapName = query.getStringField("map_name");
this->m_mapData.hasEnemy = query.getIntField("has_enemy") == 1 ? true : false;
@@ -79,6 +81,8 @@ bool RPGMapSceneLayer::init(float showObjectTime)
this->m_mapData.playerToX = query.getFloatField("player_to_x");
this->m_mapData.playerToY = query.getFloatField("player_to_y");
this->m_mapData.playerDirection = query.getStringField("player_direction");
this->m_mapData.location = query.getStringField("location_cns");
this->m_mapData.gold = query.getIntField("gold");
query.finalize();
CCTMXTiledMap *bgMap = CCTMXTiledMap::create(this->m_mapData.mapName.c_str());
@@ -103,6 +107,7 @@ bool RPGMapSceneLayer::init(float showObjectTime)
this->scheduleOnce(schedule_selector(RPGMapSceneLayer::startPlay), showObjectTime);
// CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
return true;
}
return false;
@@ -449,7 +454,7 @@ void RPGMapSceneLayer::startPlay(float delay)
CCTMXTiledMap *bgMap = (CCTMXTiledMap*)this->getChildByTag(kRPGMapSceneLayerTagBgMap);
//数据库部分,读取npc数据
CppSQLite3Query query = this->m_db.execQuery(CCString::createWithFormat("select * from npc where map_id = %i order by id desc", this->m_mapData.mapId)->getCString());
CppSQLite3Query query = this->m_db.execQuery(CCString::createWithFormat(NPC_QUERY, this->m_mapData.mapId)->getCString());
while(!query.eof())
{
float x = (stringToNumber<float>(query.getStringField("tmx_x")) + 0.5) * GAME_TMX_ROLE_WIDTH;
+2
View File
@@ -50,6 +50,8 @@ struct RPGMapData
float playerToX;
float playerToY;
string playerDirection;
string location;
int gold;
};
class RPGMapSceneLayer : public RPGBaseSceneLayer
+104 -17
View File
@@ -11,6 +11,12 @@
//执行操作后player的数据更新
#define PLAYER_UPDATE "update player set %s = %i where id = %i"
//更新player的各个状态值
#define PLAYER_UPDATE_STATUS "update player set attack = %f, defense = %f, speed = %f, skill_attack = %f, skill_defense = %f, %s = %i where id = %i"
//获取一个已有道具的总数
#define EXISTING_ITEMS_TOTAL "select total from items_existing where id = %i"
//丢弃一个道具
#define ITEMS_DISCARD "delete from items_existing where id = %i"
@@ -23,6 +29,21 @@
//查询一个技能的明细
#define SKILL_DETAIL_QUERY "select * from skill where id = %i"
//查询一条player数据
#define PLAYER_SINGLE_QUERY "select * from player where id = %i"
//查询一条items数据
#define ITEMS_SINGLE_QUERY "select * from items where id = %i"
//是否已存在该道具
#define EXIST_ITEMS "select count(id) from items_existing where id = %i"
//增加一个已有道具
#define ADD_EXISTING_ITEMS "insert into items_existing (id, total) values(%i, 1)"
//更新一个已有道具的数量
#define UPDATE_EXISTING_ITEMS "update items_existing set total = total + 1 where id = %i"
void RPGResultsLogic::discardItems(CppSQLite3DB *db, int itemsId)
{
db->execDML(CCString::createWithFormat(ITEMS_DISCARD, itemsId)->getCString());
@@ -206,7 +227,7 @@ void RPGResultsLogic::removeEquip(CppSQLite3DB *db, int playerId, int type)
return;
{
CppSQLite3Query query = db->execQuery(CCString::createWithFormat("select * from player where id = %i", playerId)->getCString());
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(PLAYER_SINGLE_QUERY, playerId)->getCString());
while(!query.eof())
{
itemsId = query.getIntField(itemField.c_str());
@@ -215,34 +236,64 @@ void RPGResultsLogic::removeEquip(CppSQLite3DB *db, int playerId, int type)
query.finalize();
}
float attack;
float defense;
float speed;
float skillAttack;
float skillDefense;
{
//player将装备卸下后各个值发生变化
CppSQLite3Query query = db->execQuery(CCString::createWithFormat("select * from items where id = %i", itemsId)->getCString());
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(ITEMS_SINGLE_QUERY, itemsId)->getCString());
while(!query.eof())
{
float attack = query.getFloatField("attack");
float defense = query.getFloatField("defense");
float speed = query.getFloatField("speed");
float skillAttack = query.getFloatField("skill_attack");
float skillDefense = query.getFloatField("skill_defense");
playerSql = CCString::createWithFormat("update player set attack = attack - %f, defense = defense - %f, speed = speed - %f, skill_attack = skill_attack - %f, skill_defense = skill_defense - %f, %s = 0 where id = %i", attack, defense, speed, skillAttack, skillDefense, itemField.c_str(), playerId);
attack = query.getFloatField("attack");
defense = query.getFloatField("defense");
speed = query.getFloatField("speed");
skillAttack = query.getFloatField("skill_attack");
skillDefense = query.getFloatField("skill_defense");
query.nextRow();
}
query.finalize();
}
//各个值的处理
{
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(PLAYER_SINGLE_QUERY, playerId)->getCString());
while(!query.eof())
{
attack = query.getFloatField("attack") - attack;
defense = query.getFloatField("defense") - defense;
speed = query.getFloatField("speed") - speed;
skillAttack = query.getFloatField("skill_attack") - skillAttack;
skillDefense = query.getFloatField("skill_defense") - skillDefense;
//最小值的处理
if(attack < 0) attack = 0;
if(defense < 0) defense = 0;
if(speed < 0) speed = 0;
if(skillAttack < 0) skillAttack = 0;
if(skillDefense < 0) skillDefense = 0;
query.nextRow();
}
query.finalize();
}
int equipId = 0;
playerSql = CCString::createWithFormat(PLAYER_UPDATE_STATUS, attack, defense, speed, skillAttack, skillDefense, itemField.c_str(), equipId, playerId);
{
//将卸下的装备放回已有道具处
CppSQLite3Query query = db->execQuery(CCString::createWithFormat("select count(id) from items_existing where id = %i", itemsId)->getCString());
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(EXIST_ITEMS, itemsId)->getCString());
while(!query.eof())
{
if(query.getIntField(0) <= 0)
itemsExistingSql = CCString::createWithFormat("insert into items_existing (id, total) values(%i, 1)", itemsId);
itemsExistingSql = CCString::createWithFormat(ADD_EXISTING_ITEMS, itemsId);
else
itemsExistingSql = CCString::createWithFormat("update items_existing set total = total + 1 where id = %i", itemsId);
itemsExistingSql = CCString::createWithFormat(UPDATE_EXISTING_ITEMS, itemsId);
query.nextRow();
}
@@ -270,7 +321,7 @@ void RPGResultsLogic::equip(CppSQLite3DB *db, int playerId, int itemsId)
{
//查询该装备的类型和效果值
CppSQLite3Query query = db->execQuery(CCString::createWithFormat("select * from items where id = %i", itemsId)->getCString());
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(ITEMS_SINGLE_QUERY, itemsId)->getCString());
while(!query.eof())
{
attack = query.getFloatField("attack");
@@ -293,18 +344,54 @@ void RPGResultsLogic::equip(CppSQLite3DB *db, int playerId, int itemsId)
else
return;
//如果已装备了则先卸掉此装备
{
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(PLAYER_SINGLE_QUERY, playerId)->getCString());
while(!query.eof())
{
if(query.getIntField(itemField.c_str()) != 0)
RPGResultsLogic::removeEquip(db, playerId, type);
query.nextRow();
}
query.finalize();
}
//各个值的处理
{
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(PLAYER_SINGLE_QUERY, playerId)->getCString());
while(!query.eof())
{
attack = query.getFloatField("attack") + attack;
defense = query.getFloatField("defense") + defense;
speed = query.getFloatField("speed") + speed;
skillAttack = query.getFloatField("skill_attack") + skillAttack;
skillDefense = query.getFloatField("skill_defense") + skillDefense;
//最大值的处理
if(attack > MAX_STATUS2) attack = MAX_STATUS2;
if(defense > MAX_STATUS2) defense = MAX_STATUS2;
if(speed > MAX_STATUS2) speed = MAX_STATUS2;
if(skillAttack > MAX_STATUS2) skillAttack = MAX_STATUS2;
if(skillDefense > MAX_STATUS2) skillDefense = MAX_STATUS2;
query.nextRow();
}
query.finalize();
}
//player装备了之后各个值发生变化
playerSql = CCString::createWithFormat("update player set attack = attack + %f, defense = defense + %f, speed = speed + %f, skill_attack = skill_attack + %f, skill_defense = skill_defense + %f, %s = %i where id = %i", attack, defense, speed, skillAttack, skillDefense, itemField.c_str(), itemsId, playerId);
playerSql = CCString::createWithFormat(PLAYER_UPDATE_STATUS, attack, defense, speed, skillAttack, skillDefense, itemField.c_str(), itemsId, playerId);
{
//扣减装备了的道具
CppSQLite3Query query = db->execQuery(CCString::createWithFormat("select total from items_existing where id = %i", itemsId)->getCString());
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(EXISTING_ITEMS_TOTAL, itemsId)->getCString());
while(!query.eof())
{
if(query.getIntField(0) <= 1)
itemsExistingSql = CCString::createWithFormat("delete from items_existing where id = %i", itemsId);
itemsExistingSql = CCString::createWithFormat(ITEMS_DISCARD, itemsId);
else
itemsExistingSql = CCString::createWithFormat("update items_existing set total = total - 1 where id = %i", itemsId);
itemsExistingSql = CCString::createWithFormat(ITEMS_DEDUCTIONS, itemsId);
query.nextRow();
}
+3 -3
View File
@@ -1,4 +1,4 @@
ozg game — 单机版RPG
ozg game — 单机版RPG(开发中…)
================
本游戏主要用于技术的研究和积累
@@ -9,9 +9,9 @@ ozg game — 单机版RPG
声音文件来自 http://www.66rpg.com/type.php?t=17
目前只在iOS平台下进行测试,战斗画面的攻击、技能、道具未完成。
目前只在iOS平台下进行测试,战斗画面的技能、道具未完成。
每次更新数据库都需要把模拟器里面的数据库删除。
每次更新完毕之后,数据结构都可能发生了变化,所以要把旧的数据库删除。
![](https://raw.github.com/ouzhigang/OzgGameRPG/master/screenshot1.png)
+5 -6
View File
@@ -45,7 +45,7 @@
"mov_data": [
{
"name": "main_anim",
"dr": 31,
"dr": 21,
"lp": false,
"to": 0,
"drTW": 0,
@@ -76,12 +76,11 @@
"z": 0,
"cX": 1.0,
"cY": 1.0,
"kX": 4.49408446E-07,
"kY": -4.49408446E-07,
"fi": 30,
"kX": 0.0,
"kY": 0.0,
"fi": 20,
"twE": 0,
"tweenFrame": true,
"evt": "attack1_end"
"tweenFrame": true
}
]
}
+3 -4
View File
@@ -45,7 +45,7 @@
"mov_data": [
{
"name": "main_anim",
"dr": 31,
"dr": 21,
"lp": false,
"to": 0,
"drTW": 0,
@@ -78,10 +78,9 @@
"cY": 1.0,
"kX": 0.0,
"kY": 0.0,
"fi": 30,
"fi": 20,
"twE": 0,
"tweenFrame": true,
"evt": "attack2_end"
"tweenFrame": true
}
]
}
+3 -4
View File
@@ -45,7 +45,7 @@
"mov_data": [
{
"name": "main_anim",
"dr": 31,
"dr": 21,
"lp": false,
"to": 0,
"drTW": 0,
@@ -78,10 +78,9 @@
"cY": 1.0,
"kX": 0.0,
"kY": 0.0,
"fi": 30,
"fi": 20,
"twE": 0,
"tweenFrame": true,
"evt": "attack3_end"
"tweenFrame": true
}
]
}
+3 -4
View File
@@ -45,7 +45,7 @@
"mov_data": [
{
"name": "main_anim",
"dr": 31,
"dr": 21,
"lp": false,
"to": 0,
"drTW": 0,
@@ -78,10 +78,9 @@
"cY": 1.0,
"kX": 0.0,
"kY": 0.0,
"fi": 30,
"fi": 20,
"twE": 0,
"tweenFrame": true,
"evt": "attack4_end"
"tweenFrame": true
}
]
}
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" width="20" height="20" tilewidth="16" tileheight="16">
<tileset firstgid="1" name="Window_b_00" tilewidth="16" tileheight="16">
<image source="Window_b_00.png" width="128" height="128"/>
</tileset>
<layer name="behind" width="20" height="20" opacity="0.79">
<data encoding="base64" compression="zlib">
eJwTZmBgEMaDefBgfPoIYWqbOWre4DGP2mmGFmmQWPME6WSeIBomxTxiMCnhR23zqJ3+ZIjAtCizRjEmBgDuqhsb
</data>
</layer>
<layer name="bront" width="20" height="20">
<data encoding="base64" compression="zlib">
eJxjZWBgYCMCsxOBOYCYl4F6QGDUvGFvnuioeaPmjZpHN/NkgVieSlgBiAGf4gVQ
</data>
</layer>
</map>
BIN
View File
Binary file not shown.
+8
View File
@@ -6,6 +6,14 @@
<string>逃跑成功</string>
<key>escape_fail</key>
<string>逃跑失败</string>
<key>win_title</key>
<string>战斗结束!</string>
<key>win_gold</key>
<string>获得金钱:%i</string>
<key>win_exp</key>
<string>%s 获得经验值:%i</string>
<key>win_level_up</key>
<string>%s 升级了</string>
<key>battle_playermenu_attack</key>
<string>攻击</string>
<key>battle_playermenu_defense</key>
+4
View File
@@ -32,6 +32,10 @@
<string>取消</string>
<key>confirm_exit</key>
<string>退出游戏返回到初始界面。</string>
<key>menu_gold</key>
<string>金钱:</string>
<key>menu_map</key>
<string>所在位置:</string>
<key>menu_back</key>
<string>后退</string>
<key>menu_close</key>
@@ -45,7 +45,7 @@
"mov_data": [
{
"name": "main_anim",
"dr": 31,
"dr": 21,
"lp": false,
"to": 0,
"drTW": 0,
@@ -76,12 +76,11 @@
"z": 0,
"cX": 1.0,
"cY": 1.0,
"kX": 4.49408446E-07,
"kY": -4.49408446E-07,
"fi": 30,
"kX": 0.0,
"kY": 0.0,
"fi": 20,
"twE": 0,
"tweenFrame": true,
"evt": "attack1_end"
"tweenFrame": true
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfGuidesProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GuidesProject>
<Project>attack1</Project>
<GuidesList />
</GuidesProject>
</ArrayOfGuidesProject>
+21
View File
@@ -0,0 +1,21 @@
<?xml version="1.0"?>
<AnimationProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ProjectDir>D:\root\Temp\OzgCocoStudio\attack1</ProjectDir>
<Version>1.3.0.1</Version>
<Resources>D:\root\Temp\OzgCocoStudio\attack1\Resources</Resources>
<Name>attack1</Name>
<JsonFileName>attack1.json</JsonFileName>
<JsonFolder>D:\root\Temp\OzgCocoStudio\attack1\Json</JsonFolder>
<JsonList />
<CanvasSize>
<Width>0</Width>
<Height>0</Height>
</CanvasSize>
<filePath>D:\root\Temp\OzgCocoStudio\attack1\attack1.xml.animation</filePath>
<ProjectType>AnimationProject</ProjectType>
<ResRelativePath />
<ResourceFileList>
<string>attack10.plist</string>
</ResourceFileList>
<bBatchImage>true</bBatchImage>
</AnimationProject>
-46
View File
@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>frames</key>
<dict>
<key>role_attack_01.png</key>
<dict>
<key>width</key>
<integer>38</integer>
<key>height</key>
<integer>25</integer>
<key>originalWidth</key>
<integer>38</integer>
<key>originalHeight</key>
<integer>25</integer>
<key>x</key>
<integer>0</integer>
<key>y</key>
<integer>0</integer>
<key>offsetX</key>
<real>0</real>
<key>offsetY</key>
<real>0</real>
</dict>
</dict>
<key>metadata</key>
<dict>
<key>format</key>
<integer>0</integer>
<key>textureFileName</key>
<string>attack10.png</string>
<key>realTextureFileName</key>
<string>attack10.png</string>
<key>size</key>
<string>{1024,1024}</string>
</dict>
<key>texture</key>
<dict>
<key>width</key>
<integer>1024</integer>
<key>height</key>
<integer>1024</integer>
</dict>
</dict>
</plist>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 449 B

@@ -45,7 +45,7 @@
"mov_data": [
{
"name": "main_anim",
"dr": 31,
"dr": 21,
"lp": false,
"to": 0,
"drTW": 0,
@@ -78,10 +78,9 @@
"cY": 1.0,
"kX": 0.0,
"kY": 0.0,
"fi": 30,
"fi": 20,
"twE": 0,
"tweenFrame": true,
"evt": "attack2_end"
"tweenFrame": true
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfGuidesProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GuidesProject>
<Project>attack2</Project>
<GuidesList />
</GuidesProject>
</ArrayOfGuidesProject>
+21
View File
@@ -0,0 +1,21 @@
<?xml version="1.0"?>
<AnimationProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ProjectDir>D:\root\Temp\OzgCocoStudio\attack2</ProjectDir>
<Version>1.3.0.1</Version>
<Resources>D:\root\Temp\OzgCocoStudio\attack2\Resources</Resources>
<Name>attack2</Name>
<JsonFileName>attack2.json</JsonFileName>
<JsonFolder>D:\root\Temp\OzgCocoStudio\attack2\Json</JsonFolder>
<JsonList />
<CanvasSize>
<Width>0</Width>
<Height>0</Height>
</CanvasSize>
<filePath>D:\root\Temp\OzgCocoStudio\attack2\attack2.xml.animation</filePath>
<ProjectType>AnimationProject</ProjectType>
<ResRelativePath />
<ResourceFileList>
<string>attack20.plist</string>
</ResourceFileList>
<bBatchImage>true</bBatchImage>
</AnimationProject>
-46
View File
@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>frames</key>
<dict>
<key>role_attack_02.png</key>
<dict>
<key>width</key>
<integer>39</integer>
<key>height</key>
<integer>27</integer>
<key>originalWidth</key>
<integer>39</integer>
<key>originalHeight</key>
<integer>27</integer>
<key>x</key>
<integer>0</integer>
<key>y</key>
<integer>0</integer>
<key>offsetX</key>
<real>0</real>
<key>offsetY</key>
<real>0</real>
</dict>
</dict>
<key>metadata</key>
<dict>
<key>format</key>
<integer>0</integer>
<key>textureFileName</key>
<string>attack20.png</string>
<key>realTextureFileName</key>
<string>attack20.png</string>
<key>size</key>
<string>{1024,1024}</string>
</dict>
<key>texture</key>
<dict>
<key>width</key>
<integer>1024</integer>
<key>height</key>
<integer>1024</integer>
</dict>
</dict>
</plist>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 670 B

@@ -45,7 +45,7 @@
"mov_data": [
{
"name": "main_anim",
"dr": 31,
"dr": 21,
"lp": false,
"to": 0,
"drTW": 0,
@@ -78,10 +78,9 @@
"cY": 1.0,
"kX": 0.0,
"kY": 0.0,
"fi": 30,
"fi": 20,
"twE": 0,
"tweenFrame": true,
"evt": "attack3_end"
"tweenFrame": true
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 806 B

+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfGuidesProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GuidesProject>
<Project>attack3</Project>
<GuidesList />
</GuidesProject>
</ArrayOfGuidesProject>
+21
View File
@@ -0,0 +1,21 @@
<?xml version="1.0"?>
<AnimationProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ProjectDir>D:\root\Temp\OzgCocoStudio\attack3</ProjectDir>
<Version>1.3.0.1</Version>
<Resources>D:\root\Temp\OzgCocoStudio\attack3\Resources</Resources>
<Name>attack3</Name>
<JsonFileName>attack3.json</JsonFileName>
<JsonFolder>D:\root\Temp\OzgCocoStudio\attack3\Json</JsonFolder>
<JsonList />
<CanvasSize>
<Width>0</Width>
<Height>0</Height>
</CanvasSize>
<filePath>D:\root\Temp\OzgCocoStudio\attack3\attack3.xml.animation</filePath>
<ProjectType>AnimationProject</ProjectType>
<ResRelativePath />
<ResourceFileList>
<string>attack30.plist</string>
</ResourceFileList>
<bBatchImage>true</bBatchImage>
</AnimationProject>
-46
View File
@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>frames</key>
<dict>
<key>role_attack_03.png</key>
<dict>
<key>width</key>
<integer>30</integer>
<key>height</key>
<integer>22</integer>
<key>originalWidth</key>
<integer>30</integer>
<key>originalHeight</key>
<integer>22</integer>
<key>x</key>
<integer>0</integer>
<key>y</key>
<integer>0</integer>
<key>offsetX</key>
<real>0</real>
<key>offsetY</key>
<real>0</real>
</dict>
</dict>
<key>metadata</key>
<dict>
<key>format</key>
<integer>0</integer>
<key>textureFileName</key>
<string>attack30.png</string>
<key>realTextureFileName</key>
<string>attack30.png</string>
<key>size</key>
<string>{1024,1024}</string>
</dict>
<key>texture</key>
<dict>
<key>width</key>
<integer>1024</integer>
<key>height</key>
<integer>1024</integer>
</dict>
</dict>
</plist>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 466 B

@@ -45,7 +45,7 @@
"mov_data": [
{
"name": "main_anim",
"dr": 31,
"dr": 21,
"lp": false,
"to": 0,
"drTW": 0,
@@ -78,10 +78,9 @@
"cY": 1.0,
"kX": 0.0,
"kY": 0.0,
"fi": 30,
"fi": 20,
"twE": 0,
"tweenFrame": true,
"evt": "attack4_end"
"tweenFrame": true
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 669 B

+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfGuidesProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GuidesProject>
<Project>attack4</Project>
<GuidesList />
</GuidesProject>
</ArrayOfGuidesProject>
+21
View File
@@ -0,0 +1,21 @@
<?xml version="1.0"?>
<AnimationProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ProjectDir>D:\root\Temp\OzgCocoStudio\attack4</ProjectDir>
<Version>1.3.0.1</Version>
<Resources>D:\root\Temp\OzgCocoStudio\attack4\Resources</Resources>
<Name>attack4</Name>
<JsonFileName>attack4.json</JsonFileName>
<JsonFolder>D:\root\Temp\OzgCocoStudio\attack4\Json</JsonFolder>
<JsonList />
<CanvasSize>
<Width>0</Width>
<Height>0</Height>
</CanvasSize>
<filePath>D:\root\Temp\OzgCocoStudio\attack4\attack4.xml.animation</filePath>
<ProjectType>AnimationProject</ProjectType>
<ResRelativePath />
<ResourceFileList>
<string>attack40.plist</string>
</ResourceFileList>
<bBatchImage>true</bBatchImage>
</AnimationProject>
-46
View File
@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>frames</key>
<dict>
<key>role_attack_04.png</key>
<dict>
<key>width</key>
<integer>27</integer>
<key>height</key>
<integer>16</integer>
<key>originalWidth</key>
<integer>27</integer>
<key>originalHeight</key>
<integer>16</integer>
<key>x</key>
<integer>0</integer>
<key>y</key>
<integer>0</integer>
<key>offsetX</key>
<real>0</real>
<key>offsetY</key>
<real>0</real>
</dict>
</dict>
<key>metadata</key>
<dict>
<key>format</key>
<integer>0</integer>
<key>textureFileName</key>
<string>attack40.png</string>
<key>realTextureFileName</key>
<string>attack40.png</string>
<key>size</key>
<string>{1024,1024}</string>
</dict>
<key>texture</key>
<dict>
<key>width</key>
<integer>1024</integer>
<key>height</key>
<integer>1024</integer>
</dict>
</dict>
</plist>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 414 B

@@ -229,6 +229,7 @@
890F1B651902E284002F2769 /* attack30.png in Resources */ = {isa = PBXBuildFile; fileRef = 890F1B591902E284002F2769 /* attack30.png */; };
890F1B661902E284002F2769 /* attack40.plist in Resources */ = {isa = PBXBuildFile; fileRef = 890F1B5A1902E284002F2769 /* attack40.plist */; };
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 */; };
895EC07318F05AE600C3814D /* RPGData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 895EC07118F05AE600C3814D /* RPGData.cpp */; };
8960C17F18E7D0BD0075EF99 /* alert_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 8960C17E18E7D0BD0075EF99 /* alert_style1.tmx */; };
@@ -849,6 +850,7 @@
890F1B591902E284002F2769 /* attack30.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = attack30.png; sourceTree = "<group>"; };
890F1B5A1902E284002F2769 /* attack40.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = attack40.plist; sourceTree = "<group>"; };
890F1B5B1902E284002F2769 /* attack40.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = attack40.png; sourceTree = "<group>"; };
891DEB7719054276005337E5 /* battle_battle_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = battle_battle_style1.tmx; sourceTree = "<group>"; };
8936C3B418F6D72100AE709E /* select_player_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = select_player_style1.tmx; sourceTree = "<group>"; };
895EC07118F05AE600C3814D /* RPGData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RPGData.cpp; path = ../Classes/RPGData.cpp; sourceTree = "<group>"; };
895EC07218F05AE600C3814D /* RPGData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RPGData.h; path = ../Classes/RPGData.h; sourceTree = "<group>"; };
@@ -2385,18 +2387,18 @@
89F5D0CD18E7C579009D703C /* RPGMapNPCRoleSprite.h */,
89F5D0CE18E7C579009D703C /* RPGMapRoleSprite.cpp */,
89F5D0CF18E7C579009D703C /* RPGMapRoleSprite.h */,
89F5D0D618E7C579009D703C /* RPGMapSceneLayer.cpp */,
89F5D0D718E7C579009D703C /* RPGMapSceneLayer.h */,
89E63C7F18EDA9E200BDD04F /* RPGBattlePlayerSprite.cpp */,
89E63C8018EDA9E200BDD04F /* RPGBattlePlayerSprite.h */,
9E5C5F6F18EE68BD00A68C36 /* RPGBattleMonsterSprite.cpp */,
9E5C5F7018EE68BD00A68C36 /* RPGBattleMonsterSprite.h */,
895EC07118F05AE600C3814D /* RPGData.cpp */,
895EC07218F05AE600C3814D /* RPGData.h */,
8999051818F17A3D00012A0E /* RPGBattleMenu.cpp */,
8999051918F17A3D00012A0E /* RPGBattleMenu.h */,
89F5D0D418E7C579009D703C /* RPGBattleSceneLayer.cpp */,
89F5D0D518E7C579009D703C /* RPGBattleSceneLayer.h */,
89F5D0D618E7C579009D703C /* RPGMapSceneLayer.cpp */,
89F5D0D718E7C579009D703C /* RPGMapSceneLayer.h */,
895EC07118F05AE600C3814D /* RPGData.cpp */,
895EC07218F05AE600C3814D /* RPGData.h */,
89F5D0D818E7C579009D703C /* RPGStartSceneLayer.cpp */,
89F5D0D918E7C579009D703C /* RPGStartSceneLayer.h */,
8960C18018E7D51C0075EF99 /* RPGDialogLayer.cpp */,
@@ -2434,6 +2436,7 @@
896BAEE418EF04CF006581FD /* audio_battle_menu.wav */,
896BAEE518EF04CF006581FD /* audio_battle_start.wav */,
9E5C5F6D18EE59BB00A68C36 /* battle_menu_style1.tmx */,
891DEB7719054276005337E5 /* battle_battle_style1.tmx */,
8999051C18F17E6C00012A0E /* battle_battlemenu_style1.tmx */,
89EA57C018EAF2CB00A10956 /* battle_bg.png */,
89EA57BC18EAF1EC00A10956 /* monsters.plist */,
@@ -2588,6 +2591,7 @@
89F5D14B18E7C5DD009D703C /* scene_start_cns.plist in Resources */,
896BAEE618EF04CF006581FD /* audio_battle_end.mp3 in Resources */,
89F5D10E18E7C5C0009D703C /* actor7_3.png in Resources */,
891DEB7819054276005337E5 /* battle_battle_style1.tmx in Resources */,
89CB7D8818E9A87700A5921B /* dialog_style1.tmx in Resources */,
89F5D11B18E7C5C0009D703C /* actor113.png in Resources */,
89F5D14C18E7C5DD009D703C /* start_bg.png in Resources */,