zoukankan      html  css  js  c++  java
  • 关于Cocos2d-x中地图轮播的实现

    播放背景,两个背景的图片是一样的,紧挨着循环播放,以下代码写在playBackground()方法中,并在GameScene.cpp的init方法中调用。

    void GameScene::playBackground()
    {

    auto winSize = Director::getInstance()->getWinSize();  //获得OpenGL视图的大小,不是可见屏幕的大小,以点为单位

    int delta = 10; //补缝用的,两个背景紧挨着移动可能出现缝隙,轮播图的像素高应该比设备屏幕高的大一点(+0.01)(其实可以删去) 2.后面的图应该稍微往前靠一点 这样就不会有缝隙了

    auto bg1 = Sprite::createWithSpriteFrameName("background.png");
    bg1->setScaleX(winSize.width / bg1->getContentSize().width);  //让地图的宽和屏幕一样宽
    bg1->setScaleY(winSize.height / bg1->getContentSize().height + 0.01); //让地图的高比屏幕高一点(其实可以设置成一样高,这里+0.01可以删除)
    bg1->setAnchorPoint(Vec2(0, 0));
    addChild(bg1);

    auto move1 = MoveBy::create(30, Vec2(0, -winSize.height));
    auto callfunc1 = CallFunc::create([bg1](){  //设置回调函数,在移动完地图后,执行这个方法,回到最初的位置
      bg1->setPosition(Vec2(0, 0));
    });
    auto action1 = Sequence::create(move1, callfunc1, nullptr);
    bg1->runAction(RepeatForever::create(action1));

    auto bg2 = Sprite::createWithSpriteFrameName("background.png");
    bg2->setScaleX(winSize.width / bg2->getContentSize().width);  //让地图的宽和屏幕一样宽
    bg2->setScaleY(winSize.height / bg2->getContentSize().height + 0.01); //让地图的高比屏幕高一点(其实可以设置成一样高,这里+0.01可以删除)
    bg2->setAnchorPoint(Vec2(0, 0));
    bg2->setPosition(Vec2(0, bg1->getPositionY() + winSize.height - delta));
    addChild(bg2);

    auto move2 = MoveTo::create(30, Vec2(0, 0));
    auto callfunc2 = CallFunc::create([bg2, bg1, winSize, delta](){  //设置回调函数,在移动完地图后,执行这个方法,回到最初的位置
      bg2->setPosition(Vec2(0, bg1->getPositionY() + winSize.height - delta));
    });
    auto action2 = Sequence::create(move2, callfunc2, nullptr);
    bg2->runAction(RepeatForever::create(action2));

    }

  • 相关阅读:
    C++内存管理
    C++STL
    C++OOP
    C++11,17新特性
    淘宝京东拼多多微信返利公众号怎么做绑定
    (教程)淘宝客怎么做淘礼金0元购物软件
    基于devops工具盘古安装wordpress
    可持续集成(devops)工具盘古入门指南
    Nacos在电商系统中的应用
    电商系统自动测试脚本
  • 原文地址:https://www.cnblogs.com/HangZhe/p/5762468.html
Copyright © 2011-2022 走看看