同学,怎么用C语言制作简单的动画啊?
推荐于2017-10-15 · 知道合伙人游戏行家
因为C的图形处理功能太一般,不便于创作大型动画。制作动画用flash。
flash制作动画:
打开Flash,点击【文件】→【新建】,在打开的“新建”窗口中选择“Flash文件(ActiveScript 3.0)“,然后点击”确定“创建空白文档。
点击【插入】→【新建元件】,在打开的”新建元件“窗口中,将名称设置为”运动的小人“,勾选”影片剪辑“,然后点击”确定“按钮。
点击【文件】→【导入】→【导入到库】,然后在打开的”导入到库“窗口中,选择事先准备好的小人走动姿势图片,全部选择并点击”打开“按钮,导入到库。
在图层1 的第一帧,把库中的“Result0”拖动到场景中。
点击“时间轴”上的“新建图层”按钮,创建图层2,然后在图层2的第5帧处,点击【插入】→【关键帧】,把库中的“Result1”拖动到场景中。
利用同样的原理,将”Result2“、 ”Result3“和”Result4“分别到图层3、图层4和图层5中,对应的帧分别为10、15和20处。
最后调整各个图层图像的延续时间。至此,运动的小人影片剪辑制作完成。
切换至主场景中,使主场景处于活动状态,点击”属性“面板中的”大小“按钮,将场景的大小设置为”800*300“,同时将背景色设置为”黑色“点击”确定“按钮。
从库中将”运动的小人“影片剪辑拖动到场景左边外边。
然后在”时间轴“第30帧处,点击【插入】→【时间轴】→【关键帧】,在30帧处插入关键帧,然后将小人从场景的左侧外面拖动到场景右侧外面。至此,整个动画设置完成。
在1到30帧之间鼠标右击,选择”创建补间动画“。
最后按下键盘组合键”CTRL+Enter“进行测试。如果感觉小人运动不规律,可适当将1至30帧的距离调整的稍微大一些,直到满意为止。
2013-07-17
void main()
{
int i; //用户循环
printf("简单动画演示程序\n");
for(i=0;i<5;i++)
display_picture(); //打印动画效果
printf("\n\t\t\t\tTest\n");
system("pause"); //暂停
</FONT>} 以上就是主文件内容,是不是觉得很简单呢?下面是自定义头文件user_def.h/* user_def.h */#ifndef _user_def_H //用户自定义头文件user-defined
#define _user_def_H#include <windows.h> //支持Sleep函数
#include <stdio.h>
#include <time.h> //用于随机函数初始化time()void color_back() //设置文本字符的颜色
{
int i;
srand((unsigned)time(NULL)); //初始化时钟
i=rand()%15; //随机一个0到14的整数
switch(i)
{
case 0: system("color 07");break;
case 1: system("color 08");break;
case 2: system("color 09");break;
case 3: system("color 0A");break;
case 4: system("color 0B");break;
case 5: system("color 0C");break;
case 6: system("color 0D");break;
case 7: system("color 0E");break;
case 8: system("color 0F");break;
case 9: system("color 01");break;
case 10:system("color 02");break;
case 11:system("color 03");break;
case 12:system("color 04");break;
case 13:system("color 05");break;
case 14:system("color 06");break;
}
}void display_picture() //显示动画程序
{
system("cls");
printf("\n\n");
color_back(); //随机一个文本颜色
Sleep(300); //让系统暂停300毫秒,1秒 = 1 000 毫秒
printf("\t\t J RRRRRR L \n");
color_back();
Sleep(300);
printf("\t\t J R R L \n");
color_back();
Sleep(300);
printf("\t\t J R R L \n");
color_back();
Sleep(300);
printf("\t\t J R R L \n");
color_back();
Sleep(300);
printf("\t\t J RRRRRR L \n");
color_back();
Sleep(300);
printf("\t\t J R R L \n");
color_back();
Sleep(300);
printf("\t\t J J R R L \n");
color_back();
Sleep(300);
printf("\t\t J J R R L \n");
color_back();
Sleep(300);
printf("\t\t JJJJ R R LLLLLLLL \n");
}#endif自定义头文件增加了程序中函数的重用性,让我感觉到C语言更加灵活更加随心所欲。俗话说:参谋不带长,放屁也不响。如果学C语言不会灵活使用自定义头文件,那么相当于是个参谋,档次层次都不够格。
提供一个demo,需要在TC上运行,运动的卫星 ,卫星是绕着屏幕不断地运行直到按任意键为止。
/*运动的卫星QW45.C*/
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#define SIZE 10
void draw_image(int x,int y);
void putpixel_demo(void);
int main()
{
int gmode,gdriver=DETECT,errorcode;
void *pt_addr;
int x,y,maxx,maxy,midx,midy,i;
unsigned int size;
initgraph(&gdriver,&gmode,"\\tc3\\bgi");
errorcode=graphresult();
if(errorcode!=0)
{
printf("Graphics error: %s\n",grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
maxx=getmaxx();
maxy=getmaxy();
midx=maxx/2;
x=0;
midy=maxy/2;
y=maxy/2;
setcolor(YELLOW);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(midx,400,"COMPUTER WORLD");
setcolor(BLACK);
setcolor(RED);
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
setcolor(LIGHTBLUE);
for(i=0;i<13;i++)
{
ellipse(midx,midy,0,360,100,100-8*i);
ellipse(midx,midy,0,360,100-8*i,100);
}
draw_image(x,y);
size=imagesize(x,y-SIZE,x+(4*SIZE),y+SIZE);
pt_addr=malloc(size);
getimage(x,y-SIZE,x+(4*SIZE),y+SIZE,pt_addr);
putpixel_demo();
setcolor(WH99vE);
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
rectangle(0,0,maxx,maxy);
while(!kbhit())
{
putimage(x,y-SIZE,pt_addr,XOR_PUT);
x=x+5;
if(x>maxx)
x=0;
putimage(x,y-SIZE,pt_addr,XOR_PUT);
delay(100);
}
free(pt_addr);
closegraph();
return 0;
}
void draw_image(int x,int y)
{
moveto(x+10,y);
setcolor(14);
setfillstyle(1,4);
linerel(-3*10,2*10);
moveto(x+10,y);
linerel(-3*10,-2*10);
moveto(x+25,y);
linerel(-5*10,0);
fillellipse(x+13,y,8,8);
}
void putpixel_demo(void)
{
int seed=2003;
int i,dotx,doty,h,w,color,maxcolor;
maxcolor=getmaxcolor();
w=getmaxx();
h=getmaxy();
srand(seed);
for(i=0;i<5000;++i)
{
dotx=1+random(w-1);
doty=1+random(h-1);
color=random(maxcolor);
putpixel(dotx,doty,color);
}
srand(seed);
}