easyX抛物线运动会反弹的小球

如图        easyX是EasyX是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022。现在笔者分享一下应用,让大家对easyX有更多了解。

        easyX绘制一个小球比较简单,在创建窗口后只需要:

fillcircle(x, y, r);//(x,y)为绘制的圆心坐标,r为半径

        这次展示的目标是抛物线运动会反弹的小球,我们来思考这是怎样实现的。

        首先是抛物线运动,需要小球初始坐标和水平运动的初速度以及环境的加速度。先绘制600x600的窗口,画出小球,while(1)循环,绘制出新的位置的小球。需要注意两点,首先cleardevice()的作用是清屏,不然窗口原来的小球会一直存在(也可以用来观察平抛运动的轨迹);第二点是需要Sleep(10)来暂停一段时间,相当于平抛运动中的t(时间),不然以计算机的执行速度,小球会立刻消失。

#include <easyx.h> 
#include <stdio.h>
int main()
{
	float x, y, vx, vy, g; 
	x = 100; // 小球的x坐标
	y = 200; // 小球的y坐标
	vx = 8; // 小球x方向速度
	vy = 0; // 小球y方向速度
	g = 0.3; // 小球加速度,y方向
	initgraph(600, 600); // 初始游戏窗口画面,宽600,高600
	while (1) // 一直循环运行
	{
		cleardevice(); // 清除掉之前绘制的内容
		vy = vy + g; // 利用加速度g更新vy速度
		x = x + vx; // 利用x方向速度vx更新x坐标
		y = y + vy; // 利用y方向速度vy更新y坐标
		fillcircle(x, y, 20); // 在坐标(x,y)处画一个半径为20的圆
		Sleep(10); // 暂停10毫秒
	}
	getchar(); // 等待按键
	closegraph(); // 关闭窗口
	return 0;
}
没有cleardevice()清屏的效果

         那么如何实现反弹呢?只需要修改方向即可

if (y >= 580) // 当碰到地面时
	{
		vx =  vx; // x方向速度受阻尼影响变小
		vy = -1*vy; // y方向速度改变方向,并受阻尼影响变小
	}
if (y > 580) // 防止小球越过地面
	y = 580;
if (x >= 580) // 碰到右边墙,小球x方向速度反向
	vx = -vx;
if (x <= 20) // 碰到左边墙,小球x方向速度反向
	vx = -vx;

合并有下面代码:

#include <easyx.h>
#include <stdio.h>
int main()
{
	float x, y, vx, vy, g; // 定义一些变量
	x = 100; // 小球的x坐标
	y = 200; // 小球的y坐标
	vx = 8; // 小球x方向速度
	vy = 0; // 小球y方向速度
	g = 0.3; // 小球加速度,y方向
	initgraph(600, 600); // 初始游戏窗口画面,宽600,高600
	while (1) // 一直循环运行
	{
		cleardevice(); // 清除掉之前绘制的内容
		vy = vy + g; // 利用加速度g更新vy速度
		x = x + vx; // 利用x方向速度vx更新x坐标
		y = y + vy; // 利用y方向速度vy更新y坐标
		if (y >= 580) // 当碰到地面时
		{
			vx =  vx; 
			vy = -1*vy; // y方向速度改变方向
		}
		if (y > 580) // 防止小球越过地面
			y = 580;
		if (x >= 580) // 碰到右边墙,小球x方向速度反向
			vx = -vx;
		if (x <= 20) // 碰到左边墙,小球x方向速度反向
			vx = -vx;
		fillcircle(x, y, 20); // 在坐标(x,y)处画一个半径为20的圆
		Sleep(10); // 暂停10毫秒
	}
	_getch(); // 等待按键
	closegraph(); // 关闭窗口
	return 0;
}

缺点与不足:fillcircle()这个绘制小球的函数参数需要是整数,因此在应用时会截去小数部分,使得小球即使没有阻尼也会在y轴上逐渐停下来。

效果视频如下:

easyX抛物线运动会反弹的小球

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值