mirror of
https://github.com/wu736139669/OzgGameRPG.git
synced 2026-08-06 06:41:57 +00:00
道具部分完成,bug修复
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
USING_NS_CC;
|
||||
|
||||
class RPGComputingResults : public CCObject
|
||||
class RPGComputingResults
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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__) */
|
||||
@@ -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
|
||||
|
||||
@@ -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__) */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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__) */
|
||||
@@ -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;
|
||||
|
||||
@@ -31,7 +31,7 @@ public:
|
||||
|
||||
void executeLoading(float delay);
|
||||
void loadCallBack(CCObject* sender);
|
||||
void goToNextScene();
|
||||
void goToNextScene(float delay);
|
||||
};
|
||||
|
||||
#endif /* defined(__OzgGameRPG__RPGLoadingSceneLayer__) */
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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(); //显示右边的菜单
|
||||
|
||||
@@ -15,7 +15,7 @@ class RPGMapNPCRoleSprite : public RPGMapRoleSprite
|
||||
{
|
||||
|
||||
private:
|
||||
bool m_autoMove = false;
|
||||
bool m_autoMove;
|
||||
|
||||
void autoMove(float delay);
|
||||
void autoMoveEnd();
|
||||
|
||||
@@ -19,6 +19,8 @@ enum RPGMapSceneLayerTag
|
||||
kRPGMapSceneLayerTagMainMenu = 3,
|
||||
kRPGMapSceneLayerTagMainMenuCommand = 4,
|
||||
kRPGMapSceneLayerTagMenuLayer = 5,
|
||||
kRPGMapSceneLayerTagChoicePlayerMenuLayer = 6,
|
||||
kRPGMapSceneLayerTagChoicePlayerLab = 7,
|
||||
kRPGMapSceneLayerTagPlayer = 1999,
|
||||
kRPGMapSceneLayerTagNPC = 2000
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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__) */
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user