码迷,mamicode.com
首页 > Windows程序 > 详细

Windows 图片帧动画 无缝链接技术

时间:2016-05-22 00:38:42      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

是不是很好奇这是怎么做到的?

其实非常简单,其中只用到一个图片就实现该效果。

为了理解上面的图片,我将用图片进行一些概念的讲解。

首先动画是由帧构成的,所以为了制作动画,我们得制作帧,制作完成了之后再串起来就可以了。

所以对于只有一张图要实现动画的效果, 我们可以对图片进行切片。

首先只将一张图片分成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;
}

以上代码的作用其实就是控制切片的位置在窗口中的显示,从而达到如下的效果。

技术分享

如果看不懂我的描述,那么还是看代码吧:)

 

那么要实现动画的效果,还有一个要求就是图片要首尾相连。

技术分享

技术分享

 技术分享

Windows 图片帧动画 无缝链接技术

标签:

原文地址:http://www.cnblogs.com/balalaXD/p/5515923.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!