技术片(二)-创意桌面之移动图标
创意桌面移动图标-技术片(二)
前面章节介绍了如何移动桌面图标,下面来介绍以什么样的规则移动桌面图标。
移动规则决定了图标以什么样的形状运行,而不同的移动规则是不停地获取指定图标下一个时间点的位置,然后将信息传递到桌面。设计出一个好的接口,能够更方便、快捷的完成新规则的添加。
下面是笔者经过多种场景优化后抽象出来的接口。当然,随着运动规则的复杂化,也体现了接口存在一定的局限性。
运动单元接口
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)用于设置当前运动单元图标数量的
当多个运动单元组合运动时,合理分配控制图标数量协同运动非常重要。
让运动单元根据图标数量进行合理的调整,不同图标数量显示状态可以不同。
PrepareData()用于在setPointCount后的初始化运动点阵。
vector<DrawPoint> calNextPoint()该函数返回下一帧的点阵信息。
getType()获取当前运动单元的类型或者名字。
给出一个具体的实现
在界面运行一个时钟
如何结合上一篇的移动来达到时钟的效果,思考一下。
题外篇
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);
}
本文链接:
/archives/1697866108970
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Lulu6432技术漫步!
喜欢就支持一下吧