Cocos2dx中CCScrollview的修改方案探讨(OBScrollView & OBScroller & TestDemo)

~~~~本文章为 OwenTsang(fromOld-Boys-Studio)原创,转载务必在明显处注明:

            原文连接:http://blog.csdn.net/owen_c/article/details/9074361

        学习了cocos2dx也有点时间了,用到页面滚动的时候,用起来有点不顺心,故自己下定决心,好好总结了一下,尽量地向UIKit中的UIScrollview效果靠拢。好了,闲话勿叙,我们直入正题吧。

我将此命名为OBScrollview,本文是居于cocos2d-2.1rc0-x-2.1.2-hotfix中的CCScrollview的基础改写的,测试请注意环境。

一  OBScrollview二新增功能介绍

1 动态调节触摸事件优先级,并通过委托通知外界点击事件

       enum {//* priority used by the OBScrollView for the event handler             

                      kOBScrollViewHandlerPriority = kCCMenuHandlerPriority-1,  };    

         OBScrollView的默认触摸事件优先级设置为 kOBScrollViewHandlerPriority,优先级比kCCMenuHandlerPriority还高,所以默认情况下,在此OBScrollview中CCMenuItem是不被响应的,但你也可以setTouchPriority来改变。       

           为什么在此设计比CCMenuItem还高的优先级呢?因为本文更倾向于使用下面的方法来处理点击事件。OBScrollViewDelegate在CCScrollViewDelegate的基础上,增加一个非纯虚函数, 

      virtual void scrollViewDidClick(CCNode* clickNode){CC_UNUSED_PARAM(clickNode);}
      clickNode是OBScrollView的孩子结点,当没有滚动事件产生时的纯点击事件会通知此委托,让调用者去处理一些简单的点击响应事件。

2  加入滚动条(OBScroller)功能 

      OBScroller有两种方向,水平方向(kOBScrollViewDirectionHorizontal)放在最底端和垂直方向(kOBScrollViewDirectionVertical)位置在最右端。
        21)可加入背景  void setScrollerBg(const char* bgFile);
        22)两种方式的加入实际的滚动小条,

               221)void setSpriteScroller(const char* scrollerFile); 此为普通的Sprite           

              222)void setSpriteScroller(const char* scrollerFile, CCRect rect,  CCRect capInsets); 这个设置了一个高级货,CCScale9Sprite,这个能兼容任何形态的滚动条 

二 测试示例 

void HelloWorld::testBothDirectionScrollview()
{
    CCSize viewSize;
    CCNode* container = createBothDirectionContainer(viewSize); ///构造container
    OBScrollView* scrollView = OBScrollView::create(viewSize,container);///构造OBScrollView
    scrollView->setDirection(kOBScrollViewDirectionBoth);///设置方向为水平纵线都可以滚动
    scrollView->setDelegate(this);///设置托管
    scrollView->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width / 4,
                                 CCDirector::sharedDirector()->getWinSize().height/ 6));
    this->addChild(scrollView);
    scrollView->setContentOffset(ccp(0,scrollView->minContainerOffset().y));///设置默认显示左下角的内容
    
    OBScroller* scroller = new OBScroller(kOBScrollViewDirectionVertical,CCSizeMake(verticalScrollerWidth, viewSize.height));///构造垂直的OBScroller
    scroller->setSpriteScroller("scroller9.png",CCRectMake(0,0,20,40),CCRectMake(6, 6, 6, 6));///设置滚动小条CCScale9Sprite形式 
    //    scroller->setSpriteScroller("Scroller.png");///设置滚动小条CCSprite形式 
    scrollView->setScroller(scroller); ///将scroller放入scrollView的右端 
    scroller->release();///
    
    scroller = new OBScroller(kOBScrollViewDirectionHorizontal,CCSizeMake(viewSize.width, horizontalScrollerHeight));///构造水平的OBScroller
    scroller->setSpriteScroller("horizontalScroller9.png",CCRectMake(0,0,40,20),CCRectMake(6, 6, 6, 6));///设置滚动小条CCScale9Sprite形式 
    //    scroller->setSpriteScroller("horizontalScroller.png");///设置滚动小条CCSprite形式 
    scrollView->setScroller(scroller);///将scroller放入scrollView的底端
    scroller->release();
}

void HelloWorld::scrollViewDidClick(CCNode* clickNode)
{
CCLOG("click node id = %d",clickNode->getTag());
}

三 源代码

      github地址:https://github.com/OwenTsang/TestOBScrollview


四 效果图

    初始效果图

    


    点击之后效果图:
     


    好了,我的第一篇blog总算写好了,欢迎拿砖轻拍,注意是轻拍~~

   ~~~~~~~~~~~~~转载请注明出处喔~~~~~~~~~~~~~~~

~~~~本文章为 OwenTsang(fromOld-Boys-Studio)原创,转载务必在明显处注明:

            原文连接:http://blog.csdn.net/owen_c/article/details/9074361



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值