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创建滚动视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)