[CloudBox] 环状卷动背景控件
来源:互联网 发布:不亦…乎 编辑:程序博客网 时间:2024/05/17 02:12
缘起
为了我的下一个横向卷轴游戏,所以想设计一个卷轴游戏的卷动背景专用的类。
思路
思路其实是很简单,一般来说卷轴游戏的背景,是一张大张的图,前后可以环状的接合
所以我需要载入一张图片,将其设定为两个图,用前后贴的方式让它看起来有卷动的效果
提供了卷动座标(X或Y),卷动的间隔时间,卷动距离等属性
图形的卷动则是利用两张图的位置互换来模拟
代码
/* * CBRingScrollImage.h * CloudBox Cross-Platform Framework Project * * Created by Cloud on 2012/4/18. * Copyright 2012 Orz. All rights reserved. * */#ifndef _CBRINGSCROLLIMAGE_#define _CBRINGSCROLLIMAGE_#include "CBView.h"class CBImage;enum ScrollCoordinate{ScrollX = 0,ScrollY = 1};class CBRingScrollImage : public CBView{private:CBImage* m_image1;CBImage* m_image2;ScrollCoordinate m_scrollCoordinate;float m_distance;float m_duration;float m_swapLocation;void initial();void scrollImage(CBView* target);void resetImage2();protected:void draw();public:CBRingScrollImage();CBRingScrollImage(const string& imageName, ScrollCoordinate scrollCoordinate, float distance, float duration);~CBRingScrollImage();void startScroll();void setImage(const string& imageName);inline const ScrollCoordinate getScrollCoordinate() { return m_scrollCoordinate; }inline void setScrollCoordinate(ScrollCoordinate scrollCoordinate) { m_scrollCoordinate = scrollCoordinate; }inline const float getDistance() { return m_distance; }inline void setDistance(float distance) { m_distance = distance; }inline const float getDuration() { return m_duration; }inline void setDuration(float duration) { m_duration = duration; }};#endif
/* * CBRingScrollImage.cpp * CloudBox Cross-Platform Framework Project * * Created by Cloud on 2012/4/18. * Copyright 2012 Orz. All rights reserved. * */#include "CBRingScrollImage.h"#include "CBImage.h"#include "CBAction.h"#include "CBEnvironment.h"CBRingScrollImage::CBRingScrollImage():CBView(), m_image1(NULL), m_image2(NULL){initial();}CBRingScrollImage::CBRingScrollImage(const string& imageName, ScrollCoordinate scrollCoordinate, float distance, float duration):CBView(), m_image1(NULL), m_image2(NULL), m_scrollCoordinate(scrollCoordinate),m_distance(distance), m_duration(duration){initial();setImage(imageName);}CBRingScrollImage::~CBRingScrollImage(){DELETE(m_image1);DELETE(m_image2);}void CBRingScrollImage::initial(){this->setWidth(CBEnvironment::getScreenWidth());this->setHeight(CBEnvironment::getScreenHeight());}void CBRingScrollImage::setImage(const string& imageName){m_image1 = new CBImage(imageName);m_image2 = new CBImage(imageName);m_image1->moveTo(0, 0);m_swapLocation = 0;resetImage2();}void CBRingScrollImage::resetImage2(){if(m_scrollCoordinate == ScrollX){if(m_distance < 0)m_image2->moveTo(m_image1->getWidth(), 0);else if(m_distance > 0)m_image2->moveTo(m_image1->getX() - m_image1->getWidth(), 0);}else if(m_scrollCoordinate == ScrollY){if(m_distance < 0)m_image2->moveTo(0, m_image1->getHeight());else if(m_distance > 0)m_image2->moveTo(0, m_image1->getY() - m_image1->getHeight());}}void CBRingScrollImage::scrollImage(CBView* target){bool isSwap = false;if(m_scrollCoordinate == ScrollX){m_image1->move(m_distance, 0);m_image2->move(m_distance, 0);if((m_image2->getX() <= 0 && m_distance < 0) || (m_image2->getX() + m_image2->getWidth() >= this->getWidth() && m_distance > 0))isSwap = true;}else if(m_scrollCoordinate == ScrollY){m_image1->move(0, m_distance);m_image2->move(0, m_distance);if((m_image2->getY() <= 0 && m_distance < 0) || (m_image2->getY() + m_image2->getHeight() >= this->getHeight() && m_distance > 0))isSwap = true;}if(isSwap){CBImage* temp = m_image1;m_image1 = m_image2;m_image2 = temp;temp = NULL;resetImage2();}}void CBRingScrollImage::startScroll(){CBAction* action = new CBAction(m_duration,REPEAT_ALWAYS);action->addTriggerEvent(this,&CBRingScrollImage::scrollImage);action->commit(this);}void CBRingScrollImage::draw(){if(!this->getVisible())return;m_image1->visit();m_image2->visit();}
- [CloudBox] 环状卷动背景控件
- CloudBox说明
- CloudBox CBDialog
- 在黑色背景上敲出一行命令之后屏幕哗哗卷动的景象
- DirectX游戏编程入门——第二部分(游戏编程工具箱) ——卷动背景
- 控件背景
- 卷动列
- CloudBox uml设计图
- CloudBox开发的心路历程
- CloudBox范例代码:CloudLED
- 环状序列
- 环状序列
- 环状序列
- 环状序列
- 环状序列
- 环状序列
- 环状序列
- 控件透明背景
- 杭电1020题
- ORACLE SQL Performance Tuning
- 一种线程安全的单例模式实现
- iphone实现图片部分拉伸(与android9图类似)
- org.apache.solr.common.SolrException: ERROR: multiple values encountered for non multiValued copy
- [CloudBox] 环状卷动背景控件
- 软核,硬核、固核的区别!
- 收集oracle统计信息
- ios app: view: 怎样创建自己的view
- foj1081等分液体
- Java 解析 XML
- c++多线程编程安全性简单说明
- telnet backdoor
- Ubuntu 系统下终端快捷键设置