创意桌面移动图标-技术片(二)

前面章节介绍了如何移动桌面图标,下面来介绍以什么样的规则移动桌面图标。

移动规则决定了图标以什么样的形状运行,而不同的移动规则是不停地获取指定图标下一个时间点的位置,然后将信息传递到桌面。设计出一个好的接口,能够更方便、快捷的完成新规则的添加。

下面是笔者经过多种场景优化后抽象出来的接口。当然,随着运动规则的复杂化,也体现了接口存在一定的局限性。

运动单元接口

class Node {		//自定义点阵
public:
	Node() {};
	Node(double x, double y) { this->x = x; this->y = y; };
	static Node copy(Node n);
	double x;
	double y;
};
class DrawPoint {			//绘制点信息
public:
	DrawPoint() {};
	DrawPoint(int index, double x, double y) { this->index = index; this->node.x = x; this->node.y = y;};
	DrawPoint(int index, Node node) { this->index = index; this->node.x = node.x; this->node.y = node.y; };
	int index;				//当前点索引
	Node node;				//调整坐标点
};
class PatCommon {
public:
	static PatCommon* readCommonSnapshot();
	virtual void PrepareData() = 0;
	virtual void setPointCount(int count) = 0;
	virtual vector<DrawPoint> calNextPoint() = 0;
	virtual int getType() = 0;
	virtual bool snapshot() = 0;
	int flage;
	int* nodePoint;		//点初始坐标
	double rotate;		//旋转角度
	vector<Node> nodeVector;  //点阵
	int pointCount;		//总共图标数量
};

说明:

每一个运动单元是对PatCommon的具体实现,其中主要成员功能介绍如下:

  • readCommonSnapshot()静态函数,读取快照,用于软件重启或者开机自启后自动运行。

  • snapshot()将当前运动单元快照保存至本地文件,与readCommonSnapshot()配套。

  • setPointCount(int count)用于设置当前运动单元图标数量的

  1. 当多个运动单元组合运动时,合理分配控制图标数量协同运动非常重要。

  2. 让运动单元根据图标数量进行合理的调整,不同图标数量显示状态可以不同。

  • PrepareData()用于在setPointCount后的初始化运动点阵。

  • vector<DrawPoint> calNextPoint()该函数返回下一帧的点阵信息。

  • getType()获取当前运动单元的类型或者名字。

给出一个具体的实现

在界面运行一个时钟

clock.cpp

clock.h

如何结合上一篇的移动来达到时钟的效果,思考一下。

题外篇

C++如何读取文件

	std::string iconFile;
	FILE * fp;
	fp = fopen(iconFile.c_str(), "w");
	if (fp == NULL) {
		return false;
	}
	if(fprintf(fp, "%.2lf %.2lf ", &x, &y)==2){
		//成功读取到值
	}
	fclose(fp);

二维坐标系下的旋转公式

Node MyRotate(Node nodeX, Node node2, double rorate) {
	return Node((node2.x - nodeX.x)*(cos(rorate*3.14159 / 180)) - (node2.y - nodeX.y)*(sin(rorate*3.14159 / 180)) + nodeX.x, (node2.y - nodeX.y)*(cos(rorate*3.14159 / 180)) + (node2.x - nodeX.x)*(sin(rorate*3.14159 / 180)) + nodeX.y);
}

文章作者: Lulu6432
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Lulu6432技术漫步
创意桌面
喜欢就支持一下吧