道具部分完成,bug修复

This commit is contained in:
ozg
2014-04-14 00:26:26 +08:00
parent 241e597718
commit eaecd1919e
31 changed files with 780 additions and 177 deletions
+1 -1
View File
@@ -16,6 +16,6 @@
#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, items) 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, items) values(1, 14.5, 9.5, 'down', '[{\"id\": 6, \"total\": 10}, {\"id\": 7, \"total\": 7}, {\"id\": 8, \"total\": 7}]');"
#endif
+7 -1
View File
@@ -15,7 +15,7 @@
#include "SimpleAudioEngine.h"
#include "CppSQLite3.h"
#include "GameCfg.h"
#include "RPGConfirmLayer.h"
#include "RPGDialogLayer.h"
#include "RPGData.h"
USING_NS_CC;
@@ -27,6 +27,12 @@ using namespace CocosDenshion;
//获取player列表
#define PLAYER_QUERY "select * from player order by id asc"
//获取save_data数据
#define SAVEDATA_QUERY "select * from save_data where id = 1"
//查询现有道具
#define ITEMS_QUERY "select * from items where id in(%s) order by id asc"
//技能的属性
enum RPGSkillAttr
{
+1 -1
View File
@@ -14,7 +14,7 @@
USING_NS_CC;
class RPGComputingResults : public CCObject
class RPGComputingResults
{
public:
-73
View File
@@ -1,73 +0,0 @@
//
// RPGConfirmLayer.cpp
// OzgGameRPG
//
// Created by ozg on 14-3-30.
//
//
#include "RPGConfirmLayer.h"
#include "OzgCCUtility.h"
RPGConfirmLayer::RPGConfirmLayer()
{
}
RPGConfirmLayer::~RPGConfirmLayer()
{
}
bool RPGConfirmLayer::init(string titleStr, string menuOKStr, int menuItemOKTag, string menuCancelStr, int menuItemCancelTag, float width, float height, CCObject* target, SEL_MenuHandler seletor)
{
if(CCLayerColor::initWithColor(ccc4(0, 0, 0, 200), width, height))
{
CCTMXTiledMap *mainBg = CCTMXTiledMap::create("alert_style1.tmx");
float x = (CCDirector::sharedDirector()->getWinSize().width - mainBg->getContentSize().width) / 2.0f;
float y = (CCDirector::sharedDirector()->getWinSize().height - mainBg->getContentSize().height) / 2.0f;
mainBg->setPosition(ccp(x, y));
this->addChild(mainBg);
CCLabelTTF *titleLab = CCLabelTTF::create(titleStr.c_str(), "Arial", 25, CCSizeMake(mainBg->getContentSize().width, 25), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter);
titleLab->setPosition(ccp(190, 135));
titleLab->setColor(ccc3(255, 255, 255));
mainBg->addChild(titleLab);
CCMenu *menu = CCMenu::create();
menu->setAnchorPoint(CCPointZero);
menu->setPosition(CCPointZero);
mainBg->addChild(menu);
CCLabelTTF *menuOKLab = CCLabelTTF::create(OzgCCUtility::generalString(CCString::create(menuOKStr)->getCString()).c_str(), "Arial", 20, CCSizeMake(120, 25), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter);
menuOKLab->setColor(ccc3(160, 160, 160));
CCMenuItemLabel *menuOK = CCMenuItemLabel::create(menuOKLab, target, seletor);
menuOK->setTag(menuItemOKTag);
menuOK->setPosition(ccp(100, 60));
menu->addChild(menuOK);
CCLabelTTF *menuCancelLab = CCLabelTTF::create(OzgCCUtility::generalString(CCString::create(menuCancelStr)->getCString()).c_str(), "Arial", 20, CCSizeMake(120, 25), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter);
menuCancelLab->setColor(ccc3(160, 160, 160));
CCMenuItemLabel *menuCancel = CCMenuItemLabel::create(menuCancelLab, target, seletor);
menuCancel->setTag(menuItemCancelTag);
menuCancel->setPosition(ccp(280, 60));
menu->addChild(menuCancel);
return true;
}
return false;
}
RPGConfirmLayer* RPGConfirmLayer::create(string titleStr, string menuOKStr, int menuItemOKTag, string menuCancelStr, int menuItemCancelTag, float width, float height, CCObject* target, SEL_MenuHandler seletor)
{
RPGConfirmLayer *layer = new RPGConfirmLayer();
if(layer && layer->init(titleStr, menuOKStr, menuItemOKTag, menuCancelStr, menuItemCancelTag, width, height, target, seletor))
{
layer->autorelease();
return layer;
}
CC_SAFE_DELETE(layer);
return NULL;
}
-29
View File
@@ -1,29 +0,0 @@
//
// RPGConfirmLayer.h
// OzgGameRPG
//
// Created by ozg on 14-3-30.
//
//
#ifndef __OzgGameRPG__RPGConfirmLayer__
#define __OzgGameRPG__RPGConfirmLayer__
#include "cocos2d.h"
USING_NS_CC;
using namespace std;
class RPGConfirmLayer : public CCLayerColor
{
public:
RPGConfirmLayer();
virtual ~RPGConfirmLayer();
bool init(string titleStr, string menuOKStr, int menuItemOKTag, string menuCancelStr, int menuItemCancelTag, float width, float height, CCObject* target, SEL_MenuHandler seletor);
static RPGConfirmLayer* create(string titleStr, string menuOKStr, int menuItemOKTag, string menuCancelStr, int menuItemCancelTag, float width, float height, CCObject* target, SEL_MenuHandler seletor);
};
#endif /* defined(__OzgGameRPG__RPGConfirmLayer__) */
+48
View File
@@ -82,3 +82,51 @@ RPGSkill* RPGSkill::create()
}
//RPGSkill end
RPGItems::RPGItems()
{
}
RPGItems::~RPGItems()
{
CCLog("RPGItems 释放");
}
RPGItems* RPGItems::create()
{
RPGItems *obj = new RPGItems();
if(obj)
{
obj->autorelease();
return obj;
}
CC_SAFE_DELETE(obj);
return NULL;
}
//RPGItems end
RPGExistingItems::RPGExistingItems()
{
}
RPGExistingItems::~RPGExistingItems()
{
CCLog("RPGExistingItems 释放");
}
RPGExistingItems* RPGExistingItems::create()
{
RPGExistingItems *obj = new RPGExistingItems();
if(obj)
{
obj->autorelease();
return obj;
}
CC_SAFE_DELETE(obj);
return NULL;
}
//RPGExistingItems end
+38
View File
@@ -79,6 +79,7 @@ class RPGSkill : public CCObject
{
public:
int m_dataId;
string m_name;
float m_skillAttack;
int m_mp;
@@ -89,4 +90,41 @@ public:
static RPGSkill* create();
};
class RPGItems : public CCObject
{
public:
int m_dataId;
string m_name;
float m_buy;
float m_sell;
int m_type;
float m_attack;
float m_defense;
float m_speed;
float m_skillAttack;
float m_skillDefense;
RPGItems();
virtual ~RPGItems();
static RPGItems* create();
};
//现有道具,数据库没有这个表
class RPGExistingItems : public RPGItems
{
public:
int m_total; //该道具的个数
RPGExistingItems();
virtual ~RPGExistingItems();
static RPGExistingItems* create();
};
#endif /* defined(__OzgGameRPG__RPGData__) */
+118
View File
@@ -0,0 +1,118 @@
//
// RPGDialogLayer.cpp
// OzgGameRPG
//
// Created by ozg on 14-3-30.
//
//
#include "RPGDialogLayer.h"
#include "OzgCCUtility.h"
RPGDialogLayer::RPGDialogLayer()
{
}
RPGDialogLayer::~RPGDialogLayer()
{
CCLog("RPGDialogLayer 释放");
}
bool RPGDialogLayer::init(string titleStr, string menuOKStr, int menuItemOKTag, float width, float height, CCObject* target, SEL_MenuHandler seletor)
{
if(CCLayerColor::initWithColor(ccc4(0, 0, 0, 200), width, height))
{
this->initCommons(titleStr);
CCTMXTiledMap *mainBg = (CCTMXTiledMap*)this->getChildByTag(kRPGDialogLayerBg);
CCMenu *menu = (CCMenu*)mainBg->getChildByTag(kRPGDialogLayerBgMenu);
CCLabelTTF *menuOKLab = CCLabelTTF::create(OzgCCUtility::generalString(CCString::create(menuOKStr)->getCString()).c_str(), "Arial", 20, CCSizeMake(120, 25), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter);
menuOKLab->setColor(ccc3(160, 160, 160));
CCMenuItemLabel *menuOK = CCMenuItemLabel::create(menuOKLab, target, seletor);
menuOK->setTag(menuItemOKTag);
menuOK->setPosition(ccp(190, 60));
menu->addChild(menuOK);
return true;
}
return false;
}
bool RPGDialogLayer::init(string titleStr, string menuOKStr, int menuItemOKTag, string menuCancelStr, int menuItemCancelTag, float width, float height, CCObject* target, SEL_MenuHandler seletor)
{
if(CCLayerColor::initWithColor(ccc4(0, 0, 0, 200), width, height))
{
this->initCommons(titleStr);
CCTMXTiledMap *mainBg = (CCTMXTiledMap*)this->getChildByTag(kRPGDialogLayerBg);
CCMenu *menu = (CCMenu*)mainBg->getChildByTag(kRPGDialogLayerBgMenu);
CCLabelTTF *menuOKLab = CCLabelTTF::create(OzgCCUtility::generalString(CCString::create(menuOKStr)->getCString()).c_str(), "Arial", 20, CCSizeMake(120, 25), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter);
menuOKLab->setColor(ccc3(160, 160, 160));
CCMenuItemLabel *menuOK = CCMenuItemLabel::create(menuOKLab, target, seletor);
menuOK->setTag(menuItemOKTag);
menuOK->setPosition(ccp(100, 60));
menu->addChild(menuOK);
CCLabelTTF *menuCancelLab = CCLabelTTF::create(OzgCCUtility::generalString(CCString::create(menuCancelStr)->getCString()).c_str(), "Arial", 20, CCSizeMake(120, 25), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter);
menuCancelLab->setColor(ccc3(160, 160, 160));
CCMenuItemLabel *menuCancel = CCMenuItemLabel::create(menuCancelLab, target, seletor);
menuCancel->setTag(menuItemCancelTag);
menuCancel->setPosition(ccp(280, 60));
menu->addChild(menuCancel);
return true;
}
return false;
}
RPGDialogLayer* RPGDialogLayer::create(string titleStr, string menuOKStr, int menuItemOKTag, float width, float height, CCObject* target, SEL_MenuHandler seletor)
{
RPGDialogLayer *layer = new RPGDialogLayer();
if(layer && layer->init(titleStr, menuOKStr, menuItemOKTag, width, height, target, seletor))
{
layer->autorelease();
return layer;
}
CC_SAFE_DELETE(layer);
return NULL;
}
RPGDialogLayer* RPGDialogLayer::create(string titleStr, string menuOKStr, int menuItemOKTag, string menuCancelStr, int menuItemCancelTag, float width, float height, CCObject* target, SEL_MenuHandler seletor)
{
RPGDialogLayer *layer = new RPGDialogLayer();
if(layer && layer->init(titleStr, menuOKStr, menuItemOKTag, menuCancelStr, menuItemCancelTag, width, height, target, seletor))
{
layer->autorelease();
return layer;
}
CC_SAFE_DELETE(layer);
return NULL;
}
//private
void RPGDialogLayer::initCommons(string titleStr)
{
CCTMXTiledMap *mainBg = CCTMXTiledMap::create("alert_style1.tmx");
float x = (CCDirector::sharedDirector()->getWinSize().width - mainBg->getContentSize().width) / 2.0f;
float y = (CCDirector::sharedDirector()->getWinSize().height - mainBg->getContentSize().height) / 2.0f;
mainBg->setPosition(ccp(x, y));
mainBg->setTag(kRPGDialogLayerBg);
this->addChild(mainBg);
CCLabelTTF *titleLab = CCLabelTTF::create(titleStr.c_str(), "Arial", 25, CCSizeMake(mainBg->getContentSize().width, 25), kCCTextAlignmentCenter, kCCVerticalTextAlignmentCenter);
titleLab->setPosition(ccp(190, 135));
titleLab->setColor(ccc3(255, 255, 255));
mainBg->addChild(titleLab);
CCMenu *menu = CCMenu::create();
menu->setAnchorPoint(CCPointZero);
menu->setPosition(CCPointZero);
menu->setTag(kRPGDialogLayerBgMenu);
mainBg->addChild(menu);
}
+47
View File
@@ -0,0 +1,47 @@
//
// RPGDialogLayer.h
// OzgGameRPG
//
// Created by ozg on 14-3-30.
//
//
#ifndef __OzgGameRPG__RPGDialogLayer__
#define __OzgGameRPG__RPGDialogLayer__
#include "cocos2d.h"
USING_NS_CC;
using namespace std;
enum RPGDialogLayerTag
{
kRPGDialogLayerBg = 1,
kRPGDialogLayerBgMenu = 2
};
class RPGDialogLayer : public CCLayerColor
{
private:
void initCommons(string titleStr);
public:
RPGDialogLayer();
virtual ~RPGDialogLayer();
//只有一个确定按钮
bool init(string titleStr, string menuOKStr, int menuItemOKTag, float width, float height, CCObject* target, SEL_MenuHandler seletor);
//有确定和取消的按钮
bool init(string titleStr, string menuOKStr, int menuItemOKTag, string menuCancelStr, int menuItemCancelTag, float width, float height, CCObject* target, SEL_MenuHandler seletor);
static RPGDialogLayer* create(string titleStr, string menuOKStr, int menuItemOKTag, float width, float height, CCObject* target, SEL_MenuHandler seletor);
static RPGDialogLayer* create(string titleStr, string menuOKStr, int menuItemOKTag, string menuCancelStr, int menuItemCancelTag, float width, float height, CCObject* target, SEL_MenuHandler seletor);
};
#endif /* defined(__OzgGameRPG__RPGDialogLayer__) */
+3 -3
View File
@@ -95,7 +95,7 @@ void RPGLoadingSceneLayer::executeLoading(float delay)
CCTextureCache::sharedTextureCache()->addImageAsync(loadTexture->getCString(), this, callfuncO_selector(RPGLoadingSceneLayer::loadCallBack));
}
else
this->goToNextScene();
this->goToNextScene(0);
}
@@ -106,7 +106,7 @@ void RPGLoadingSceneLayer::loadCallBack(cocos2d::CCObject *sender)
{
//完毕
//CCLog("loading 100%%");
this->goToNextScene();
this->goToNextScene(0);
}
else
{
@@ -120,7 +120,7 @@ void RPGLoadingSceneLayer::loadCallBack(cocos2d::CCObject *sender)
}
void RPGLoadingSceneLayer::goToNextScene()
void RPGLoadingSceneLayer::goToNextScene(float delay)
{
//CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
CCScene *s = NULL;
+1 -1
View File
@@ -31,7 +31,7 @@ public:
void executeLoading(float delay);
void loadCallBack(CCObject* sender);
void goToNextScene();
void goToNextScene(float delay);
};
#endif /* defined(__OzgGameRPG__RPGLoadingSceneLayer__) */
+209
View File
@@ -9,6 +9,7 @@
#include "RPGMapItemsMenuLayer.h"
#include "RPGMapMenuLayer.h"
#include "RPGMapSceneLayer.h"
#include "RPGResultsLogic.h"
RPGMapItemsMenuLayer::RPGMapItemsMenuLayer()
{
@@ -18,6 +19,7 @@ RPGMapItemsMenuLayer::RPGMapItemsMenuLayer()
RPGMapItemsMenuLayer::~RPGMapItemsMenuLayer()
{
this->m_stringList->release();
this->m_itemsList->release();
CCLog("RPGMapItemsMenuLayer 释放");
}
@@ -31,6 +33,9 @@ bool RPGMapItemsMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB
this->m_db = db;
this->m_itemsList = new CCArray();
this->m_itemsList->init();
CCMenu *mainMenu = CCMenu::create();
mainMenu->setTag(kRPGMapItemsMenuLayerTagMainMenu);
mainMenu->setAnchorPoint(CCPointZero);
@@ -52,6 +57,16 @@ bool RPGMapItemsMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB
mainBg->setTag(kRPGMapItemsMenuLayerTagBg);
this->addChild(mainBg);
CCTableView *tableView = CCTableView::create(this, CCSizeMake(900, 570));
tableView->setDirection(kCCScrollViewDirectionVertical);
tableView->setPosition(ccp(80, 30));
tableView->setDelegate(this);
tableView->setVerticalFillOrder(kCCTableViewFillTopDown);
tableView->setTag(kRPGMapItemsMenuLayerTagItemListTable);
this->addChild(tableView);
this->loadItemsData();
return true;
}
return false;
@@ -69,7 +84,137 @@ RPGMapItemsMenuLayer* RPGMapItemsMenuLayer::create(cocos2d::CCDictionary *string
return NULL;
}
//CCTableView
void RPGMapItemsMenuLayer::scrollViewDidScroll(CCScrollView *scrollView)
{
}
void RPGMapItemsMenuLayer::scrollViewDidZoom(CCScrollView *scrollView)
{
}
void RPGMapItemsMenuLayer::tableCellTouched(CCTableView *tableView, CCTableViewCell *cell)
{
}
CCSize RPGMapItemsMenuLayer::cellSizeForTable(CCTableView *tableView)
{
return CCSizeMake(tableView->getContentSize().width, 80);
}
CCTableViewCell* RPGMapItemsMenuLayer::tableCellAtIndex(CCTableView *tableView, unsigned int idx)
{
CCTableViewCell *cell = tableView->dequeueCell();
if (!cell)
{
cell = new CCTableViewCell();
cell->autorelease();
}
else
cell->removeAllChildrenWithCleanup(true);
float x = 100;
for (int i = 0; i < 4; i++)
{
int index = idx * 4 + i;
if(index >= this->m_itemsList->count())
break;
RPGExistingItems *itemsData = (RPGExistingItems*)this->m_itemsList->objectAtIndex(index);
CCControlButton *itemBtn = CCControlButton::create(CCString::createWithFormat("%s (%i)", itemsData->m_name.c_str(), itemsData->m_total)->getCString(), "Arial", 22);
itemBtn->setPosition(ccp(x, 0));
itemBtn->setTag(itemsData->m_dataId);
itemBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(RPGMapItemsMenuLayer::onButton), CCControlEventTouchUpInside);
cell->addChild(itemBtn);
//如果是非道具类的话,则禁用点击
if(itemsData->m_type != 3)
{
itemBtn->setTitleColorForState(ccc3(144, 144, 144), CCControlStateNormal);
itemBtn->setEnabled(false);
}
x += 200;
}
return cell;
}
unsigned int RPGMapItemsMenuLayer::numberOfCellsInTableView(CCTableView *tableView)
{
int rowItemCount = 4;
int size = this->m_itemsList->count();
if(size % rowItemCount == 0)
return size / rowItemCount;
else
return size / rowItemCount + 1;
}
//CCTableView end
//private
void RPGMapItemsMenuLayer::loadItemsData()
{
//道具数据
this->m_itemsList->removeAllObjects();
CppSQLite3Query query = this->m_db->execQuery(SAVEDATA_QUERY);
while(!query.eof())
{
string idList;
JsonBox::Value json;
json.loadFromString(query.getStringField("items"));
JsonBox::Array items = json.getArray();
for (int i = 0; i < (int)items.size(); i++)
{
JsonBox::Value item = items[i].getObject();
RPGExistingItems *itemsData = RPGExistingItems::create();
itemsData->m_total = item["total"].getInt();
this->m_itemsList->addObject(itemsData);
idList.append(CCString::createWithFormat("%i", item["id"].getInt())->getCString());
if(i + 1 < (int)items.size())
idList.append(", ");
}
int i = 0;
CppSQLite3Query itemsQuery = this->m_db->execQuery(CCString::createWithFormat(ITEMS_QUERY, idList.c_str())->getCString());
while(!itemsQuery.eof())
{
RPGExistingItems *itemsData = (RPGExistingItems*)this->m_itemsList->objectAtIndex(i);
itemsData->m_dataId = itemsQuery.getIntField("id");
itemsData->m_name = itemsQuery.getStringField("name_cns");
itemsData->m_buy = itemsQuery.getIntField("buy");
itemsData->m_sell = itemsQuery.getIntField("sell");
itemsData->m_type = itemsQuery.getIntField("type");
itemsData->m_attack = itemsQuery.getFloatField("attack");
itemsData->m_defense = itemsQuery.getFloatField("defense");
itemsData->m_speed = itemsQuery.getFloatField("speed");
itemsData->m_skillAttack = itemsQuery.getFloatField("skill_attack");
itemsData->m_skillDefense = itemsQuery.getFloatField("skill_defense");
i++;
itemsQuery.nextRow();
}
itemsQuery.finalize();
query.nextRow();
}
query.finalize();
CCTableView *tableView = (CCTableView*)this->getChildByTag(kRPGMapItemsMenuLayerTagItemListTable);
tableView->reloadData();
}
void RPGMapItemsMenuLayer::onMenu(cocos2d::CCObject *pObject)
{
CCMenuItem *menuItem = (CCMenuItem*)pObject;
@@ -99,3 +244,67 @@ void RPGMapItemsMenuLayer::onMenu(cocos2d::CCObject *pObject)
}
}
void RPGMapItemsMenuLayer::onDialog(cocos2d::CCObject *pObject)
{
this->getParent()->removeChildByTag(kRPGMapItemsMenuLayerTagDialog, true);
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer, true);
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerLab, true);
this->setVisible(true);
}
void RPGMapItemsMenuLayer::onButton(cocos2d::CCObject *pSender, CCControlEvent event)
{
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
CCControlButton *itemBtn = (CCControlButton*)pSender;
for (int i = 0; i < this->m_itemsList->count(); i++)
{
//判断选中道具
RPGExistingItems *itemsData = (RPGExistingItems*)this->m_itemsList->objectAtIndex(i);
if(itemBtn->getTag() == itemsData->m_dataId)
{
this->m_selectedItems = itemsData;
break;
}
}
//因为动态获取地图的大小会导致了菜单层显示错位,所以定死了
float width = 960;
float height = 640;
RPGMapChoicePlayerMenuLayer *choicePlayer = RPGMapChoicePlayerMenuLayer::create(this->m_db, this, callfuncO_selector(RPGMapItemsMenuLayer::onChoicePlayer), width, height);
choicePlayer->setTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer);
this->getParent()->addChild(choicePlayer);
CCString *labText = CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("menu_items_choice"))->getCString(), this->m_selectedItems->m_name.c_str());
addLab(this->getParent(), kRPGMapSceneLayerTagChoicePlayerLab, labText, ccp(650, 470));
this->setVisible(false);
}
void RPGMapItemsMenuLayer::onChoicePlayer(cocos2d::CCObject *pObject)
{
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
CCMenuItem *player = (CCMenuItem*)pObject;
bool isSuccess = RPGResultsLogic::useItems(this->m_db, player->getTag() - kRPGMapChoicePlayerMenuLayerTagMainMenuPlayer, this->m_selectedItems->m_dataId);
if(!isSuccess)
{
//道具使用失败
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
RPGDialogLayer *dialog = RPGDialogLayer::create(((CCString*)this->m_stringList->objectForKey("menu_items_fail"))->getCString(), ((CCString*)this->m_stringList->objectForKey("confirm_exit_ok"))->getCString(), kRPGMapItemsMenuLayerTagDialogOK, winSize.width, winSize.height, this, menu_selector(RPGMapItemsMenuLayer::onDialog));
dialog->setTag(kRPGMapItemsMenuLayerTagDialog);
this->getParent()->addChild(dialog);
}
else
{
//道具使用成功
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer, true);
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerLab, true);
this->setVisible(true);
this->loadItemsData();
}
}
+29 -4
View File
@@ -15,6 +15,7 @@
#include "JsonBox.h"
#include "RPGMapRoleSprite.h"
#include "RPGBaseSceneLayer.h"
#include "RPGMapChoicePlayerMenuLayer.h"
USING_NS_CC;
USING_NS_CC_EXT;
@@ -23,18 +24,29 @@ enum RPGMapItemsMenuLayerTag
{
kRPGMapItemsMenuLayerTagMainMenu = 1,
kRPGMapItemsMenuLayerTagMainMenuBack = 2,
kRPGMapItemsMenuLayerTagBg = 3
kRPGMapItemsMenuLayerTagBg = 3,
kRPGMapItemsMenuLayerTagItemListTable = 4,
kRPGMapItemsMenuLayerTagDialogOK = 5,
kRPGMapItemsMenuLayerTagDialog = 86
};
class RPGMapItemsMenuLayer : public CCLayerColor//, CCTableViewDelegate, CCTableViewDataSource
class RPGMapItemsMenuLayer : public CCLayerColor, CCTableViewDelegate, CCTableViewDataSource
{
private:
CCDictionary* m_stringList;
CppSQLite3DB* m_db;
CCArray* m_itemsList;
RPGExistingItems* m_selectedItems; //选中的道具
void loadItemsData(); //读取道具的数据
void onMenu(cocos2d::CCObject *pObject);
void onDialog(cocos2d::CCObject *pObject);
void onButton(CCObject* pSender, CCControlEvent event); //点击了items列表的其中一个后触发
void onChoicePlayer(CCObject* pObject); //在player选择框中,选中一个player后触发
public:
@@ -43,7 +55,20 @@ public:
bool init(CCDictionary* stringList, CppSQLite3DB* db, float width, float height);
static RPGMapItemsMenuLayer* 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__RPGMapItemsMenuLayer__) */
+38 -28
View File
@@ -8,7 +8,7 @@
#include "RPGMapMenuLayer.h"
#include "RPGMapSceneLayer.h"
#include "RPGConfirmLayer.h"
#include "RPGDialogLayer.h"
#include "RPGStartSceneLayer.h"
#include "JsonBox.h"
#include "OzgCCUtility.h"
@@ -147,37 +147,13 @@ void RPGMapMenuLayer::onMenu(cocos2d::CCObject *pObject)
case kRPGMapMenuLayerTagMainMenuExit:
{
//退出
RPGConfirmLayer *confirm = RPGConfirmLayer::create(((CCString*)this->m_stringList->objectForKey("confirm_exit"))->getCString(), ((CCString*)this->m_stringList->objectForKey("confirm_exit_ok"))->getCString(), kRPGMapMenuLayerTagConfirmExitOK, ((CCString*)this->m_stringList->objectForKey("confirm_cancel"))->getCString(), kRPGMapMenuLayerTagConfirmCancel, this->m_width, this->m_height, this, menu_selector(RPGMapMenuLayer::onMenu));
confirm->setTag(kRPGMapMenuLayerTagConfirm);
this->addChild(confirm);
RPGDialogLayer *dialog = RPGDialogLayer::create(((CCString*)this->m_stringList->objectForKey("confirm_exit"))->getCString(), ((CCString*)this->m_stringList->objectForKey("confirm_exit_ok"))->getCString(), kRPGMapMenuLayerTagDialogExitOK, ((CCString*)this->m_stringList->objectForKey("confirm_cancel"))->getCString(), kRPGMapMenuLayerTagDialogCancel, this->m_width, this->m_height, this, menu_selector(RPGMapMenuLayer::onDialog));
dialog->setTag(kRPGMapMenuLayerTagDialog);
this->addChild(dialog);
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu);
mainMenu->setEnabled(false);
}
break;
case kRPGMapMenuLayerTagConfirmExitOK:
{
//确定退出
RPGMapSceneLayer *mapSceneLayer = (RPGMapSceneLayer*)this->getParent();
mapSceneLayer->m_releaseTexture = true;
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(mapSceneLayer);
mapSceneLayer->unscheduleUpdate();
SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(true);
CCScene *s = RPGStartSceneLayer::scene();
CCTransitionFade *t = CCTransitionFade::create(GAME_SCENE, s);
CCDirector::sharedDirector()->replaceScene(t);
}
break;
case kRPGMapMenuLayerTagConfirmCancel:
{
this->removeChildByTag(kRPGMapMenuLayerTagConfirm, true);
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu);
mainMenu->setEnabled(true);
}
break;
case kRPGMapMenuLayerTagMainMenuItems:
@@ -200,6 +176,40 @@ void RPGMapMenuLayer::onMenu(cocos2d::CCObject *pObject)
}
void RPGMapMenuLayer::onDialog(cocos2d::CCObject *pObject)
{
CCMenuItem *menuItem = (CCMenuItem*)pObject;
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
switch (menuItem->getTag())
{
case kRPGMapMenuLayerTagDialogExitOK:
{
//确定退出
RPGMapSceneLayer *mapSceneLayer = (RPGMapSceneLayer*)this->getParent();
mapSceneLayer->m_releaseTexture = true;
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(mapSceneLayer);
mapSceneLayer->unscheduleUpdate();
SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(true);
CCScene *s = RPGStartSceneLayer::scene();
CCTransitionFade *t = CCTransitionFade::create(GAME_SCENE, s);
CCDirector::sharedDirector()->replaceScene(t);
}
break;
case kRPGMapMenuLayerTagDialogCancel:
{
this->removeChildByTag(kRPGMapMenuLayerTagDialog, true);
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu);
mainMenu->setEnabled(true);
}
break;
}
}
void RPGMapMenuLayer::createMenuItem(float x, float y, CCString *text, RPGMapMenuLayerTag tag)
{
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu);
+5 -3
View File
@@ -30,9 +30,9 @@ enum RPGMapMenuLayerTag
kRPGMapMenuLayerTagMainMenuClose = 7,
kRPGMapMenuLayerTagMainMenuExit = 8,
kRPGMapMenuLayerTagHandCursor = 22,
kRPGMapMenuLayerTagConfirmExitOK = 9,
kRPGMapMenuLayerTagConfirmCancel = 10,
kRPGMapMenuLayerTagConfirm = 11,
kRPGMapMenuLayerTagDialogExitOK = 9,
kRPGMapMenuLayerTagDialogCancel = 10,
kRPGMapMenuLayerTagDialog = 11,
kRPGMapMenuLayerTagStatusPlayerName = 13,
kRPGMapMenuLayerTagStatusPlayerLevel = 14,
kRPGMapMenuLayerTagStatusPlayerHP = 15,
@@ -64,6 +64,8 @@ private:
float m_height;
void onMenu(CCObject *pObject);
void onDialog(CCObject *pObject);
void createMenuItem(float x, float y, CCString *text, RPGMapMenuLayerTag tag);
void setMainMenuDefault(); //显示右边的菜单
+1 -1
View File
@@ -15,7 +15,7 @@ class RPGMapNPCRoleSprite : public RPGMapRoleSprite
{
private:
bool m_autoMove = false;
bool m_autoMove;
void autoMove(float delay);
void autoMoveEnd();
+2
View File
@@ -19,6 +19,8 @@ enum RPGMapSceneLayerTag
kRPGMapSceneLayerTagMainMenu = 3,
kRPGMapSceneLayerTagMainMenuCommand = 4,
kRPGMapSceneLayerTagMenuLayer = 5,
kRPGMapSceneLayerTagChoicePlayerMenuLayer = 6,
kRPGMapSceneLayerTagChoicePlayerLab = 7,
kRPGMapSceneLayerTagPlayer = 1999,
kRPGMapSceneLayerTagNPC = 2000
+1 -1
View File
@@ -47,7 +47,7 @@ bool RPGMapSkillMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB
mainMenu->addChild(menuBack);
}
CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu3_style1.tmx");
CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu5_style1.tmx");
mainBg->setPosition(CCPointZero);
mainBg->setTag(kRPGMapSkillMenuLayerTagBg);
this->addChild(mainBg);
+3 -2
View File
@@ -12,7 +12,7 @@
#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 PLAYER_DETAIL_QUERY "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)"
@@ -185,7 +185,7 @@ void RPGMapStatusMenuLayer::setStatusPlayer(int dataId)
{
this->removeAllPlayerLab();
CppSQLite3Query query = this->m_db->execQuery(CCString::createWithFormat(PLAYER_QUERY_DETAIL, dataId)->getCString());
CppSQLite3Query query = this->m_db->execQuery(CCString::createWithFormat(PLAYER_DETAIL_QUERY, dataId)->getCString());
while(!query.eof())
{
//左边
@@ -228,6 +228,7 @@ void RPGMapStatusMenuLayer::setStatusPlayer(int dataId)
while(!skillQuery.eof())
{
RPGSkill *skill = RPGSkill::create();
skill->m_dataId = skillQuery.getIntField("id");
skill->m_name = skillQuery.getStringField("name_cns");
skill->m_mp = skillQuery.getIntField("mp");
skill->m_skillAttack = skillQuery.getIntField("skill_attack");
+118
View File
@@ -0,0 +1,118 @@
//
// RPGResultsLogic.cpp
// OzgGameRPG
//
// Created by ozg on 14-4-13.
//
//
#include "RPGResultsLogic.h"
//获取一个player的数据
#define PLAYER_DETAIL_QUERY "select * from player where id = %i"
//使用道具后player的数据更新
#define ITEMS_USE_UPDATE "update player set %s = %i where id = %i"
//使用道具后现有道具的变化
#define SAVEDATA_ITEMS_UPDATE "update save_data set items = '%s' where id = 1"
void RPGResultsLogic::deductionsItems(CppSQLite3DB *db, int itemsId)
{
CppSQLite3Query query = db->execQuery(SAVEDATA_QUERY);
while(!query.eof())
{
JsonBox::Value json;
json.loadFromString(query.getStringField("items"));
JsonBox::Array resultsJsonArr; //输出结果
JsonBox::Array items = json.getArray();
for (int i = 0; i < (int)items.size(); i++)
{
JsonBox::Value item = items[i].getObject();
//扣减目标id
if(item["id"].getInt() == itemsId)
item["total"] = item["total"].getInt() - 1;
//如果该道具没有用完,则加入输出结果
if(item["total"].getInt() > 0)
resultsJsonArr.push_back(item);
}
ostringstream s;
((JsonBox::Value)resultsJsonArr).writeToStream(s);
string result = s.str();
// CCLog("%s", result.c_str());
db->execDML(CCString::createWithFormat(SAVEDATA_ITEMS_UPDATE, result.c_str())->getCString());
query.nextRow();
}
query.finalize();
}
bool RPGResultsLogic::useItems(CppSQLite3DB* db, int playerId, int itemsId)
{
/*
6 草药
7 党参
8 复活药
*/
string field;
string maxField;
if(itemsId == 7)
{
field = "mp"; //党参加mp
maxField = "max_mp";
}
else
{
field = "hp";
maxField = "max_hp";
}
//道具的效果值
int results = 0;
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(PLAYER_DETAIL_QUERY, playerId)->getCString());
while(!query.eof())
{
//死亡状态下不能直接恢复hp的道具
if(query.getIntField("hp") <= 0 && itemsId != 8)
return false;
else if(query.getIntField("hp") <= 0 && itemsId == 8)
results = 1; //复活后是1HP
else if(query.getIntField("hp") > 0 && itemsId == 8)
return false; //活着的人不能使用复活药
else
{
//恢复HP或MP
results = RPGComputingResults::itemCure(itemsId);
results += query.getIntField(field.c_str());
//超过最大值的处理
if(results > query.getIntField(maxField.c_str()))
results = query.getIntField(maxField.c_str());
}
query.nextRow();
}
query.finalize();
//使用道具
{
CCString *sql = CCString::createWithFormat(ITEMS_USE_UPDATE, field.c_str(), results, playerId);
db->execDML(sql->getCString());
CCLog("%s", sql->getCString());
}
//扣减道具数
RPGResultsLogic::deductionsItems(db, itemsId);
CCLog("对player%d 使用了一个道具%d", playerId, itemsId);
return true;
}
+30
View File
@@ -0,0 +1,30 @@
//
// RPGResultsLogic.h
// OzgGameRPG
//
// Created by ozg on 14-4-13.
//
//
#ifndef __OzgGameRPG__RPGResultsLogic__
#define __OzgGameRPG__RPGResultsLogic__
#include "cocos2d.h"
#include "OzgCCUtility.h"
#include "RPGComputingResults.h"
#include "CppSQLite3.h"
#include "JsonBox.h"
USING_NS_CC;
using namespace std;
class RPGResultsLogic
{
public:
static void deductionsItems(CppSQLite3DB* db, int itemsId); //扣减道具数
static bool useItems(CppSQLite3DB* db, int playerId, int itemsId); //使用道具,返回成功或失败
};
#endif /* defined(__OzgGameRPG__RPGResultsLogic__) */
+32 -19
View File
@@ -100,28 +100,12 @@ void RPGStartSceneLayer::onMenu(cocos2d::CCObject *pObject)
{
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
RPGConfirmLayer *confirm = RPGConfirmLayer::create(((CCString*)this->m_stringList->objectForKey("confirm_delete"))->getCString(), ((CCString*)this->m_stringList->objectForKey("confirm_ok"))->getCString(), kRPGStartSceneLayerTagMenuItemConfirmOK, ((CCString*)this->m_stringList->objectForKey("confirm_cancel"))->getCString(), kRPGStartSceneLayerTagMenuItemConfirmCancel, winSize.width, winSize.height, this, menu_selector(RPGStartSceneLayer::onMenu));
confirm->setTag(kRPGStartSceneLayerTagConfirm);
this->addChild(confirm);
RPGDialogLayer *dialog = RPGDialogLayer::create(((CCString*)this->m_stringList->objectForKey("confirm_delete"))->getCString(), ((CCString*)this->m_stringList->objectForKey("confirm_ok"))->getCString(), kRPGStartSceneLayerTagDialogOK, ((CCString*)this->m_stringList->objectForKey("confirm_cancel"))->getCString(), kRPGStartSceneLayerTagDialogCancel, winSize.width, winSize.height, this, menu_selector(RPGStartSceneLayer::onDialog));
dialog->setTag(kRPGStartSceneLayerTagDialog);
this->addChild(dialog);
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGStartSceneLayerTagMenu);
mainMenu->setEnabled(false);
}
break;
case kRPGStartSceneLayerTagMenuItemConfirmOK:
{
this->m_db.execDML("delete from save_data; delete from player;");
this->m_db.execDML(GAME_INIT_SQL);
this->goToMapScene();
}
break;
case kRPGStartSceneLayerTagMenuItemConfirmCancel:
{
this->removeChildByTag(kRPGStartSceneLayerTagConfirm, true);
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGStartSceneLayerTagMenu);
mainMenu->setEnabled(true);
}
break;
default:
@@ -134,6 +118,35 @@ void RPGStartSceneLayer::onMenu(cocos2d::CCObject *pObject)
}
void RPGStartSceneLayer::onDialog(cocos2d::CCObject *pObject)
{
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
CCMenuItem *menuItem = (CCMenuItem*)pObject;
switch (menuItem->getTag())
{
case kRPGStartSceneLayerTagDialogCancel:
{
this->removeChildByTag(kRPGStartSceneLayerTagDialog, true);
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGStartSceneLayerTagMenu);
mainMenu->setEnabled(true);
}
break;
default:
{
//kRPGStartSceneLayerTagMenuItemDialogOK
this->m_db.execDML("delete from save_data;");
this->m_db.execDML(GAME_INIT_SQL);
this->goToMapScene();
}
break;
}
}
void RPGStartSceneLayer::goToMapScene()
{
CCArray *loadTextures = CCArray::create();
+5 -4
View File
@@ -18,9 +18,9 @@ enum RPGStartSceneLayerTag
kRPGStartSceneLayerTagMenu = 2,
kRPGStartSceneLayerTagMenuItemStart = 3,
kRPGStartSceneLayerTagMenuItemDelete = 4,
kRPGStartSceneLayerTagMenuItemConfirmOK = 5,
kRPGStartSceneLayerTagMenuItemConfirmCancel = 6,
kRPGStartSceneLayerTagConfirm = 7
kRPGStartSceneLayerTagDialogOK = 5,
kRPGStartSceneLayerTagDialogCancel = 6,
kRPGStartSceneLayerTagDialog = 7
};
class RPGStartSceneLayer : public RPGBaseSceneLayer
@@ -28,7 +28,8 @@ class RPGStartSceneLayer : public RPGBaseSceneLayer
private:
void onMenu(CCObject *pObject);
void onDialog(CCObject *pObject);
public:
RPGStartSceneLayer();