scrollView滚动视图实现商城模块

来源:互联网 发布:污是什么意思网络用语 编辑:程序博客网 时间:2024/06/07 14:56

自己看回之前写的代码都有点吃力,早期代码比较乱,很多东西都没有封装起来,但是一些功能性的东西还是有的,可以参考一下。

实例代码:

ScrollViewTest2.h

#ifndef _ScrollViewTest2_H_

#define _ScrollViewTest2_H_
#include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC_EXT;
using namespace cocos2d;
using namespace cocos2d::extension;

extern int giftTag;



class ScrollViewTest2 :public CCLayer, public CCScrollViewDelegate
{
public:
static cocos2d::CCScene* createScene();//获取欢迎画面的CCScene
virtual bool init();

//scroll 委托
virtual void scrollViewDidScroll(CCScrollView* view);
virtual void scrollViewDidZoom(CCScrollView* view);
virtual void scrollViewMoveOver(CCScrollView* view);
CCNode* create9Sprite(float pWith, float pHeight);//创建9妹精灵 

virtual bool ccTouchBegan(CCTouch *CCTouch, CCEvent *pCCEvent);
virtual void ccTouchMoved(CCTouch *CCTouch, CCEvent *pCCEvent);
virtual void ccTouchEnded(CCTouch *CCTouch, CCEvent *pCCEvent);

CCLabelTTF* buy_information;

CCLabelTTF* buy_information1;

CCLabelTTF* buy_price;

//CCSprite*xuanding;//勾选

void getTestTag(int tag);//获取道具描述的tag



void buyClick(CCObject*sender);//购买按钮回调

void chooseClick(CCObject*sender);//选择按钮回调

CCSize winSize;

void homeClick(CCObject* sender);//返回主界面

CCLabelAtlas* goldNum;//金币数量

virtual void update(float dt);//更新金币数量

CCLabelAtlas* magnetNum;//磁铁数量
CCLabelAtlas* shieldNum;//护盾数量
CCLabelAtlas* rocketNum;//火箭数量
CCLabelAtlas* bloodNum;//血瓶数量





CREATE_FUNC(ScrollViewTest2);

private:
//根据手势滑动的距离和方向滚动图层
void adjustCCScrollView(float offset);
private:
//存放所有图片
CCArray* m_spVec;

//当前的CCScrollView
extension::CCScrollView *m_CCScrollView;

//CCTouchBegen时的触摸位置
CCPoint m_CCTouchCCPoint;

//当前是第几张图片
int m_currentPage;

float thelastPos;
float xOffSet;//存储偏离量

CCScrollView* scrollView;
int x; //CCScrollView的当前横坐标
private:
CCArray* sp_vec;//声明一个容器
};

#endif



ScrollViewTest2.cpp

#include "ScrollViewTest2.h"
#include "StartGame.h"
#include "DataManager.h"
#include "BaseUtils.h"
#include "Hero.h"
#include "Goldlayer.h"
#include "JNIUtil.h"
USING_NS_CC;


/*
* 精灵真正的位置为:spr->getPositionX + 偏移量
*/

int giftTag;
int sprIdx;

std::string magnetStr;
std::string shieldStr;
std::string rocketStr;
std::string bloodStr;


//越向右偏移量越小
#define MIDDLE_POSITION 240
#define FIRST_OFFSET 160 //第一个spr置于中间的偏移量
#define LAST_OFFSET -1040 //最后一个spr置于中间的偏移量,计算:第一个减掉((spr总数-1) * spr宽度) 160-(13-1)*100=-1040
#define CELL_WIDTH 100
#define BIG_SCALE 3.0f

CCScene* ScrollViewTest2::createScene(){
CCLayer* layer = ScrollViewTest2::create();
CCScene* scene = CCScene::create();
scene->addChild(layer);
return scene;
}

void ScrollViewTest2::update(float dt){

countDownTime -= dt;
ONLINE_GIFT_TIME += dt;
int goldNum_xda = DataManager::getInstance()->getGoldNum();
std::string goldStr;
goldStr = CCString::createWithFormat("%d", goldNum_xda)->getCString();

goldNum->setString(goldStr.c_str());

//磁铁数量
int magnetNum_xda = DataManager::getInstance()->getMagnetNum();
//std::string magnetStr;
magnetStr = CCString::createWithFormat("%d", magnetNum_xda)->getCString();
magnetNum->setString(magnetStr.c_str());

//护盾数量
int shieldNum_xda = DataManager::getInstance()->getShieldNum();

shieldStr = CCString::createWithFormat("%d", shieldNum_xda)->getCString();
shieldNum->setString(shieldStr.c_str());

//火箭数量
int rocketNum_xda = DataManager::getInstance()->getRocketNum();
rocketStr = CCString::createWithFormat("%d", rocketNum_xda)->getCString();
rocketNum->setString(rocketStr.c_str());

//血瓶数量
int bloodNum_xda = DataManager::getInstance()->getBloodNum();
bloodStr = CCString::createWithFormat("%d", bloodNum_xda)->getCString();
bloodNum->setString(bloodStr.c_str());


}


bool ScrollViewTest2::init()
{
if (!CCLayer::init())
{
return false;
}

scheduleUpdate();

CCLOG("11111111111111111");

//商城界面
winSize = CCDirector::sharedDirector()->getWinSize();
CCSprite*shopLayer = CCSprite::create("beijing2_xda.png");
shopLayer->setPosition(ccp(winSize.width / 2, winSize.height / 2));

this->addChild(shopLayer);

//左上角商城图标
CCSprite*shopPictuer = CCSprite::create("shop.png");
shopPictuer->setPosition(ccp(50, 280));
shopPictuer->setScale(0.8f);
this->addChild(shopPictuer);


//购买按钮
CCMenuItemImage* buy_btn = CCMenuItemImage::create("buy.png", "buy.png", this, menu_selector(ScrollViewTest2::buyClick));
buy_btn->setPosition(ccp(winSize.width /2+20, 50));
buy_btn->setScale(0.7f);

CCMenu*shopMenu_2 = CCMenu::create(buy_btn, NULL);
shopMenu_2->setPosition(CCPointZero);
this->addChild(shopMenu_2);
shopMenu_2->setTag(216);

CCLOG("2");
//选择按钮按钮
CCMenuItemImage* choose_btn = CCMenuItemImage::create("choose.png", "choose.png", this, menu_selector(ScrollViewTest2::chooseClick));
choose_btn->setPosition(ccp(winSize.width / 2+20, 50));
choose_btn->setScale(0.7f);
CCMenu*shopMenu_3 = CCMenu::create(choose_btn, NULL);
shopMenu_3->setPosition(CCPointZero);
this->addChild(shopMenu_3,1);
shopMenu_3->setVisible(false);
shopMenu_3->setTag(710);





//返回主页按钮
CCMenuItemImage* home_btn = CCMenuItemImage::create("home_btn.png", "home_btn.png", this, menu_selector(ScrollViewTest2::homeClick));
home_btn->setPosition(ccp(winSize.width - 40, 50));
home_btn->setScale(0.7f);
CCMenu*shopMenu_1 = CCMenu::create(home_btn, NULL);
shopMenu_1->setPosition(CCPointZero);
this->addChild(shopMenu_1);

//道具描述


buy_information = CCLabelTTF::create(GBK_TO_UTF8("金币磁铁").c_str(), "Arial", 24);
buy_information->setColor(ccYELLOW);

buy_information->setPosition(ccp(winSize.width / 2+20, 250));
this->addChild(buy_information);
buy_information->setTag(1212);


buy_information1= CCLabelTTF::create(GBK_TO_UTF8("不会加速但金币滚滚来").c_str(), "Arial", 18);
//buy_information1->setColor(ccYELLOW);

buy_information1->setPosition(ccp(winSize.width / 2+20, 220));
this->addChild(buy_information1);
buy_information1->setTag(121295);



//道具价格
buy_price = CCLabelTTF::create(GBK_TO_UTF8("20.00RMB").c_str(), "Arial", 18);
buy_price->setColor(ccYELLOW);

buy_price->setPosition(ccp(winSize.width / 2+20, 80));
this->addChild(buy_price);
buy_price->setTag(8080);


CCLOG("31111111111111111");


//金币
CCSprite * gold_png = CCSprite::create("gold.png");
gold_png->setScale(0.7f);
gold_png->setPosition(ccp(winSize.width - 30, 280));
this->addChild(gold_png);

goldNum = CCLabelAtlas::create("99999", "num1.png", 12, 17, 48);
goldNum->setPosition(ccp(winSize.width - 100, 270));
goldNum->setColor(ccYELLOW);
goldNum->setAnchorPoint(CCPointZero);
this->addChild(goldNum);


//磁铁数量

magnetNum = CCLabelAtlas::create("99999", "num1.png", 12, 17, 48);
magnetNum->setPosition(ccp(winSize.width/2+60, 70));
magnetNum->setColor(ccYELLOW);
magnetNum->setAnchorPoint(CCPointZero);
this->addChild(magnetNum);
magnetNum->setTag(1007);

//护盾数量
shieldNum = CCLabelAtlas::create("99999", "num1.png", 12, 17, 48);
shieldNum->setPosition(ccp(winSize.width / 2 + 60, 70));
shieldNum->setColor(ccYELLOW);
shieldNum->setAnchorPoint(CCPointZero);
this->addChild(shieldNum);

//火箭数量
rocketNum = CCLabelAtlas::create("99999", "num1.png", 12, 17, 48);
rocketNum->setPosition(ccp(winSize.width / 2 + 60, 70));
rocketNum->setColor(ccYELLOW);
rocketNum->setAnchorPoint(CCPointZero);
this->addChild(rocketNum);


//血瓶数量
bloodNum = CCLabelAtlas::create("99999", "num1.png", 12, 17, 48);
bloodNum->setPosition(ccp(winSize.width / 2 + 60, 70));
bloodNum->setColor(ccYELLOW);
bloodNum->setAnchorPoint(CCPointZero);
this->addChild(bloodNum);




CCSize winSize = CCDirector::sharedDirector()->getWinSize();

//首先创建CCScrollView
CCLayer* scroll_layer = CCLayer::create();//创建CCScrollView中的容器层
scroll_layer->setPosition(CCPoint(0, 0));
scroll_layer->setAnchorPoint(CCPoint(0, 0));
scroll_layer->setContentSize(winSize);//设置容器层大小为(CELL_WIDTH0,300)
scroll_layer->setTag(101);

scrollView = CCScrollView::create(CCSize(winSize.width, 300), scroll_layer);//创建scrollView,显示窗口大小为(400,300)
scrollView->setDelegate(this);//设置委托
scrollView->setDirection(kCCScrollViewDirectionHorizontal);//设置滚动方向为水平
scrollView->setTouchEnabled(true);
scrollView->setPosition(CCPoint(0, 50));
scrollView->setBounceable(true);
scrollView->setTag(100);
this->addChild(scrollView, 2);

sp_vec = CCArray::createWithCapacity(100);
sp_vec->retain();

//增加商品
for (int i = 1; i < 14; i++){
char tmp[256];
sprintf(tmp, "p%d.png", i);
CCSprite* spr = CCSprite::create(tmp);
//spr->setAnchorCCPoint(CCPoint(0, 0));
spr->setPosition(CCPoint(i*CELL_WIDTH, 100));//没设置锚点,则默认在正中央
spr->setTag(i);


scroll_layer->addChild(spr,2);

sp_vec->addObject(spr);

CCSprite* xuanding = CCSprite::create("gouxuan.png");//人物的勾选
xuanding->setPosition(ccp(winSize.width / 2 -200, -10));
xuanding->setVisible(false);
xuanding->setScale(0.5f);
spr->addChild(xuanding, 3);//放到道具图标里面
xuanding->setTag(i);

//if (DataManager::getHeroNum()+5==sprIdx)
//{
CCLOG("411111111111111111");
if (DataManager::getHeroNum() + 5 == i)
{

spr->getChildByTag(i)->setVisible(true);


}

else
{
spr->getChildByTag(i)->setVisible(false);
}


//}

CCSprite* xuanding_cj = CCSprite::create("gouxuan.png");//场景的勾选
xuanding_cj->setPosition(ccp(winSize.width / 2 - 200, -10));
xuanding_cj->setVisible(false);
xuanding_cj->setScale(0.5f);
spr->addChild(xuanding_cj, 3);//放到道具图标里面
xuanding_cj->setTag(i+100);




if (DataManager::getSceneNum() + 11 == i)
{

spr->getChildByTag(i+100)->setVisible(true);


}

else
{
spr->getChildByTag(i+100)->setVisible(false);
}






}

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, true, this);
//auto listener = EventListenerTouchOneByOne::create();
////设置是否想下传递触摸
//listener->setSwallowTouches(true);
//listener->onTouchBegan = CC_CALLBACK_2(ScrollViewTest2::onTouchBegan, this);
//listener->onTouchMoved = CC_CALLBACK_2(ScrollViewTest2::onTouchMoved, this);
//listener->onTouchEnded = CC_CALLBACK_2(ScrollViewTest2::onTouchEnded, this);
////将触摸监听添加到eventDispacher中去
//_eventDispatcher->addEventListenerWithCCSceneGraphPriority(listener, this);
////注册触摸结束

//最开始把第一个商品偏移到正中央
scrollView->setContentOffset(CCPoint(FIRST_OFFSET, 0), false);



CCLOG("51111111111111111");

return true;
}

void ScrollViewTest2::getTestTag(int tag){
//getChildByTag(1212);
CCLabelTTF*test = (CCLabelTTF*)getChildByTag(1212);
CCLabelTTF*test1 = (CCLabelTTF*)getChildByTag(8080);
CCLabelTTF*test2 = (CCLabelTTF*)getChildByTag(121295);

//char tmp1[256];
////sprintf(tmp1, GBK_TO_UTF8("当前持有:%s").c_str(), magnetStr.c_str());//拼接字符串 ,magnetStr.c_str() 表示数量
//sprintf(tmp1, GBK_TO_UTF8("当前持有:%s").c_str());

//char tmp2[256];
//sprintf(tmp2, GBK_TO_UTF8("当前持有:%s").c_str());

//char tmp3[256];
//sprintf(tmp3, GBK_TO_UTF8("当前持有:%s").c_str());

//char tmp4[256];
//sprintf(tmp4, GBK_TO_UTF8("当前持有:%s").c_str());

switch (tag)
{
case 1:
test->setString(GBK_TO_UTF8("金币磁铁").c_str());
test1->setString(GBK_TO_UTF8("当前持有:").c_str());
test2->setString(GBK_TO_UTF8("不会加速但金币滚滚来").c_str());
magnetNum->setVisible(true);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);
break;
case 2:
test->setString(GBK_TO_UTF8("护盾").c_str());
test1->setString(GBK_TO_UTF8("当前持有:").c_str());
test2->setString(GBK_TO_UTF8("无视障碍10秒").c_str());
shieldNum->setVisible(true);
magnetNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);
break;
case 3:
test->setString(GBK_TO_UTF8("火箭冲刺").c_str());
test1->setString(GBK_TO_UTF8("当前持有:").c_str());
test2->setString(GBK_TO_UTF8("进行加速10秒!").c_str());
rocketNum->setVisible(true);
shieldNum->setVisible(false);
magnetNum->setVisible(false);
bloodNum->setVisible(false);

break;
case 4:
test->setString(GBK_TO_UTF8("加血道具").c_str());
test1->setString(GBK_TO_UTF8("当前持有:").c_str());
test2->setString(GBK_TO_UTF8("补满血量!").c_str());
bloodNum->setVisible(true);
shieldNum->setVisible(false);
magnetNum->setVisible(false);
rocketNum->setVisible(false);

break;
case 5:
test->setString(GBK_TO_UTF8("小摔哥").c_str());
test1->setString(GBK_TO_UTF8(" ").c_str());
test2->setString(GBK_TO_UTF8("穿戴正常的小摔哥!").c_str());
magnetNum->setVisible(false);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);
break;
case 6:
test->setString(GBK_TO_UTF8("兵马俑小摔哥\n").c_str());
test1->setString(GBK_TO_UTF8("20.00.RMB").c_str());
test2->setString(GBK_TO_UTF8("秦始皇时代可流行了!").c_str());
magnetNum->setVisible(false);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);

break;
case 7:
test->setString(GBK_TO_UTF8("财神皮肤").c_str());
test1->setString(GBK_TO_UTF8("20.00.RMB").c_str());
test2->setString(GBK_TO_UTF8("喜气财气!").c_str());
magnetNum->setVisible(false);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);

break;
case 8:
test->setString(GBK_TO_UTF8("熊猫皮肤").c_str());
test1->setString(GBK_TO_UTF8("20.00.RMB").c_str());
test2->setString(GBK_TO_UTF8("竹子吃多了!").c_str());

magnetNum->setVisible(false);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);
break;
case 9:
test->setString(GBK_TO_UTF8("金币礼包").c_str());
test1->setString(GBK_TO_UTF8("20.00.RMB").c_str());
test2->setString(GBK_TO_UTF8("获得金币2000!").c_str());

magnetNum->setVisible(false);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);
break;

case 10:
test->setString(GBK_TO_UTF8("金币礼包").c_str());
test1->setString(GBK_TO_UTF8("10.00.RMB").c_str());
test2->setString(GBK_TO_UTF8("获得金币1000!").c_str());

magnetNum->setVisible(false);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);
break;

case 11:
test->setString(GBK_TO_UTF8("企鹅峰").c_str());
test1->setString(GBK_TO_UTF8(" ").c_str());
test2->setString(GBK_TO_UTF8("最原始的雪崩逃生体验!").c_str());

magnetNum->setVisible(false);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);
break;

case 12:
test->setString(GBK_TO_UTF8("咆哮山").c_str());
test1->setString(GBK_TO_UTF8("20.00.RMB").c_str());
test2->setString(GBK_TO_UTF8("开启新场景,来挑战吧!").c_str());

magnetNum->setVisible(false);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);
break;
case 13:

test->setString(GBK_TO_UTF8("鹰啸崖").c_str());
test1->setString(GBK_TO_UTF8("20.00.RMB").c_str());
test2->setString(GBK_TO_UTF8("开启新场景,来挑战吧!").c_str());

magnetNum->setVisible(false);
shieldNum->setVisible(false);
rocketNum->setVisible(false);
bloodNum->setVisible(false);
break;

/* case 14:

test->setString(GBK_TO_UTF8("").c_str());
test1->setString(GBK_TO_UTF8("").c_str());
test2->setString(GBK_TO_UTF8("").c_str());
break;

case 15:

test->setString(GBK_TO_UTF8("").c_str());
test1->setString(GBK_TO_UTF8("").c_str());
test2->setString(GBK_TO_UTF8("").c_str());
break;*/
default:
break;



}
}



//int sprIdx;
void ScrollViewTest2::scrollViewDidScroll(CCScrollView* view)
{


CCLOG("CCScrollViewDidScroll");
//在CCScrollView拖动时响应该函数

float offsetPosX = (view->getContentOffset()).x;//获得偏移X坐标(向右移动,偏移量为正数,向左则为负数)
//CCLOG("offset pos is %f , %f", view->getContentOffset().x, view->getContentOffset().y);
//for 循环遍历容器中的每个精灵
CCObject* pObj;
//正向




CCARRAY_FOREACH(sp_vec, pObj)
{
CCSprite* e = (CCSprite*)pObj;
float CCPointX = e->getPositionX();//获得当前对象的X坐标(不管怎么滚动,这个坐标都是不变的)
float endPosX = CCPointX + offsetPosX;//将精灵的 X坐标 + 偏移X坐标


//当endPosX在 中间 范围,则对象变大
if (endPosX > (MIDDLE_POSITION - CELL_WIDTH / 2) && endPosX < (MIDDLE_POSITION + CELL_WIDTH / 2))
{
e->setScale(1.0f);
sprIdx = e->getTag();//获得正中间的商品的Tag
getTestTag(e->getTag());
if (sprIdx == 5 || sprIdx == 11)
{
getChildByTag(710)->setVisible(true);
getChildByTag(216)->setVisible(false);
}
else if (sprIdx == 6 && DataManager::getIsBuyGoldHero())
{
getChildByTag(710)->setVisible(true);
getChildByTag(216)->setVisible(false);
getChildByTag(8080)->setVisible(false);
}
else if (sprIdx == 7 && DataManager::getIsBuyFortuneHero())
{
getChildByTag(710)->setVisible(true);
getChildByTag(216)->setVisible(false);
getChildByTag(8080)->setVisible(false);
}
else if (sprIdx == 8 && DataManager::getIsBuyPandaHero())
{
getChildByTag(710)->setVisible(true);
getChildByTag(216)->setVisible(false);
getChildByTag(8080)->setVisible(false);
}
/*else if (sprIdx == 10)
{
getChildByTag(710)->setVisible(true);
getChildByTag(216)->setVisible(false);
}*/
else if (sprIdx == 12 && DataManager::getIsBuyPaoxiaoshan())
{
getChildByTag(710)->setVisible(true);
getChildByTag(216)->setVisible(false);
getChildByTag(8080)->setVisible(false);
}
else if (sprIdx == 13 && DataManager::getIsBuyYingxiaoya())
{
getChildByTag(710)->setVisible(true);
getChildByTag(216)->setVisible(false);
getChildByTag(8080)->setVisible(false);
}
else
{
getChildByTag(710)->setVisible(false);
getChildByTag(216)->setVisible(true);
getChildByTag(8080)->setVisible(true);
}


}
else
{
//不是在上面的范围,则设置为正常大小
e->setScale(0.5f);
}

}



// for (auto e : sp_vec)
// {
// auto CCPointX = e->getPositionX();//获得当前对象的X坐标(不管怎么滚动,这个坐标都是不变的)
// float endPosX = CCPointX + offsetPosX;//将精灵的 X坐标 + 偏移X坐标


// //当endPosX在 中间 范围,则对象变大
// if (endPosX > (MIDDLE_POSITION - CELL_WIDTH / 2) && endPosX < (MIDDLE_POSITION + CELL_WIDTH / 2))
// {
// e->setScale(BIG_SCALE);
// sprIdx = e->getTag();//获得正中间的商品的Tag
// }
// else
// {
// //不是在上面的范围,则设置为正常大小
// e->setScale(1.0f);
// }

//}
}
void ScrollViewTest2::scrollViewDidZoom(CCScrollView* view)
{
CCLOG("CCScrollViewDidZoom");
}
void ScrollViewTest2::scrollViewMoveOver(CCScrollView* view)
{
CCLOG("CCScrollViewMoveOver");
}
bool isTouchMovedMove;
bool ScrollViewTest2::ccTouchBegan(CCTouch *touch, CCEvent *pEvent){
isTouchMovedMove = false;
CCLOG("onTouchBegan");
return true;
}


void ScrollViewTest2::ccTouchMoved(CCTouch *touch, CCEvent *pEvent){
isTouchMovedMove = true;
CCLOG("onTouchMoved");
float offSetX = scrollView->getContentOffset().x;
//如果偏移量大于最初位置或者小于最末位置,都不再移动
if (offSetX >= FIRST_OFFSET){
scrollView->setContentOffset(CCPoint(FIRST_OFFSET, 0), false);
}
else if (offSetX <= LAST_OFFSET){
scrollView->setContentOffset(CCPoint(LAST_OFFSET, 0), false);
}


}
void ScrollViewTest2::ccTouchEnded(CCTouch *touch, CCEvent *pEvent){
CCLOG("onTouchEnded");
// 关闭CCCCScrollView中的自调整,如果没有设置则进行回弹
scrollView->unscheduleAllSelectors();
CCLOG("offset pos is %f", scrollView->getContentOffset().x);

//如果没有滑动,则根据点击的位置进行判断,将相应的商品移动到正中间
if (!isTouchMovedMove){
//没有滑动的情况如下

int locatX = touch->getLocation().x;//获取点击的位置
int firstOffset = scrollView->getContentOffset().x;//当前的偏移量
int Offset = firstOffset - (locatX - MIDDLE_POSITION);//计算出将点击位置移动到中间的最后偏移量 ,(locatX - MIDDLE_POSITION) 是中间距离
//以下计算 在宽度范围内的偏移量,均调整为正中央的偏移量: eg:【260+-30】内的值都设为260
int i = ((FIRST_OFFSET + CELL_WIDTH/2) - Offset) / CELL_WIDTH;
int lastOffset = FIRST_OFFSET - i * CELL_WIDTH;
//如果超出偏移范围
if (lastOffset >= FIRST_OFFSET){
scrollView->setContentOffset(CCPoint(FIRST_OFFSET, 0), true);
}
else if (lastOffset <= LAST_OFFSET){
scrollView->setContentOffset(CCPoint(LAST_OFFSET, 0), true);
}
else{
//根据调整后的偏移量进行偏移
scrollView->setContentOffset(CCPoint(lastOffset, 0), true);
}
}
else{
//滑动的情况

//以下计算 在宽度范围内的偏移量,均调整为正中央的偏移量
/*int i = ((FIRST_OFFSET + CELL_WIDTH / 2) - scrollView->getContentOffset().x) / CELL_WIDTH;
unsigned int t = FIRST_OFFSET - i * CELL_WIDTH;

scrollView->setContentOffset(CCPoint(t, 0), true);*/
}
}

//返回主页按钮回调
void ScrollViewTest2::homeClick(CCObject* sender){

CCDirector::sharedDirector()->replaceScene(StartGame::scene());

}

//购买按钮回调
void ScrollViewTest2::buyClick(CCObject*sender){
switch (sprIdx)
{
case 1:

if (DataManager::getGoldNum()<300)
{
CCLayer*layer = Goldlayer::create();
this->addChild(layer, 4);
}
else if (true)
{
DataManager::getInstance()->setGoldNum(DataManager::getInstance()->getGoldNum() - 300);
DataManager::getInstance()->setMagnetNum(DataManager::getInstance()->getMagnetNum()+1);
}

break;

case 2:

if (DataManager::getGoldNum()<600)
{
CCLayer*layer = Goldlayer::create();
this->addChild(layer,4);
}
else
{
DataManager::getInstance()->setShieldNum(DataManager::getInstance()->getShieldNum() + 1);
DataManager::getInstance()->setGoldNum(DataManager::getInstance()->getGoldNum() -600);

}
break;

case 3:

if (DataManager::getGoldNum()<500)
{
CCLayer*layer = Goldlayer::create();
this->addChild(layer,4);
}
else
{
DataManager::getInstance()->setRocketNum(DataManager::getInstance()->getRocketNum() + 1);
DataManager::getInstance()->setGoldNum(DataManager::getInstance()->getGoldNum() - 500);
}
break;

case 4:
if (DataManager::getGoldNum()<800)
{
CCLayer*layer = Goldlayer::create();
this->addChild(layer,4);
}
else
{
DataManager::getInstance()->setBloodNum(DataManager::getInstance()->getBloodNum() + 1);
DataManager::getInstance()->setGoldNum(DataManager::getInstance()->getGoldNum() - 800);
}
break;

case 5:
DataManager::setHeroNum(0);
//HeroTypeNum = 1;
break;

case 6:

{
std::function<void()> successCallback = [=]{

DataManager::setIsBuyGoldHero(true);
DataManager::setHeroNum(1);
getChildByTag(216)->setVisible(false);
getChildByTag(710)->setVisible(true);
getChildByTag(8080)->setVisible(false);

};
std::function<void()> failCallback = [=]{


};
JNIUtil::pay(EnumPayType::GOODS_NEWHERO, successCallback, failCallback);
}
break;

case 7:
{
std::function<void()> successCallback = [=]{
DataManager::setIsBuyFortunrHero(true);
DataManager::setHeroNum(2);

getChildByTag(216)->setVisible(false);
getChildByTag(710)->setVisible(true);
getChildByTag(8080)->setVisible(false);

};
std::function<void()> failCallback = [=]{

};
JNIUtil::pay(EnumPayType::GOODS_NEWHERO, successCallback, failCallback);
}
break;

case 8:

{
std::function<void()> successCallback = [=]{
DataManager::setIsBuyPandaHero(true);
DataManager::setHeroNum(3);
//HeroTypeNum = 4;
getChildByTag(216)->setVisible(false);
getChildByTag(710)->setVisible(true);
getChildByTag(8080)->setVisible(false);


};
std::function<void()> failCallback = [=]{

};
JNIUtil::pay(EnumPayType::GOODS_NEWHERO, successCallback, failCallback);
}
break;

case 9:
{
std::function<void()> successCallback = [=]{
DataManager::getInstance()->setGoldNum(DataManager::getInstance()->getGoldNum() + 2000);

};
std::function<void()> failCallback = [=]{

};
JNIUtil::pay(EnumPayType::GOODS_GOLD2, successCallback, failCallback);
}
break;

case 10:

{
std::function<void()> successCallback = [=]{
DataManager::getInstance()->setGoldNum(DataManager::getInstance()->getGoldNum() + 1000);
};
std::function<void()> failCallback = [=]{

};
JNIUtil::pay(EnumPayType::GOODS_GOLD1, successCallback, failCallback);
}
break;


case 11:

DataManager::setSceneNum(0);
break;


case 12:
{
std::function<void()> successCallback = [=]{

DataManager::getInstance()->setIsBuyPaoxiaoshan(true);

DataManager::setSceneNum(1);
getChildByTag(216)->setVisible(false);
getChildByTag(710)->setVisible(true);
getChildByTag(8080)->setVisible(false);
};
std::function<void()> failCallback = [=]{

};
JNIUtil::pay(EnumPayType::GOODS_NEWSCENE, successCallback, failCallback);
}
break;

case 13:

{
std::function<void()> successCallback = [=]{


DataManager::getInstance()->setIsBuyYingxiaoya(true);
getChildByTag(216)->setVisible(false);
getChildByTag(710)->setVisible(true);
getChildByTag(8080)->setVisible(false);

DataManager::setSceneNum(2);

};
std::function<void()> failCallback = [=]{

};
JNIUtil::pay(EnumPayType::GOODS_NEWSCENE, successCallback, failCallback);
}
break;


default:
break;
}
}



//选择按钮回调
void ScrollViewTest2::chooseClick(CCObject*sender){
switch (sprIdx)
{
case 1:
break;
case 5:
{
//HeroTypeNum = 1;
//CCDirector::sharedDirector()->replaceScene(StartGame::scene());

DataManager::setHeroNum(0);

for (int i = 1; i < 14; i++) {

CCNode* n = getChildByTag(100)->getChildByTag(101)->getChildByTag(i)->getChildByTag(i);
if (i == sprIdx) {

n->setVisible(true);
//DataManager::setIsHeroVisiable(true);
}
else {
n->setVisible(false);

}
}
//xuanding->setVisible(true);
//getChildByTag(963)->setVisible(true);




break;
}
case 6:

//HeroTypeNum = 2;

//CCDirector::sharedDirector()->replaceScene(StartGame::scene());
for (int i = 1; i < 14; i++) {

CCNode* n = getChildByTag(100)->getChildByTag(101)->getChildByTag(i)->getChildByTag(i);
if (i == sprIdx) {

n->setVisible(true);

}
else {
n->setVisible(false);

}
}
DataManager::setHeroNum(1);

break;

case 7:

/*HeroTypeNum = 3;
CCDirector::sharedDirector()->replaceScene(StartGame::scene());*/
DataManager::setHeroNum(2);
for (int i = 1; i < 14; i++) {

CCNode* n = getChildByTag(100)->getChildByTag(101)->getChildByTag(i)->getChildByTag(i);
if (i == sprIdx) {

n->setVisible(true);

}
else {
n->setVisible(false);

}
}
break;

case 8:

/*HeroTypeNum = 4;
CCDirector::sharedDirector()->replaceScene(StartGame::scene());*/
DataManager::setHeroNum(3);
for (int i = 1; i < 14; i++) {

CCNode* n = getChildByTag(100)->getChildByTag(101)->getChildByTag(i)->getChildByTag(i);
if (i == sprIdx) {

n->setVisible(true);

}
else {
n->setVisible(false);

}
}
break;


case 11:

DataManager::setSceneNum(0);
//CCDirector::sharedDirector()->replaceScene(StartGame::scene());
for (int i = 1; i < 14; i++) {

CCNode* n1 = getChildByTag(100)->getChildByTag(101)->getChildByTag(i)->getChildByTag(i + 100);
if (i == sprIdx) {

n1->setVisible(true);
}
else {
n1->setVisible(false);
}
}

//CCDirector::sharedDirector()->replaceScene(StartGame::scene());
break;


case 12:


DataManager::setSceneNum(1);

for (int i = 1; i < 14; i++) {

CCNode* n1 = getChildByTag(100)->getChildByTag(101)->getChildByTag(i)->getChildByTag(i + 100);
if (i == sprIdx) {

n1->setVisible(true);
}
else {
n1->setVisible(false);
}
}


break;


case 13:

DataManager::setSceneNum(2);
//getChildByTag(963)->setVisible(true);
//CCDirector::sharedDirector()->replaceScene(StartGame::scene());

for (int i = 1; i < 14; i++) {

CCNode* n1 = getChildByTag(100)->getChildByTag(101)->getChildByTag(i)->getChildByTag(i + 100);
if (i == sprIdx) {

n1->setVisible(true);
}
else {
n1->setVisible(false);
}
}



break;

default:
break;
}
/*DataManager::getHeroNum();
xuanding->setVisible(true);*/
}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 深圳市考试院 深圳市面积 2019年深圳市小学学位补贴查询 深圳市民办中小学学位补贴 深圳市龙华新区 深圳市建筑公司 深圳市福田医院 深圳市考试院网站 深圳市世界之窗 深圳市人口 广东省深圳市罗湖区 深圳市宝安区西乡 深圳市南山小学 深圳市园林公司 深圳市区号 深圳市电子公司 深圳市西丽人民医院 深圳市宝安区宝安教育在线 深圳市龙岗区医院 深圳市龙岗区派出所 深圳市宝安中学 深圳市公交公司 深圳市人民法院 深圳市人民检察院 深圳市第一现场 深圳市公明中学 深圳市宝安区福永人民医院 深圳市宝安区沙井人民医院 深圳市龙岗人民医院 深圳中原 深圳日租房 深圳出租 深圳 房产 深圳 房子 深圳800信息网 深圳二手房出售信息 深圳单间租房价格 深圳中原地产 深圳二手房房价 深圳二手房成交量 链家二手房深圳