实现CCLayer只显示一个矩形可见区域
2013-09-03 19:17
239 查看
CCLayer的区域可能会比较大,怎样让它只显示其中一部分区域呢? 这个还是有很多场景会用到的,例如游戏的帮助, 可能包括几页的文本和图片,它会在一个矩形区域内显示,用户通过拖动页面,一行行的往下看。
试过后发现setContentSize不行,绘制的还是所有的Layer内容,虽然基类的m_obContentSize变了,但是绘制区域没有变。
不饶弯子了,需要使用CCEGLView的函数setScissorInPoints,它会调用OpenGL的glScissor。
爽快点,直接贴代码了:
这个例子将显示RichTextLayer的左下角(0,0)到(400, 400)的矩形区域。
记住了convertToWorldSpace(CCPointZero)这个是必须的,我就是因为这个折腾了半天。因为glScissor的坐标是OpenGL的坐标,或者说是世界坐标,而不是该Node的本地坐标,所以必须转换成世界坐标后使用。
试过后发现setContentSize不行,绘制的还是所有的Layer内容,虽然基类的m_obContentSize变了,但是绘制区域没有变。
不饶弯子了,需要使用CCEGLView的函数setScissorInPoints,它会调用OpenGL的glScissor。
爽快点,直接贴代码了:
void RichTextLayer::visit() { glEnable(GL_SCISSOR_TEST); CCPoint point = convertToWorldSpace(CCPointZero); CCDirector::sharedDirector()->getOpenGLView()->setScissorInPoints(point.x, point.y, 400, 400); CCNode::visit(); glDisable(GL_SCISSOR_TEST); }
这个例子将显示RichTextLayer的左下角(0,0)到(400, 400)的矩形区域。
记住了convertToWorldSpace(CCPointZero)这个是必须的,我就是因为这个折腾了半天。因为glScissor的坐标是OpenGL的坐标,或者说是世界坐标,而不是该Node的本地坐标,所以必须转换成世界坐标后使用。
相关文章推荐
- 实现CCLayer只显示一个矩形可见区域
- 实现CCLayer只显示一个矩形可见区域
- cocos2d-x 基于CCClippingNode实现CCLayer遮罩功能,在滑动时超出剪切区域的实现显示部分的效果,不需要再借助其他sprite来遮挡了
- 绘制在某个矩形区域内字符串自动多行换行的一个方法(c)语言实现
- 利用PreLoader实现一个平视显示(HUD)效果(可以运用到加载等待效果),并进行简单的讲解
- JS实现当前编辑行自动滚动至div显示区域
- 实现每隔1秒计一个数,显示00到99
- 设计一个学生成绩管理系统,实现对学生成绩的动态管理,实现对学生成绩的输入,显示,删除,查找,插入,最佳,保存,计算,排序等主要功能
- SilvetLight 实现的一个上传图片时功能动态裁剪部分区域和缩放图片的功能
- android如果重写onDraw实现一个类似TextView可以显示表情和链接的控件(二)
- JS实现当前编辑行自动滚动至div显示区域
- 正确的方法去拦截OnNewWindow2实现在同一个窗口显示_target的网页
- Android 自定义dialog,实现右上角显示一个控件按钮
- OC继承(写一个图形类,实现三角形,矩形和三角形求面积和周长)
- 用js实现的一个Flash滚动轮换显示图片代码生成器
- Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
- 分享一个jquery插件:实现类似淘宝上鼠标经过图片右侧显示大图的效果
- 代码实现从我的主窗体里打开另外一个应用程序,并且让该程序像自己的MDI子窗体那样在父窗体的范围内显示
- 实现启动一个activity但不显示其界面
- css伪类实现矩形按钮的右边缘中间有一个往里凹陷的小半圆