本来很早就想写关于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);
}
}
}