滚动地图的实现

来源:互联网 发布:office 2016 mac 卡 编辑:程序博客网 时间:2024/06/05 04:35

滚动图的实现其实就是两张首尾可以拼接的图在不断的往x轴或y轴方向移动的过程

其实现具体如下

void GameLayer::movingBackground(float delta) {float movingDist = this->_ship->getBackgroundMoveSpeed() * delta * (this->_borderLayer->getTimerPercentage() / 100);//计算每帧移动的像素float locBackgroundWidth = this->_backgroundWidth;//地图宽度Background* locBackground = this->_background;//当前正在滚动的图float currPosX = locBackground->getPositionX() - movingDist;//由于是横版,所以x轴每帧减去移动的像素大小Background* locBackgroundRe = this->_backgroundRe;//_backgroundRe初始化为NULL,即在第一次运行时locBackgroundRe为NULLif(locBackgroundWidth + currPosX <= ScreenWidth) {//如果在滚动的过程中,第一张图的最右边滚出界,则将第二张图连接上,重复此过程//将之前的第一张图赋给locBackgroundRe和_backgroundRelocBackgroundRe = this->_background;this->_backgroundRe = this->_background;//创建一张新的连接图,并赋给locBackgroundthis->_background = Background::getOrCreate(this->_curMission);locBackground = this->_background;//将连接图的x轴设置在第一张图的后面locBackground->setPositionX(currPosX + locBackgroundWidth - 2);}else {////如果在滚动的过程中,则第一张图继续往x轴滚动,直至出现越界locBackground->setPositionX(currPosX);}if(locBackgroundRe) {//如果有第二张图(连接图)currPosX = locBackgroundRe->getPositionX() - movingDist;//和第二张图一起已相同的速度滚动,这里的locBackgroundRe是之前的第一张图if(currPosX + locBackgroundWidth < 0){//如果第一张图完全的已移出屏幕的左边,则将其隐藏起来,供下次使用,并将_backgroundRe设置为NULLlocBackgroundRe->destroy();this->_backgroundRe = NULL;}else {//如果第一张图还没完全的已移出屏幕的左边,则往x轴方向继续滚动locBackgroundRe->setPositionX(currPosX);}}}


0 0
原创粉丝点击