一、基于Easyx库的初级C/C++编程游戏制作:小球动画(1)

写这篇文的原因:最近对游戏制作感兴趣,在阅读《C和C++游戏趣味编程》,打算按照书里的实践项目,一点点实现一个简单的游戏框架。

注意点:

  • 因为更擅长C语言,先都用C语言写,后续根据需要改进成C++。
  • 底层的图形库动画等等实现都用C语言,再制作C++的接口。
  • 暂时随便标注错误和状态,后续加个轻量的日志系统

一、基本的图像绘制

1.基本图像绘制:

使用EasyX的库函数:

void fillcircle (int x, int y, int radius);	//绘制一个圆
HWND initgraph(int width, int height, int flag = 0);//创建窗口
void closegraph(); //关闭窗口
void cleardevice();	//清屏

2.小球结构体

超简单的小球结构体,后续再改进

typedef struct circle
{
	int x;
	int y;
	int r;
}games_circle_s;
typedef games_circle_s* games_circle_t;

3.创建一个小球

games_circle_t graph_draw_circle_init(int x,int y,int r)
{
	games_circle_t circle = (games_circle_t)malloc(2 * sizeof(games_circle_s));
	if (circle == NULL)
	{
		perror("malloc error");
		return NULL;
	}
	circle->x = x;
	circle->y = y;
	circle->r = r;
	return circle;
}

在主函数中创建一个小球:

games_circle_t circle = graph_draw_circle_create(screen_width / 2,screen_height/2, 20);
if (circle == NULL)
{
	perror("circle create error");
	return -1;
}

4、下降动画实现

下落动画简单的实现思路:
画一个球->停顿一会儿->改变球的y轴位置->清除球->画一个球->重复
一开始根据书上动画制作的相当简单,类似这样:

cleardevice();
fillcircle (300,100,20);	
sleep(1000);
cleardevice();
fillcircle (300,200,20);	
sleep(1000);
cleardevice();
fillcircle (300,300,20);	
sleep(1000);

一点点改进最后变成了这样:
y:下降位置
step:下降距离
n:这个后续可能会改成帧数计算,现在先这么写
speed:下降速度

//下坠的动画
void games_circle_down(games_circle_t circle,int y,int step,int n,int speed)
{
	for (int i = 0; i <= n; i++)
	{
		y = y + step;
		cleardevice();
		fillcircle(circle->x, y, circle->r);
		Sleep(speed);
	}
}

5、变大变小动画

有了下降动画就很简单了,直接就是复制上面的函数稍微改一改,最后变成了这样:
//变大变小的动画

void games_circle_length(games_circle_t circle, int r, int step, int n, int speed)
{
	for (int i = 0; i <= n; i++)
	{
		r = r + step;
		cleardevice();
		fillcircle(circle->x, circle->y, r);
		Sleep(speed);
	}
}

两个动画在主函数中的简单调用:

games_circle_down(circle,game_circle_y,game_circle_step, 100, 100);
games_circle_length(circle, game_circle_r, game_circle_step, 100, 100);

6、动画改进

设计一个动画结构体,专门用于存储动画的参数,比如当前对象的坐标,状态,以及持续的动画时间,动画帧数等。
这个需要抽象一下,明天继续吧
2024/2/22

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值