Cocos2d-X使用CCScrollView创建滚动视图

Cocos2d-X使用CCScrollView创建滚动视图,第1张

概述CCScrollView可以使游戏有滚动视图的效果,并且可以通过滚动视图切换游戏场景,滚动视图常用于游戏中选择关卡 实例1:使用CCScrollView创建一个简单的滚动视图 首先创建一个ScrollView类 然后在ScrollView.h中添加下面的代码 #ifndef __ScrollView_H__#define __ScrollView_H__#include "cocos2d.h

CCScrollVIEw可以使游戏有滚动视图的效果,并且可以通过滚动视图切换游戏场景,滚动视图常用于游戏中选择关卡

实例1:使用CCScrollVIEw创建一个简单的滚动视图

首先创建一个ScrollVIEw类

然后在ScrollVIEw.h中添加下面的代码

#ifndef __ScrollVIEw_H__#define __ScrollVIEw_H__#include "cocos2d.h"#include "cocos-ext.h"USING_NS_CC;USING_NS_CC_EXT;class ScrollVIEw : public cclayer{public:    virtual bool init();      static CCScene* scene();        CREATE_FUNC(ScrollVIEw);    //响应触摸事件    bool cctouchBegan(CCtouch* touch,CCEvent*);    voID cctouchended(CCtouch* touch,CCEvent*);    CCNode* _contaner;};#endif // __ScrollVIEw_H__


在ScrollVIEw.cpp中添加下面的代码

#include "ScrollVIEw.h"CCScene* ScrollVIEw::scene(){    CCScene *scene = CCScene::create();        ScrollVIEw *layer = ScrollVIEw::create();    scene->addChild(layer);    return scene;}bool ScrollVIEw::init(){    cclayer::init();    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    CCPoint center = ccp(winSize.wIDth / 2,winSize.height / 2);        //创建一个结点    CCNode* c = CCNode::create();    //创建5个紧挨着的精灵    for(int i = 0; i < 5; i++)    {        CCSprite* sprite = CCSprite::create("HelloWorld.png");		c->addChild(sprite);		        //设置图片的位置,每两张图片相差一张图片的宽度        sprite->setposition(ccpAdd(center,ccp(i*winSize.wIDth,0)));    }    //滚动视图    //第一个参数:显示的视图大小    //第二个参数:视图的实际大小    CCScrollVIEw* vIEw = CCScrollVIEw::create(winSize,c);    addChild(vIEw);    //设置视图运动的方向为水平运动    vIEw->setDirection( kCCScrollVIEwDirectionHorizontal);    //设置视图的宽度和高度    vIEw->setContentSize(CCSize(winSize.wIDth * 5,winSize.height * 5));    return true;}

执行结果



实例2:CCScrollVIEw的高级应用

不会出现两张图片的相交位置在窗口中(当切换完成图片后总会在窗口上显示一张完整的图片)

在ScrollVIEw.cpp中添加下面的代码

#include "ScrollVIEw.h"CCScene* ScrollVIEw::scene(){    CCScene *scene = CCScene::create();        ScrollVIEw *layer = ScrollVIEw::create();    scene->addChild(layer);    return scene;}bool ScrollVIEw::init(){    cclayer::init();    CCSize winSize = CCDirector::sharedDirector()->getWinSize();    CCPoint center = ccp(winSize.wIDth / 2,winSize.height / 2);        //创建一个结点    CCNode* c = CCNode::create();    _contaner = c;    //创建5个紧挨着的精灵    for(int i = 0; i < 5; i++)    {        CCSprite* sprite = CCSprite::create("HelloWorld.png");		c->addChild(sprite);		        //设置图片的位置,每两张图片相差一个屏幕的宽度        sprite->setposition(ccpAdd(center,0)));        //给视图编号        char buf[10];        sprintf(buf,"%d",i);        cclabelTTF* label = cclabelTTF::create(buf,"Arial",36);           sprite->addChild(label);        label->setposition(center);    }    //滚动视图    //第一个参数:在窗口显示的视图大小    //第二个参数:结点CCNode    CCScrollVIEw* vIEw = CCScrollVIEw::create(winSize,winSize.height * 5));     //取消ScrollVIEw的d性        vIEw->setBounceable(false);      //注册触摸事件    settouchEnabled(true);    settouchMode(kCCtouchesOneByOne);    return true;}//鼠标点下的时候bool ScrollVIEw::cctouchBegan(CCtouch* touch,CCEvent* ev){    return true;}//鼠标起来的时候voID ScrollVIEw::cctouchended(CCtouch* touch,CCEvent*){    //得到鼠标点下去的时候的位置    CCPoint ptDown = touch->getStartLocation();    //得到鼠标松开时的位置    CCPoint ptUp = touch->getLocation();    //当两个位置的距离的平方小于25时(认为是点击,否则是滑动)    if(ptUp.getdistanceSq(ptDown) <= 25)    {        //检查点击的是哪一个图片		//将世界坐标转换成结点坐标        CCPoint ptInContainer = _contaner->convertToNodeSpace(ptUp);        //定义一个数组保存5个精灵		CCArray* arr = _contaner->getChildren();		for(int i = 0; i < 5; ++i)		{            //获取精灵的索引(获取点击的是哪个精灵)			CCSprite* sprite = (CCSprite*)arr->objectAtIndex(i);			            //boundingBox()获取精灵的边框(判断触摸点是否在边框内,当在的时候,打印精灵的编号)            if(sprite->boundingBox().containsPoint(ptInContainer))			{				cclog("click i is %d",i);				break;			}		}    }    else    {        //滑动          int x = _contaner->getpositionX();                    if (x >= -1920 && x <= 0)          {              // adjust              // 0,-480,-960,-1440,-1920              int IDx = (-x +240)/ 480;              x = -IDx * 480;                CCMoveto* moveto = CCMoveto::create(0.5f,ccp(x,this->_contaner->getpositionY()));                            this->_contaner->runAction(moveto);          }      }  }

执行结果:


当在图片中点击后会打印点击的图片的编号


改进后不会出现的情形



 总结

以上是内存溢出为你收集整理的Cocos2d-X使用CCScrollView创建滚动视图全部内容,希望文章能够帮你解决Cocos2d-X使用CCScrollView创建滚动视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存