WindowAni

窗口动画实现代码解析
本文详细解析了一段用于实现窗口动画效果的C++代码。该代码通过定义结构体`WindowAni`来控制窗口的位置变化,并支持定时启动、停止及移动等功能。文中还介绍了如何设置窗口图像以及如何通过计时器控制动画过程。

  1: 
  2: // 5o fps 1f = 0.02s
  3: #define DEFAULT_COUNT 4
  4: #define DEFAULT_STOP  10
  5: struct WindowAni
  6: {
  7: 	
  8: 	WindowAni()
  9: 	{
 10: 		mCount		= DEFAULT_COUNT;
 11: 		mCountStop	= DEFAULT_STOP;		// 停留时间(step)
 12: 		mCurCount	= 0;
 13: 		mWindow		= NULL;
 14: 	}
 15: 
 16: 	int mCount;			// 10
 17: 	int mCountStop;		// 停留	2
 18: 	int mCurCount;		// current step
 19: 	//---------------------------
 20: 	float mXBegin;
 21: 	float mYBegin;
 22: 
 23: 	float mXEnd;
 24: 	float mYEnd;
 25: 	
 26: 	Timer * timer;
 27: 	CEGUI::Window * mWindow;
 28: 	//--------------------------------------------------------
 29: 	
 30: 	void SetImage(string nameImag)
 31: 	{
 32: 		mWindow->setProperty("Image",nameImag.c_str());
 33: 	}
 34: 
 35: 
 36: 	/** @param
 37: 		Timer	- 所需的计时器
 38: 		Window	- 要移动的窗口
 39: 		float,float,float,float	-	窗口的起点和终点
 40: 		int _count - 到达终点所需的step
 41: 		int _count_stop - 到达终点时,停留的step  step-是在timer中定义的
 42: 		string image	- 所显示的窗口具体呈现
 43: 	*/
 44: 	void Begin(Timer* _timer,Window *wnd,float _xBegin,float _yBegin,float _xEnd, float _yEnd,int _count,int _count_stop,string _imageset)
 45: 	{
 46: 
 47: 		mCurCount = 0;
 48: 		mWindow = wnd;
 49: 		mWindow->setAlwaysOnTop(true);
 50: 		timer = _timer;
 51: 		SetImage(_imageset);
 52: 		mXBegin = _xBegin;
 53: 		mXEnd = _xEnd;
 54: 		mYBegin = _yBegin;
 55: 		mYEnd = _yEnd;
 56: 	
 57: 		mCount = _count;
 58: 		mCountStop = _count_stop;
 59: 
 60: 		mWindow->show();
 61: 		mWindow->setPosition(UVector2(UDim(0,mXBegin),UDim(0,mYBegin)));
 62: 		timer->start();
 63: 	}
 64: 
 65: 	bool Move()
 66: 	{
 67: 		mCurCount ++;
 68: 		if(mCurCount >= (mCount + mCountStop))
 69: 		{
 70: 			mWindow->hide();
 71: 			timer->stop();
 72: 			SkrGamePtr->UnlockMsg();
 73: 			return true;
 74: 		}
 75: 
 76: 		if(mCurCount > mCount)
 77: 		{
 78: 			mWindow->setPosition(UVector2(UDim(0,mXEnd),UDim(0,mYEnd)));
 79: 			return  false;
 80: 		}
 81: 		float xStep = (mXEnd - mXBegin) / (float)mCount;
 82: 		float yStep = (mYEnd - mYBegin) / (float)mCount;
 83: 		float xNew = mXBegin + xStep * mCurCount;
 84: 		float yNew = mYBegin + yStep * mCurCount;
 85: 		mWindow->setPosition(UVector2(UDim(0,xNew),UDim(0,yNew)));
 86: 		return false;
 87: 	}
 88: 
 89: 	bool MoveII()
 90: 	{
 91: 		mCurCount ++;
 92: 		if(mCurCount >= (mCount + mCountStop))
 93: 		{
 94: 			mWindow->hide();
 95: 			timer->stop();
 96: 			SkrGamePtr->UnlockMsg();
 97: 			return true;
 98: 		}
 99: 
100: 		// 如果小于,就呆在那
101: 		if(mCurCount < mCountStop)
102: 		{
103: 			return false ;
104: 		}
105: 
106: 		if(mCurCount > mCount + mCountStop)
107: 		{
108: 			mWindow->setPosition(UVector2(UDim(0,mXEnd),UDim(0,mYEnd)));
109: 			return  false;
110: 		}
111: 		float xStep = (mXEnd - mXBegin) / (float)mCount;
112: 		float yStep = (mYEnd - mYBegin) / (float)mCount;
113: 		float xNew = mXBegin + xStep * (mCurCount - mCountStop);
114: 		float yNew = mYBegin + yStep * (mCurCount - mCountStop);
115: 		mWindow->setPosition(UVector2(UDim(0,xNew),UDim(0,yNew)));
116: 		return false;
117: 	}
118: };
119: 
120: 

转载于:https://my.oschina.net/lyr/blog/62967

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值