标签:
是不是很好奇这是怎么做到的?
其实非常简单,其中只用到一个图片就实现该效果。
为了理解上面的图片,我将用图片进行一些概念的讲解。
首先动画是由帧构成的,所以为了制作动画,我们得制作帧,制作完成了之后再串起来就可以了。
所以对于只有一张图要实现动画的效果, 我们可以对图片进行切片。
首先只将一张图片分成2个切片(其中切片只是为了更好地形容理解,但并没有进行切片操作), 比如像这样
而我们要实现动画过程等价于实现这样的帧
12 21 12 21...(颜色或数字分别代表上面的切片)
那么我们可以设置一个变量g_nOffset用来表示切片X的坐标。
背景图片长400 宽300
// 背景图片长宽分别等于WINDOW_WIDTH WINDOW_HEIGHT
int Game_Paint(void *parms = NULL, int num_parms = 0)
{
SelectObject(g_bufdc, g_hBackGround); // g_hBackGround 是一个位图句柄
// 将背景图片坐标(g_nOffset, 0)表示在坐标(0, 0) 长度WINDOW_WIDTH-g_nOffset 宽度WINDOW_HEIGHT
BitBlt(g_mdc, 0, 0, WINDOW_WIDTH-g_nOffset, WINDOW_HEIGHT, g_bufdc, g_nOffset, 0, SRCCOPY);
// 将背景图片坐标(0, 0)表示在坐标(WINDOW_WIDTH-g_nOffset, 0), 长度g_nOffset 宽度WINDOW_HEIGHT
BitBlt(g_mdc, WINDOW_WIDTH-g_nOffset, 0, g_nOffset, WINDOW_HEIGHT, g_bufdc, 0, 0, SRCCOPY);
BitBlt(g_hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, g_mdc, 0, 0, SRCCOPY);
if (g_nOffset >= 400) // 如果坐标大于或等于图片长度 设置为0
g_nOffset = 0;
else
g_nOffset += 2; // 使切片长度发生变化
return 1;
}
以上代码的作用其实就是控制切片的位置在窗口中的显示,从而达到如下的效果。
如果看不懂我的描述,那么还是看代码吧:)
那么要实现动画的效果,还有一个要求就是图片要首尾相连。
标签:
原文地址:http://www.cnblogs.com/balalaXD/p/5515923.html