BestAns

路漫漫其修远兮,吾将上下而求索

VC绘图/游戏简易教程--6:实现简单动画

教程总目录:https://www.codeabc.cn/bestans/post/concise-lesson-contents(里面包括VC下的graphics.h的配置方法)

所谓动画,其实是连续显示一系列图形而已。
结合到程序上,我们需要以下几个步骤:

  1. 绘制图像
  2. 延时
  3. 擦掉图像

循环以上即可实现动画。

举一个例子,我们实现一条直线从上往下移动:

#include <graphics.h>
#include <conio.h>

int main()
{
	initgraph(640, 480);

	for(int y = 0; y < 480; y++)
	{
		// 绘制绿色直线
		setlinecolor(GREEN);
		line(0, y, 639, y);

		// 延时
		Sleep(10);

		// 绘制黑色直线(即擦掉之前画的绿线)
		setlinecolor(BLACK);
		line(0, y, 639, y);
	}

	closegraph();
	return 0;
}

再看一个例子,实现一个圆从左往右跳动:

#include <graphics.h>
#include <conio.h>

int main()
{
	initgraph(640, 480);

	for(int x = 100; x < 540; x += 20)
	{
		// 绘制黄线、绿色填充的圆
		setlinecolor(YELLOW);
		setfillcolor(GREEN);
		fillcircle(x, 100, 20);

		// 延时
		Sleep(500);

		// 绘制黑线、黑色填充的圆
		setlinecolor(BLACK);
		setfillcolor(BLACK);
		fillcircle(x, 100, 20);
	}

	closegraph();
	return 0;
}

也就是说,移动的间距小、延时短,动画就会越细腻。但当画面较复杂时,会带来画面的闪烁(怎样消除闪烁是以后的话题)。

[作业]
绘制一个沿 45 度移动的球,碰到窗口边界后反弹。

分享到

Comments (2) -

  • //绘制一个沿45°移动的球,碰到窗口界面后反弹
    #include<graphics.h>
    #include<conio.h>
    void main()
    {
      initgraph(640,640);
      int x,y;
      for(x=320,y=320;y>40;x+=40,y-=40)
      {
        setfillcolor(RED);
        setlinecolor(BLUE);
        fillcircle(x,y,40);
        Sleep(200);
        setfillcolor(BLACK);
        setlinecolor(BLACK);
        fillcircle(x,y,40);
      }
      for(;x>320;x-=40,y+=40)
      {
        setfillcolor(RED);
        setlinecolor(BLUE);
        fillcircle(x,y,40);
        Sleep(200);
        setfillcolor(BLACK);
        setlinecolor(BLACK);
        fillcircle(x,y,40);
      }
      _getch();
      closegraph();
    }
  • #include<graphics.h>
    #include<conio.h>
    void main()
    {
         initgraph( 600 , 600 );
       for(int x=100,y=400;y>0;x+=5,y-=5)
       {
       setlinecolor(GREEN);
       circle(x,y,50);
      
       Sleep(50);
      
         setlinecolor(BLACK);
       circle(x,y,50);
       if(y==0)
       for(int x=500,y=0;x<600;x+=5,y+=5)
       {
       setlinecolor(GREEN);
       circle(x,y,50);
      
       Sleep(200);
      
         setlinecolor(BLACK);
       circle(x,y,50);
       }
        
       }
      
      
       _getch();
         closegraph();
    }
    老哥,我这个为啥碰到窗口就消失了啊,程序没有提示error,我感觉if里的错了