5.7ScrollView

万俟玉书
2023-12-01
scrollView 拖动对象时,对象移动到某个固定范围会有放大、缩小的效果
Vector<Sprite*> sp_vec; //声明一个容器 
sp_vec.pushBack(boy); //将精灵 boy 对象放入容器中 
bounce /baʊns/   弹力, 弹起,反跳;弹跳;弹回
Zoom  /zuːm/   vi. (飞机、汽车等)急速移动, (价格、费用等)急升, 猛涨
         补充一些内容:我们应该知道,对象放到滚动层上(如scroll_layer->addChild(boy)),那么不管对象在scrollView上如何移动,它获得的坐标都是不会变的(如boy->getPosition()是不变的数值),这种情况下,如果我们想实现对象在某个坐标范围内会有缩放效果,那么只是去获取对象的坐标肯定是行不通的,所以肯定要找一个时刻在变化的”参照物”来利用下,该找什么呢?没错,就是scrollView的偏移坐标(scrollView->getContentOffset())!只要scrollView移动一下,那么它的 偏移量也随之改变。我这里就是利用对象的坐标与scrollView的偏移坐标之间不可告人的秘密,从而实现当前的目的。必看 http://cn.cocos2d-x.org/tutorial/show?id=1022
class CC_EX_DLL ScrollViewDelegate

    virtual void scrollViewDidScroll( ScrollView * view) {};
   
/**
     * @js NA
     * @lua NA
     */
    virtual void scrollViewDidZoom(ScrollView* view) {};


    enum class Direction
    {
        NONE = -
1 ,
        HORIZONTAL =
0 ,
        VERTICAL,
        BOTH
    };





setContentSize 设置内容大小(可滚动大小)setViewSize 大

#include "cocos-ext.h" //******
USING_NS_CC_EXT ; //******
    // 视图滚动时响应
   
virtual void scrollViewDidScroll( ScrollView * view);
   
// 视图缩放时响应
   
virtual void scrollViewDidZoom( ScrollView * view);

private :
    Size size;


#include "cocos-ext.h" //******
USING_NS_CC_EXT ; //******
   size = Director :: getInstance ()-> getWinSize ();
   
// 创建一个滚动视图
   
auto scrollView = ScrollView :: create ();
   
// 创建一个容器
   
auto containLayer = Layer :: create ();
   
addChild (scrollView);
   
   
// 准备容器内容
   
auto sp1 = Sprite :: create ( "HelloWorld.png" );
    sp1->
setPosition ( size / 2 );
   
   
auto sp2 = Sprite :: create ( "HelloWorld.png" );
    sp2->
setPosition ( Vec2 ( size . width / 2 +sp2-> getContentSize (). width , size . height / 2 ));
   
   
 
   
auto label = Label :: createWithTTF ( "first page" , "fonts/Marker Felt.ttf" , 25 );
    label->
setPosition ( Vec2 ( size . width / 2 +sp2-> getContentSize (). width * 0.4 , size . height / 2 +sp2-> getContentSize (). height * 0.4 ));
    label->
setColor ( Color3B ( 255 , 0 , 0 ));
   
   
// 添加内容节点
    containLayer->
addChild (sp1);
    containLayer->
addChild (sp2);
    containLayer->
addChild (label);
   
   
// 设置内容大小(可滚动大小) ***********
    containLayer->
setContentSize ( Size ( 1330 , 750 ));
   
// 设置可见大小
    scrollView->
setViewSize ( Size ( 480 , 750 ));
   
// 设置容器
    scrollView->
setContainer (containLayer);
   
// 设置方向:水平
//    scrollView->setDirection(cocos2d::extension::ScrollView::Direction eDirection);
    scrollView->
setDirection ( ScrollView :: Direction :: HORIZONTAL );
   
// 设置委托
    scrollView->
setDelegate ( this );
//    // 关闭弹性效果 ( 系统默认开启 )
//    scrollView->setBounceable(false);


// 视图滚动时响应
void HelloWorld ::scrollViewDidScroll( ScrollView * view){

   
CCLOG ( "scroll" );
   
}
// 视图缩放时响应
void HelloWorld ::scrollViewDidZoom( ScrollView * view){
// 本文未实现这个功能 可参考 http://cn.cocos2d-x.org/tutorial/show?id=1022
    CCLOG ( "zoom" );
}

 类似资料:

相关阅读

相关文章

相关问答