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