1. 程式人生 > >Cocos2d—X遊戲開發之CCTableView詳解(十一)(附原始碼)

Cocos2d—X遊戲開發之CCTableView詳解(十一)(附原始碼)

本來很早就想寫關於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);
            
            
        }
        
    }
   
}