Cocos2d—X遊戲開發之CCTableView詳解(十一)(附原始碼)
阿新 • • 發佈:2018-12-31
本來很早就想寫關於CCTableView的文章,但是在基本功能實現之後呢,專案需求增加導致對這個控制元件的研究必須更加深入一點.
好的,現在開始介紹一下這個控制元件,在Cocos2d—X引擎中,這是一個仿製iOS裡面的NSTableView的一個控制元件。
S1,使用這個控制元件需要首先引入擴充套件庫檔案
#include "cocos-ext.h"
S2,然後使類繼承CCTableView的2個代理,
class ServerPrizeList :public CCLayer,public CCTableViewDataSource,public CCTableViewDelegate
首先看下 dataSource ,這個裡面的方法將是我們使用的主要方法:
class CCTableViewDataSource { public: virtual ~CCTableViewDataSource() {} /** * cell size for a given index * 每個單元格的尺寸,可以根據idx來個性化定製單元格的尺寸 * @param idx the index of a cell to get a size * @return size of a cell at given index */ virtual CCSize tableCellSizeForIndex(CCTableView *table, unsigned int idx) { return cellSizeForTable(table); }; /** * cell height for a given table. * 一般使用這個方法,定製單元格尺寸,不可以根據idx來定製 * @param table table to hold the instances of Class * @return cell size */ virtual CCSize cellSizeForTable(CCTableView *table) { return CCSizeZero; }; /** * a cell instance at a given index * 這個方法使資料來源的主要方法,初始化資料在這個方法裡面 * @param idx index to search for a cell * @return cell found at idx */ virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx) = 0; /** * Returns number of cells in a given table view. * 返回tableView的單元格數量 * @return number of cells */ virtual unsigned int numberOfCellsInTableView(CCTableView *table) = 0; };
然後,看下CCTableViewDelegate的方法:
class CCTableViewDelegate : public CCScrollViewDelegate { public: /** * Delegate to respond touch event * 實現點選單元格的觸控事件響應,使主要使用方法 * @param table table contains the given cell * @param cell cell that is touched */ virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell) = 0; /** * Delegate to respond a table cell press event. * 設定單元格高亮的狀態 * @param table table contains the given cell * @param cell cell that is pressed */ virtual void tableCellHighlight(CCTableView* table, CCTableViewCell* cell){}; /** * Delegate to respond a table cell release event * 設定單元格非高亮的狀態 * @param table table contains the given cell * @param cell cell that is pressed */ virtual void tableCellUnhighlight(CCTableView* table, CCTableViewCell* cell){}; /** * Delegate called when the cell is about to be recycled. Immediately * after this call the cell will be removed from the scene graph and * recycled. * 迴圈使用某個單元格 * @param table table contains the given cell * @param cell cell that is pressed */ virtual void tableCellWillRecycle(CCTableView* table, CCTableViewCell* cell){}; };
當然,還要實現2個方法:
//因為cctableview繼承自ccscrollview,所以要實現這兩個方法,但是什麼都不做
virtual void scrollViewDidScroll(CCScrollView* view);
virtual void scrollViewDidZoom(CCScrollView* view);
好的,一般繼承下面的幾個方法就足以解決問題:
virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell);
virtual CCSize cellSizeForTable(CCTableView *table);
virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx);
virtual unsigned int numberOfCellsInTableView(CCTableView *table);
S3,然後讓我們在。cpp檔案裡面實現這些代理方法。實現的方法大部分略過,主要使講下
CCTableViewCell* ServerPrizeList::tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx)
按照官方網站的示例和其他文章的例子,在單元格中實現每個單元格的文字的多樣化完全可行。
大家可以看到中間的文字是OK的,但是兩邊的問題就有了,左邊是圖片不能實現異樣化,右邊是兌換的idx獲取不正確。
現在解決了兌換的idx的問題,開始是使用新增單元格的時候,把這個按鈕的tag設定為單元格的idx。
但是問題是,idx在這個按鈕裡面是混亂且無序的。不能正確獲取單元格的idx。
CCMenuItemImage *itemImage = CCMenuItemImage::create("22.png", "22.png", this, menu_selector(ServerPrizeList::menuItemCall2));
//tag預設為-1,通過這個方法得到的tag,就是idx是無序的
if (itemImage->getTag() == -1) {
itemImage->setTag(idx);
}
itemImage->setPosition(ccp(tableCellSize.width*0.75, tableCellSize.height/2));
CCMenu *menu = CCMenu::create(itemImage,NULL);
menu->setPosition(CCPointZero);
pCell->addChild(menu, 1);
後來,看到
tableCellTouched(cocos2d::extension::CCTableView *table, cocos2d::extension::CCTableViewCell *cell)
突然有了靈感,可以獲取按鈕的父類的父類,就是Cell來獲取點選的idx,哈哈,問題終於解決了。
CCTableViewCell *cell = (CCTableViewCell*)(((CCMenuItemImage*)pSender)->getParent()->getParent());
//getIdx()這個方法可以獲取點選單元格的陣列下標
CCLog("idx: %d",cell->getIdx());
現在,還有左邊的問題要解決,如有大神看到,歡迎賜教啊。
2013-07-24 18:03:26.122 問題已經解決,貼圖如下:
附原始碼::
.h檔案;/*******************************************************************
Filename: ServerPrizeList.h
Author: Kevin Version: 1.0 Date:
Description: The main serverPrizeList of this game.
FunctionList:
//1.tableView
virtual bool init();
static cocos2d::CCScene* scene();
virtual void scrollViewDidScroll(CCScrollView* view);
virtual void scrollViewDidZoom(CCScrollView* view);
virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell);
virtual CCSize cellSizeForTable(CCTableView *table);
virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx);
virtual unsigned int numberOfCellsInTableView(CCTableView *table);
CREATE_FUNC(ServerPrizeList);
//2.jsonData
void loginToServer();
void beginToRequestPrizListFromServer();
static size_t writeData(void *ptr,size_t size,size_t nmemb,void *userData);
void parserJsonDataServerPrizeList();
//3.menu
void menuItemCall2(CCObject *pSender);
void menuItemCallToserver(int idx);
//4.0loadImageFromServer
void loadImageFromServer();
static size_t writeDataImage(void *ptr,size_t size,size_t nmemb,void *userData);
********************************************************************/
#ifndef __PrizePerson__ServerPrizeList__
#define __PrizePerson__ServerPrizeList__
#include <iostream>
#include "../libs/cocos2dx/platform/third_party/android/prebuilt/libcurl/include/curl/curl.h"
#include "../jsonBox/JsonBox.h"
#include <stdio.h>
#include <stdlib.h>
#include "cocos2d.h"
#include "cocos-ext.h"
#include "UserData.h"
#include "UserPrizeListLayer.h"
using namespace std;
USING_NS_CC;
USING_NS_CC_EXT;
class ServerPrizeList :public CCLayer,public CCTableViewDataSource,public CCTableViewDelegate {
private:
//1.serverIP
string IP;
string serverPrizeList ;
string serverImage ;
//2.儲存路徑
//這是臨時測試新增的本地桌面cookie
string cookiePath ;
string jsonDataServerPrizeListPath ;
//3.prizeList
int prizeListSize;
int prizeID[100];
int prizeListPrice[100];
string prizeName[100];
string prizeImageName[100];
int tableViewX;
int tableViewCellHeight;
string writablePathLocal ;
UserPrizeListLayer *prizeListLayer;
public:
//4.imageList
static string imageNameFromServer;
//static string writablePathLocal;
//5.toggle
CCMenuItemToggle *toggleServer,*togglePlayer;
static string jsonDataServerList;
public:
virtual void onEnter();
virtual void onExit();
//1.tableView
virtual bool init();
static cocos2d::CCScene* scene();
virtual void scrollViewDidScroll(CCScrollView* view);
virtual void scrollViewDidZoom(CCScrollView* view);
virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell);
virtual CCSize cellSizeForTable(CCTableView *table);
virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx);
virtual unsigned int numberOfCellsInTableView(CCTableView *table);
CREATE_FUNC(ServerPrizeList);
//2.jsonData
void loginToServer();
void beginToRequestPrizListFromServer();
static size_t writeData(void *ptr,size_t size,size_t nmemb,void *userData);
void parserJsonDataServerPrizeList();
//3.menu
void menuItemCall2(CCObject *pSender);
void menuItemCallToserver(int idx);
void menuCloseCallBack(CCObject *pSender);
//4.loadImageFromServer
void loadImageFromServer();
static size_t writeDataImage(void *ptr,size_t size,size_t nmemb,void *userData);
//5.toggle
void menuItemCall(CCObject *pSender);
};
#endif /* defined(__PrizePerson__ServerPrizeList__) */
.cpp 檔案;
/*******************************************************************
Filename: ServerPrizeList.cpp
Author: Kevin Version: 1.0 Date: 13-6-24.
Description: The main serverPrizeList of this game.
FunctionList:
//1.tableView
virtual bool init();
static cocos2d::CCScene* scene();
virtual void scrollViewDidScroll(CCScrollView* view);
virtual void scrollViewDidZoom(CCScrollView* view);
virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell);
virtual CCSize cellSizeForTable(CCTableView *table);
virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx);
virtual unsigned int numberOfCellsInTableView(CCTableView *table);
CREATE_FUNC(ServerPrizeList);
//2.jsonData
void loginToServer();
void beginToRequestPrizListFromServer();
static size_t writeData(void *ptr,size_t size,size_t nmemb,void *userData);
void parserJsonDataServerPrizeList();
//3.menu
void menuItemCall2(CCObject *pSender);
void menuItemCallToserver(int idx);
//4.0loadImageFromServer
void loadImageFromServer();
static size_t writeDataImage(void *ptr,size_t size,size_t nmemb,void *userData);
********************************************************************/
#include "ServerPrizeList.h"
#include "PrizeMoneyChange.h"
#include "GameScene.h"
#include "UserPrizeList.h"
#include "MenuScene.h"
#include "ColorLayer.h"
string ServerPrizeList::jsonDataServerList = "";
string ServerPrizeList::imageNameFromServer = "";
void ServerPrizeList::onEnter()
{
CCLayer::onEnter();
CCLog("getChildrenCount: %d",this->getChildrenCount());
}
void ServerPrizeList::onExit()
{
CCLayer::onExit();
}
CCScene* ServerPrizeList::scene()
{
CCScene *scene = CCScene::create();
ServerPrizeList *layer = ServerPrizeList::create();
scene->addChild(layer);
return scene;
}
#pragma mark-1.0初始化遊戲場景
bool ServerPrizeList::init()
{
if (!CCLayer::init()) {
return false;
}
IP = "http://192.168.1.5";
serverPrizeList = IP+"/prize/list.page";
serverImage = IP+"/images/prizes/";
writablePathLocal = CCFileUtils::sharedFileUtils()->getWritablePath();
//儲存路徑
cookiePath = CCFileUtils::sharedFileUtils()->getWritablePath()+"cookie.txt";
CCLog("%s",cookiePath.c_str());
jsonDataServerPrizeListPath = CCFileUtils::sharedFileUtils()->getWritablePath()+"ServerPrizeListPath.txt";
prizeListLayer = NULL;
//prizeListLayer = UserPrizeListLayer::create();
//新增遮罩層
ColorLayer *modleLayer = ColorLayer::create();
modleLayer->setOpacity(100);
this->addChild(modleLayer);
//背景
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCSprite *bg = CCSprite::create("ZF_Shoot_background_prizeList.png");
CCSize size = bg->getContentSize();
bg->setContentSize(CCSize(winSize.width*0.58, winSize.height*0.98));
//bg->setScaleX(winSize.width/size.width);
//bg->setScaleY(winSize.height/size.height);
bg->setPosition(ccp(winSize.width/2,winSize.height/2));
this->addChild(bg);
//1.載入伺服器所有獎品
this->beginToRequestPrizListFromServer();
this->parserJsonDataServerPrizeList();
//2.init tableView
this->tableViewX = winSize.width*0.17;
//獲取獎品表格的高度
CCSprite *pSprite = CCSprite::create("ZF_Shoot_Button_gridItem.png");
CCSize tableCellSize = pSprite->getContentSize();
this->tableViewCellHeight = tableCellSize.height;
CCTableView *tableView = CCTableView::create(this, CCSizeMake(winSize.width*0.715,winSize.height*0.71));
tableView->setDirection(kCCScrollViewDirectionVertical);
tableView->setAnchorPoint(ccp(0, 0));
tableView->setPosition( ccp(winSize.width*0.225,winSize.height*0.14));
tableView->setDelegate(this);
tableView->setVerticalFillOrder(kCCTableViewFillTopDown);
tableView->setTag(1145);
this->addChild(tableView);
tableView->reloadData();
//3.新增2個按鈕
//ZF_Shoot_button_serverPrizeList_mall2
CCMenuItemImage *item1 = CCMenuItemImage::create("ZF_Shoot_button_serverPrizeList_mall1.png", "ZF_Shoot_button_serverPrizeList_mall1.png");
CCMenuItemImage *item2 = CCMenuItemImage::create("ZF_Shoot_button_serverPrizeList_mall2.png", "ZF_Shoot_button_serverPrizeList_mall2.png");
toggleServer = CCMenuItemToggle::createWithTarget(this, menu_selector(ServerPrizeList::menuItemCall), item1,item2,NULL);
toggleServer->setPosition( CCPointMake(winSize.width*0.335, winSize.height*0.86));
toggleServer->setAnchorPoint(ccp(1, 0));
toggleServer->setEnabled(false);
toggleServer->setTag(1122);
CCMenuItemImage *item3 = CCMenuItemImage::create("ZF_Shoot_button_serverPrizeList_player2.png", "ZF_Shoot_button_serverPrizeList_player2.png");
CCMenuItemImage *item4 = CCMenuItemImage::create("ZF_Shoot_button_serverPrizeList_player1.png", "ZF_Shoot_button_serverPrizeList_player1.png");
togglePlayer = CCMenuItemToggle::createWithTarget(this, menu_selector(ServerPrizeList::menuItemCall), item3,item4,NULL);
togglePlayer->setTag(1133);
togglePlayer->setPosition( CCPointMake(winSize.width*0.435, winSize.height*0.86));
togglePlayer->setAnchorPoint(ccp(1, 0));
CCMenu *menu = CCMenu::create(toggleServer,togglePlayer,NULL);
menu->setPosition(CCPointZero);
this->addChild(menu, 1);
//4.返回按鈕
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"ZF_Shoot_button_coinList_back1.png",
"ZF_Shoot_button_coinList_back2.png",
this,
menu_selector(ServerPrizeList::menuCloseCallBack) );
pCloseItem->setPosition( CCPointMake(winSize.width*0.75 , winSize.height*0.92) );
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition( CCPointZero );
this->addChild(pMenu);
return true;
}
CCTableViewCell* ServerPrizeList::tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx)
{
CCSize tableCellSize = CCSizeMake(1136, 100);
CCTableViewCell *pCell = table->dequeueCell();
string temp = this->prizeImageName[idx];
string imagePath = CCFileUtils::sharedFileUtils()->getWritablePath()+temp;
CCLog("imagePath :%s",imagePath.c_str());
CCSprite *prizePicture = CCSprite::create(imagePath.c_str());
prizePicture->setAnchorPoint(CCPointZero);
prizePicture->setPosition(ccp(30, 50));
prizePicture->setScale(1);
prizePicture->setTag(122);
if (!pCell) {
pCell = new CCTableViewCell();
pCell->autorelease();
//1.表格背景ZF_Shoot_Button_gridItem
CCSprite *pSprite = CCSprite::create("ZF_Shoot_Button_gridItem.png");
CCSize sizeSprite = pSprite->getContentSize();
//pSprite->setScale(sizeSprite.width/winSize.width);
pSprite->setAnchorPoint(CCPointZero);
pSprite->setPosition(CCPointZero);
pSprite->setScale(1);
pCell->addChild(pSprite);
//2.prizePicture
pCell->removeChildByTag(122);
pCell->addChild(prizePicture);
//3.prizeName
CCLabelTTF *pLabeName = CCLabelTTF::create(this->prizeName[idx].c_str(), "Arial", 28);
pLabeName->setPosition(ccp(20, 3));
pLabeName->setAnchorPoint(CCPointZero);
pLabeName->setTag(123);
pLabeName->setColor(ccc3(88, 88,88));
pCell->addChild(pLabeName);
//4.prizePrice
char priceChar[11];
sprintf(priceChar, "%d",this->prizeListPrice[idx]);
string t1 = "";
string t2 = "兌換幣";
t1 = t1 + priceChar + t2;
CCLabelTTF *pLabelPrice = CCLabelTTF::create(t1.c_str(), "Arial", 28);
pLabelPrice->setPosition(ccp(tableCellSize.width*0.34, tableCellSize.height*0.8));
pLabelPrice->setAnchorPoint(CCPointZero);
pLabelPrice->setTag(124);
pLabelPrice->setColor(ccc3(249, 136, 26));
pCell->addChild(pLabelPrice);
//5.換成兌換幣
CCMenuItemImage *itemImage = CCMenuItemImage::create("ZF_Shoot_Button_exchange1.png", "ZF_Shoot_Button_exchange2.png", this, menu_selector(ServerPrizeList::menuItemCall2));
if (itemImage->getTag() == -1) {
itemImage->setTag(idx);
}
itemImage->setPosition(ccp(tableCellSize.width*0.4, tableCellSize.height*0.42));
CCMenu *menu = CCMenu::create(itemImage,NULL);
menu->setPosition(CCPointZero);
pCell->addChild(menu, 1);
}else{
/*string temp = this->prizeImageName[idx];
string imagePath = writablePathLocal+temp;
CCSprite *picSprite = (CCSprite*)pCell->getChildByTag(122);
//picSprite->setTexture(CCTextureCache::sharedTextureCache()->addImage(imagePath.c_str()));
CCLog("imagePath: %s",imagePath.c_str());
picSprite = CCSprite::create(imagePath.c_str());*/
pCell->removeChildByTag(122);
pCell->addChild(prizePicture);
CCLabelTTF *pLabeName = (CCLabelTTF*)pCell->getChildByTag(123);
pLabeName->setString(this->prizeName[idx].c_str());
char priceChar[11];
sprintf(priceChar, "%d",this->prizeListPrice[idx]);
//string t1 = "獎品價值:";
string t1 = "";
string t2 = "兌換幣";
t1 = t1 + priceChar + t2;
CCLabelTTF *pLabelPrice = (CCLabelTTF*)pCell->getChildByTag(124);
pLabelPrice->setString(t1.c_str());
}
return pCell;
}
#pragma mark-3.0兌獎
//使用兌換幣兌獎
void ServerPrizeList::menuItemCall2(CCObject *pSender)
{
CCTableViewCell *cell = (CCTableViewCell*)(((CCMenuItemImage*)pSender)->getParent()->getParent());
((CCMenuItemImage*)pSender)->getTag();
CCLOG("使用兌換幣兌獎*********");
PrizeMoneyChange acceptPrize;
acceptPrize.prizeID = this->prizeID[cell->getIdx()];
acceptPrize.prizeName = this->prizeName[cell->getIdx()];
acceptPrize.prizePrice = this->prizeListPrice[cell->getIdx()];
CCDirector::sharedDirector()->pushScene(CCTransitionSlideInR::create(1, PrizeMoneyChange::scene()));
}
void ServerPrizeList::menuItemCallToserver(int idx)
{
PrizeMoneyChange acceptPrize;
acceptPrize.prizeID = this->prizeID[idx];
acceptPrize.prizeName = this->prizeName[idx];
acceptPrize.prizePrice = this->prizeListPrice[idx];
CCDirector::sharedDirector()->pushScene(CCTransitionSlideInR::create(1, PrizeMoneyChange::scene()));
}
#pragma mark-tableViewInit()
void ServerPrizeList::tableCellTouched(cocos2d::extension::CCTableView *table, cocos2d::extension::CCTableViewCell *cell)
{
}
CCSize ServerPrizeList::cellSizeForTable(cocos2d::extension::CCTableView *table)
{
return CCSizeMake(this->tableViewX, this->tableViewCellHeight-5);
}
unsigned int ServerPrizeList::numberOfCellsInTableView(cocos2d::extension::CCTableView *table)
{
return this->prizeListSize;
}
void ServerPrizeList::scrollViewDidScroll(cocos2d::extension::CCScrollView *view)
{
}
void ServerPrizeList::scrollViewDidZoom(cocos2d::extension::CCScrollView *view)
{
}
#pragma mark-2.0請求獎品資料
void ServerPrizeList::beginToRequestPrizListFromServer()
{
CURL *easyHandle = curl_easy_init();
if (easyHandle) {
curl_easy_setopt(easyHandle, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(easyHandle, CURLOPT_URL, this->serverPrizeList.c_str());
curl_easy_setopt(easyHandle, CURLOPT_COOKIEJAR,this->cookiePath.c_str());
curl_easy_setopt(easyHandle, CURLOPT_COOKIEFILE,this->cookiePath.c_str());
curl_easy_setopt(easyHandle, CURLOPT_WRITEFUNCTION, ServerPrizeList::writeData);
curl_easy_perform(easyHandle);
curl_easy_cleanup(easyHandle);
}
}
size_t ServerPrizeList::writeData(void *ptr, size_t size, size_t nmemb, void *userData)
{
string temp = (char*)ptr;
jsonDataServerList = jsonDataServerList + temp;
CCLog("%s",jsonDataServerList.c_str());
return size * nmemb;
/*string jsonDataServerPrizeListPath = CCFileUtils::sharedFileUtils()->getWritablePath()+"ServerPrizeListPath.txt";
FILE *fp = fopen(jsonDataServerPrizeListPath.c_str(), "ab");
int writeen = fwrite(ptr, size, nmemb, fp);
fclose(fp);
return writeen;*/
}
void ServerPrizeList::parserJsonDataServerPrizeList()
{
JsonBox::Value json;
json.loadFromString(jsonDataServerList.c_str());
jsonDataServerList = "";
//json.loadFromFile(this->jsonDataServerPrizeListPath.c_str());
//remove(this->jsonDataServerPrizeListPath.c_str());
JsonBox::Value jsonData;
jsonData = json["list"];
cout<<jsonData<<endl;
this->prizeListSize = (int)json["list"].getArray().size();
CCLog("prizeListSize :%d",prizeListSize);
for (int i=0; i < this->prizeListSize; i++) {
this->prizeID[i] = jsonData[size_t(i)]["id"].getInt();
CCLog("jsonData[size_t(i)][id].getInt() :%d",jsonData[size_t(i)]["id"].getInt());
this->prizeListPrice[i] = jsonData[size_t(i)]["listPrice"].getInt();
CCLog("jsonData[size_t(i)][listPrice].getInt() :%d",jsonData[size_t(i)]["listPrice"].getInt());
this->prizeName[i] = jsonData[size_t(i)]["name"].getString().c_str();
CCLog("jsonData[size_t(i)][prizeName].getInt() :%s",jsonData[size_t(i)]["name"].getString().c_str());
this->prizeImageName[i] = jsonData[size_t(i)]["imageName"].getString();
CCLog("jsonData[size_t(i)][prizeImageName] :%s",jsonData[size_t(i)]["imageName"].getString().c_str());
//動態獲取伺服器獎品圖片
this->imageNameFromServer = this->prizeImageName[i];
//移除本地圖片
remove((this->writablePathLocal+this->imageNameFromServer).c_str());
if (access((this->writablePathLocal+this->imageNameFromServer).c_str(), 0)==0) {
CCLog("圖片存在,不用載入");
}else{
CCLog("圖片不存在,載入");
this->loadImageFromServer();
}
//remove((this->writablePathLocal+this->imageNameFromServer).c_str());
//this->loadImageFromServer();
}
}
#pragma mark-4.0登陸游戲
void ServerPrizeList::loginToServer()
{
string postData = "un=Player_65051&pw=";
string IP = "http://192.168.1.5";
string serverIP5 = IP+"/jforum?module=user&action=sjlogin";
string cookiePath = "/Users/mac/Desktop/cookie2.txt";
CURL *easyHandle1 = curl_easy_init();
if (easyHandle1) {
curl_easy_setopt(easyHandle1, CURLOPT_URL, serverIP5 .c_str());
curl_easy_setopt(easyHandle1, CURLOPT_POSTFIELDS, postData.c_str());
curl_easy_setopt(easyHandle1, CURLOPT_COOKIEJAR,cookiePath.c_str());
curl_easy_setopt(easyHandle1, CURLOPT_COOKIEFILE,cookiePath.c_str());
curl_easy_setopt(easyHandle1, CURLOPT_VERBOSE, 1L);
}
curl_easy_perform(easyHandle1);
curl_easy_cleanup(easyHandle1);
}
#pragma mark-5.0載入圖片
void ServerPrizeList::loadImageFromServer()
{
this->serverImage = "http://192.168.1.5/images/prizes/";
this->serverImage = this->serverImage+imageNameFromServer;
CURL *easyHandle1 = curl_easy_init();
if (easyHandle1) {
curl_easy_setopt(easyHandle1, CURLOPT_URL, this->serverImage .c_str());
curl_easy_setopt(easyHandle1, CURLOPT_COOKIEJAR,this->cookiePath.c_str());
curl_easy_setopt(easyHandle1, CURLOPT_COOKIEFILE,this->cookiePath.c_str());
curl_easy_setopt(easyHandle1, CURLOPT_VERBOSE, 1L);
curl_easy_setopt(easyHandle1, CURLOPT_WRITEFUNCTION, ServerPrizeList::writeDataImage);
}
curl_easy_perform(easyHandle1);
curl_easy_cleanup(easyHandle1);
}
size_t ServerPrizeList::writeDataImage(void *ptr, size_t size, size_t nmemb, void *userData)
{
string imagePath = CCFileUtils::sharedFileUtils()->getWritablePath()+imageNameFromServer;
FILE *fp = fopen(imagePath.c_str(), "ab");
int writeen = fwrite(ptr, size, nmemb, fp);
fclose(fp);
return writeen;
}
#pragma mark-返回
void ServerPrizeList::menuCloseCallBack(cocos2d::CCObject *pSender)
{
((MenuScene*)this->getParent())->sceneMenu->setTouchEnabled(true);
((MenuScene*)this->getParent())->richMenu->setTouchEnabled(true);
((MenuScene*)this->getParent())->headMenu->setTouchEnabled(true);
this->removeFromParentAndCleanup(true);
}
#pragma mark-toggle
void ServerPrizeList::menuItemCall(cocos2d::CCObject *pSender)
{
CCMenuItemToggle *temp = (CCMenuItemToggle*)pSender;
CCLog("getTag :%d",temp->getTag());
//UserPrizeListLayer *prizeListLayer = NULL;
if (!prizeListLayer) {
prizeListLayer = UserPrizeListLayer::create();
this->addChild(prizeListLayer, 1);
}
prizeListLayer->setTag(1144);
//server = rich
if (((CCMenuItemToggle*)pSender)->getTag() == 1122) {
if (togglePlayer->getSelectedIndex() == 1) {
togglePlayer->setSelectedIndex(0);
this->getChildByTag(1144)->setVisible(false);
this->getChildByTag(1145)->setVisible(true);
toggleServer->setEnabled(false);
togglePlayer->setEnabled(true);
}
else{
togglePlayer->setSelectedIndex(1);
this->getChildByTag(1145)->setVisible(false);
this->getChildByTag(1144)->setVisible(true);
}
}
//player = shoot
if (((CCMenuItemToggle*)pSender)->getTag() == 1133) {
if (toggleServer->getSelectedIndex() == 1) {
toggleServer->setSelectedIndex(0);
this->getChildByTag(1144)->setVisible(false);
this->getChildByTag(1145)->setVisible(true);
}
else{
toggleServer->setSelectedIndex(1);
this->getChildByTag(1144)->setVisible(true);
this->getChildByTag(1145)->setVisible(false);
toggleServer->setEnabled(true);
togglePlayer->setEnabled(false);
}
}
}