cocos2dx中的ScrollView

ScrollView由视窗区域(裁剪区域)和内容区域组成,内容区域叫innerContainer。

视窗区域范围:get/setContentSize

内容区域:get/setInnerContainerSize,

ScrollView怎样排版?对ScrollView而言,innerContainer就是一个大矩形,这个矩形的范围就是滚动的范围,如果内容宽大于视窗 innerContainer则可以在x向移动。同理决定是否可在y向移动。

移动范围是多少?移动范围是0对应innerContainer的上(左)边缘位于视窗区域的上(左)边缘,1对应innerContainer的下(右)边缘位于视窗区域的下(右)边缘。

ScrollView中的物体怎样定位?0,0点是innerContainer的anchor点,不经过设置的话是在其中心。

因此,正确的ScrollView中的内容填充是这样的:

1 计算好内容的大小(宽高)

2 对内容进行排布,anchor为(0.5, 0.5)时,在(-0.5大小,0.5大小)的范围内排布。

3 排布完成,调用scrollView->setInnerContainerSize将内容大小设置进去。

ScrollView中的按钮不触发点击事件的方法:

1 设置isSwallowTouch(false),否则在按钮上拖动不会拖动ScrollView。

2 设置点击事件不要用addClickHandler,而是addTouchEventListener,用lambda表达式这么写:

bool moved = false;
btn->addTouchEventListener([this, moved](Ref*, Widget::TouchEventType type) mutable {
            switch(type)
            {
                case Widget::TouchEventType::BEGAN:
                    moved = false;
                    break;
                case Widget::TouchEventType::MOVED:
                    moved = true;
                    break;
                case Widget::TouchEventType::ENDED:
                    if(!moved)
                        this->onClick();
                    break;
                default:
                    break;
            }
});
时间: 2024-11-06 03:16:47

cocos2dx中的ScrollView的相关文章

Cocos2d-X中的动作展示《二》

由于Cocos2d-X中的动作较多,我将所有的动作制作成了一个滚动视图,每个滚动视图上都有动作名,单击滚动视图就可以展示相应的动作 程序效果图: 使用滚动视图实现动作切换 动作展示 首先创建一个ActionMore类 ActionMore.h中的代码 #ifndef _ActionMore_H_ #define _ActionMore_H_ #include "cocos2d.h" #include "cocos-ext.h" USING_NS_CC; USING_

cocos2dx中的核心类

一.节点类(Node) 任何要显示在屏幕上的的对象都是结点类,最常见的有场景(Scene),层(Layer),菜单(Menu)精灵(Sprite),菜单类是层的一个子类,层的初始化默认锚点是(0,0),精灵的默认锚点是(0.5,0.5).一个层或一个精灵在它父类上的位置setposition()函数,其实指的是锚点的位置.并且node的旋转,缩放,平移各种action都是基于锚点来进行的. 二.导演类(Director) Director类是cocos2D-x游戏引擎的核心,它用来创建并控制主屏

Cocos2d-X中的动作特效

Cocos2d-X中提供了非常丰富的动作特效 例如:网格动画 扭曲特效 3D瓷砖波动特效 程序代码: #include "ActionEffect.h" #include "HelloWorldScene.h" static const char* _actionName[] = { "CCFadeOutBLTiles", "CCFadeOutDownTiles", "CCFadeOutTRTiles",

cocos2dx中的设计分辨率与屏幕适配策略

1.首先明确几个概念: 设计分辨率:designResolution,即资源图片的设计尺寸,即美工给你的资源图片的大小,比如(641*964) 屏幕分辨率:又叫帧的大小,glview->setFrameSize(480,640); 这是指你的设备的屏幕的大小,通常手机的屏幕分辨率也就那么几种固定的大小,如480*320,1024*768,等等,在win32模拟器,或其他模拟器中,也指模拟器屏幕的大小. 2.疑问,既然图片是为手机屏幕服务的,干嘛搞这么多概念,直接一切以屏幕为中心不就得了,所有资源

在Cocos2d-x中使用SQLlite数据库

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl.C#.PHP.Java等,还有ODBC接口' 在Cocos2d-X中使用SQLlite数据库 首先下载SQLlite数据库,SQLlite数据库的下载地址:http://download.

Cocos2d-X中的菜单

在Cocos2d-X实现显示菜单的方式比较特殊,首先需要使用CCMenu创建一个菜单,然后使用CCMenuItem创建一个菜单项,实际上程序中显示的菜单是使用CCMenu和CCMenuItemFont共同作用的结果,在Cocos2d-X中CCMenu只是一个容器,需要使用CCMenuItemFont才能实现创建菜单 程序示例:创建一个简单的菜单 程序代码: #include "Menu.h" CCScene* Menu::scene() { CCScene* scene = CCSce

Cocos2d-x中Socket的简单使用

今天总结一下Socket的使用方法吧,有在百度..上面找到的(下面有百度的链接,写的不全的地方,大家可以看一下链接,)...如果哪位大神有更换的demo,求分享!!! Cocos2d-x中有关网络请求的:get post put delete(后两者我在开发中很少用),还有就是 Socket(用于及时通讯,网络游戏中的队友通话). 在vs下面新建一个一个工程(记住不是Cocos项目!!!)C++文件.作为Server 百度上面的相关解释:http://baike.baidu.com/view/2

cocos2d-x中的简单的数据存储

Cocos2d-x中的数据存储方式很多,下面我来简单的介绍几种,有说的不准确的地方,大家指出来吧,共同学习进步.谢谢! 首先介绍的是  UserDefault 这个类: //用userdefault进行数据存储 UserDefault::getInstance()->setStringForKey("testKey","testValue");//将String类型的数据存储起来 //读取上面写入的数据 std::string val = UserDefaul

关于COCOS2D-X 中的CCRectMake参数小注

在使用CocoStudio和Cocos2d-x混合编程过程中,坐标转换是不可避免的.因此,要随时注意,当然坐标.Rect是全局性的还是局部性的.时间长了,许多基础内容易于忘记,这不---小小的宏函数CCRectMake的参数各自函数就忘记了!故备注于此. 在编码时,当忘记相应参数含义时,我常常按下快捷键F12,转换相应的头文件去分析一下.可怜的是,宏函数CCRectMake各个参数就没有很好的注解. 格式:CCRectMake(x,y,width,height) 对于Widget控件,一般情况下