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

实例代码:

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);*/
}

scrollView滚动视图实现商城模块相关推荐

  1. 【Unity3D-UGUI系列】(十二)ScrollView 滚动视图组件详解

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  2. ScrollView 滚动视图控件

    为什么要用ScrollView 滚动视图控件 应为手机屏幕过小显示的内容过多没法显示完全所以要使用滚动视图控件 使用时的注意点 不用再ScrollView内部使用自带滚动条的控件或布局 ScrollV ...

  3. Android中通过Java代码实现ScrollView滚动视图-以歌词滚动为例

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...

  4. cocos2.x 小游戏Scrollview滚动视图 控制滚动的方法

    控制台log输出为何频频失踪? wxss代码为何频频失效? wxml布局为何乱作一团? 究竟是道德的沦丧?还是人性的缺失? 让我们一起来 走 跑进科学 前言 今天写排行榜切换排行榜时需要刷新排行榜的排 ...

  5. ReactNative进阶(二十五):ScrollView 滚动视图组件详解

    文章目录 一.概述 二.属性 2.1 Style 2.2 方法 2.2.1 scrollTo() 2.2.2 crollToEnd() 三.拓展阅读 一.概述 ScrollView在Android和i ...

  6. Xamarin iOS教程之进度条和滚动视图

    Xamarin iOS教程之进度条和滚动视图 Xamarin iOS 进度条 进度条可以看到每一项任务现在的状态.例如在下载的应用程序中有进度条,用户可以很方便的看到当前程序下载了多少,还剩下多少.Q ...

  7. Xamarin.Forms的滚动视图ScrollView

    Xamarin.Forms的滚动视图ScrollView 在Xamarin.Forms中,滚动视图ScrollView用来实现长内容的滚动显示.虽然ScrollView的Content属性只能设置一个 ...

  8. unity菜单滑动插件_unity游戏清新风格列表滚动视图滑动界面插件Super ScrollView for UGUI 2.4.1...

    Super ScrollView for UGUI  是一个清新风格的列表滚动视图滑动界面游戏插件. UGUI Super ScrollView gives easily-customizable S ...

  9. android设置滚动条样式,Android零基础入门|滚动视图ScrollView-设置滚动条样式

    前面几期学习了ProgressBar系列组件.ViewAnimator系列组件.Picker系列组件和时间日期系列组件,接下来几期继续来学习常见的其他组件. 一.ScrollView概述 从前面的学习 ...

最新文章

  1. 算法竞赛入门与进阶 (二)单调队列、单调栈
  2. numpypandas补充常用示例
  3. 分布式文件系统研究-测试-搭建测试环境
  4. 基本套接字TCP和UDP
  5. 服务高可用:幂等性设计
  6. av linux,AV Linux 新版发布,多少人知道
  7. redis使用@Cacheable等注解为接口添加缓存
  8. iphone双卡_满屏的iPhone12评测来了,看哪个不重要,买哪个才重要|iphone|国行|iphone12...
  9. 计算机科学导论_[计算机科学导论]第一章:计算机学什么
  10. 如何不做老板手中一次性筷子?
  11. 从零开始学习Android开发-Android概览
  12. FMS的安装、基本配置及基本测试
  13. Windows无法连接到无线网络
  14. Linux搭建tor网络环境
  15. 【物联网平台篇9】使用MQTT上传图片到OneNET
  16. OFD格式文件怎么转PDF格式?分享一个轻松转换小妙招
  17. SpringBoot - Tomcat 容器 Spring 绿色叶子灰色解决方案
  18. 推荐常用算法之-基于内容的推荐
  19. 【Cesium】加载互联网地图服务——天地图
  20. 2022安全员-B证考试题模拟考试题库及模拟考试

热门文章

  1. Java人员该如何站稳脚跟 需要具备哪些技能
  2. iOS开发地图的代码和方法
  3. choice python接口,数据可视化环境(Python接口)配置
  4. python创建一个上三角矩阵(没有初等行变化)
  5. 纳入3C强制性认证的产品目录
  6. android 益智烧脑游戏,史上最烧脑游戏
  7. Oracle RAC 环境数据备份与恢复实践
  8. XMOS 开发探索2-麦克风拾音
  9. 分布式系统的一致性问题(汇总)
  10. 爬虫技术-滑块验证码