easyx图形库基础:2.基本运动+键盘交互

这篇具有很好参考价值的文章主要介绍了easyx图形库基础:2.基本运动+键盘交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.基本运动

1.基本运动:

1.如何实现动画:

相信大家已经对动画的原理已经不陌生了。想要目标物体动起来,只需要逐个播放目标物体每一时刻位置的图片。只要播放的速度足够快,人们就会在视觉上认为目标物体动起来了。

帧率:具有连续性的一些图片在1秒中绘制的个数。
物体运动的速度单位一般是 像素/秒。
sleep函数:可以让我们的程序在执行到sleep函数的时候就停下自己定义的时间,sleep函数的单位是毫秒

easyx图形库基础:2.基本运动+键盘交互,交互

2.实现一个小球从左到右从右到左:(往返运动)

void moveball()
{
	int x = -400;
	int y = 0;
	//设置小球的每一次移动的距离
	int vx = 5;
	setfillcolor(RGB(90, 164, 174));
	while (1)
	{
		//绘制小球
		solidcircle(x, y, 25);
		Sleep(40);
		//判断小球转方向。
		if (x >= 400 || x<-400)
		{
			vx = -vx;
		}
		//进行坐标值的变化;
		x += vx;
		cleardevice();
	}
}

3.实现一个五角星的移动:

easyx图形库基础:2.基本运动+键盘交互,交互

#define PI 3.14
void star()
{
	POINT st[5];

	int x = -400;
	int y = 0;

	int vx = 5;
	int r = 30;

	double rad = PI / 180;

	while (1)
	{
		cleardevice();
		setfillcolor(YELLOW);
		//设置五角星的坐标
		for (int i = 0; i < 5; i++)
		{
			st[i].x = x + r * sin( rad* (144 * i));
			st[i].y = y + r * cos( rad* (144 * i));
		}
		//绘制五角星
		solidpolygon(st,5);
		Sleep(40);
		//判断五角星转方向。
		if (x >= 400 || x < -400)
		{
			vx = -vx;
		}
		//进行坐标值的变化;
		x += vx;
	}
}

4.实现一个五角星自转和圆周运动的集合:(圆周运动)

#define PI 3.14

void star()
{
	POINT st[5];

	int x = 0;
	int y = 0;
	
	//大圆周半径
	int R = 200;
	//小圆周半径
	int r = 50;

	double rad = PI / 180;
	int j = 0;
	while (1)
	{
		cleardevice();
		setfillcolor(YELLOW);

		//五角星的x,y坐标
		
		x = R * sin(rad * j);
		y = R * cos(rad * j);

		//设置五角星的坐标,初始化角度值可以变化。
		for (int i = 0; i < 5; i++)
		{
			st[i].x = x + r * sin( rad* ((144 * i)+j));
			st[i].y = y + r * cos( rad* ((144 * i)+j));
		}
		//绘制五角星
		solidpolygon(st,5);
		Sleep(40);

		j++;
		if (j == 359)
		{
			j = 0;
		}
	}
}

2.直线运动:

1.左上左下右上右下:

  1. P1到P2
    圆形从P1运动到P2。由于是直线运动,速度与位移的方向是相同的,均是从P1到P2。此时,速度方向
    并不是水平或垂直的。但是,我们可以通过三角函数计算出速度在x方向与y方向的速度分量。为了计算出速度分量,还需要先求出速度方向与x轴的夹角θ。
    easyx图形库基础:2.基本运动+键盘交互,交互
    easyx图形库基础:2.基本运动+键盘交互,交互

2.任意从一个点到一个点的直线运动。

1.使用三角函数和反三角函数计算角度
2.根据三角函数计算速度分量
3.根据速度方向的正负求速度的符号
使用速度方向的正负确定停止条件。

//直线运动
//直线运动
void straight_line(int x1,int y1,int x2,int y2,int v)
{
	//求角度
	double ran = (double)abs(y2 - y1) / (double)abs(x2 - x1);
	double th = atan(ran);
	//给速度分量赋值
	double vx = v * cos(th);
	double vy = v * sin(th);
	//判断运动方向
	int flagvx = 0;
	int flagvy = 0;

	if (x2 - x1 < 0)
	{
		flagvx = -1;
	}
	else if (x2 - x1 > 0)
	{
		flagvx = 1;
	}
	if (y2 - y1 < 0)
	{
		flagvy = -1;
	}
	else if (y2 - y1 > 0)
	{
		flagvy = 1;
	}

	vx = vx*flagvx;
	vy = vy*flagvy;

	//初始化位置
	double x = x1;
	double y = y1;


	while (1)
	{
		cleardevice();
		solidcircle(x, y, 30);
		Sleep(40);

		x += vx;
		y += vy;


		//判断循环结束条件
		if (flagvx == 1)
		{
			if (x >= x2)
				break;
		}
		else if (flagvx == -1)
		{
			if (x <= x2)
				break;
		}

		if (flagvy == 1)
		{
			if (y >= y2)
				break;
		}
		else if (flagvy == -1)
		{
			if (y <= y2)
				break;
		}

	}
}
}

二.键盘交互

因为kbhit和getch是不是标准库的内容他是平台实现函数然后为了进行区分就在函数名称前面加上了一个_.
头文件是conio.h

1.动键盘我们的图形才移动:

void contour()
{
	//初始化坐标和水平竖直速度
	int x = 0;
	int y = 0;

	int vx = 0;
	int vy = 0;


	while (1)
	{
		//conio.h是getch函数的头文件,
		//这个函数可以直接获取输入缓冲区的字符不需要回车确认
		cleardevice();
		solidcircle(x, y, 30);

		//获取键盘输入字符
		char ch=_getch();
		switch (ch)
		{
			case'A':
			case'a':
				vx = -5;
				vy = 0;
				break;
			case'S':
			case's':
				vy = -5;
				vx = 0;
				break;
			case'W':
			case'w':
				vy = 5;
				vx = 0;
				break;
			case'D':
			case'd':
				vx = 5;
				vy = 0;
				break;
		}
		x += vx;
		y += vy;
	}

}

2.动键盘去控制原来的运动情况:

默认我们的图形开始是从左向右运动的,我们键盘输入数据才移动。文章来源地址https://www.toymoban.com/news/detail-653295.html

void movecontour()
{
	//初始化坐标和水平竖直速度
	int x = 0;
	int y = 0;

	int vx = 5;
	int vy = 0;


	while (1)
	{
		//conio.h是getch函数的头文件,
		//这个函数可以直接获取输入缓冲区的字符不需要回车确认
		cleardevice();
		solidcircle(x, y, 30);
		Sleep(40);

		//获取键盘输入字符
		x += vx;
		y += vy;

		//判断输入缓冲区中是否有内容,_kbhit()不会阻塞函数。
		//如果有内容进入语句,getch获取缓冲区的数值去改变速度的值。
		if (_kbhit())
		{
			char ch = _getch();
			switch (ch)
			{
			case'A':
			case'a':
				vx = -5;
				vy = 0;
				break;
			case'S':
			case's':
				vy = -5;
				vx = 0;
				break;
			case'W':
			case'w':
				vy = 5;
				vx = 0;
				break;
			case'D':
			case'd':
				vx = 5;
				vy = 0;
				break;
			}
		}



	}


}

到了这里,关于easyx图形库基础:2.基本运动+键盘交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • EasyX图形化学习(三)

    即每秒钟界面刷新次数,下面以60帧为例: 1.数据类型 clock_t: 用来保存时间的数据类型。 2.clock( ) 函数: 用于返回程序运行的时间,无需参数。 3.例子: 先定义所需帧率: 然后定义两个变量,用于表示一次循环运行前后的时间,再用Sleep函数休眠即可。 1.定义图片变量: 数

    2024年01月19日
    浏览(55)
  • C++ 之 Visual Studio 搭建 EasyX Graphics Library 图形库环境,并使用EasyX(graphics.h)绘制第一个图形

    目录 C++ 之 Visual Studio 搭建 EasyX Graphics Library  图形库环境,并使用EasyX(graphics.h)绘制第一个图形 一、简单介绍 二、Visual Studio 下载安装 三、EasyX Graphics Library 下载与安装到 Visual Studio 中 四、 EasyX(graphics.h)  和 Visual Studio C++  绘制第一个图形 五、关键代码 C++ 开发的一些知识

    2024年02月05日
    浏览(89)
  • easyx学习笔记(五):键盘消息

     学习视频【C/C++/EasyX】学编程,做游戏,小白快速入门图形编编程 目录 getch();需要使用返回值来判断         控制圆形移动:         代码问题1:         代码问题2: GetAsyncKeyState(键值); 非easyx函数:  用于获取键盘消息的函数  getch();                 

    2024年02月03日
    浏览(43)
  • C/C++图形库EasyX保姆级使用教程(二) 图形化窗口设置以及简单图形的绘制

    第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用 第二章 图形化窗口设置以及简单图形的绘制 本篇文章,我将给大家展示VC中的图形化编程,内容比较详细! 日常写程序,我们用的最多的就是控制台的窗口,但是,今天我们讲的是图形化编程,那么 控制台窗口 变成了

    2024年01月19日
    浏览(46)
  • 基于Easyx实现同时接收键盘鼠标消息

    说明:本示例开发环境为vs2019 且需要C++11语法支持,旨在帮助初学者能够以更便捷的方式使用IO设备。 头文件中的两个监听器专门用于监听鼠标、键盘消息。 两个监听器的参数均为函数指针,因此事件触发后具体执行哪些事情完全由你来决定。你只需要编写两个对应的处理函

    2024年01月17日
    浏览(49)
  • 图形化界面扫雷(C语言+easyx实现,多图教学)

    学了那么长时间的C语言,我们所有的一切似乎都被禁锢在黑框框(控制台)里,让人觉得很无趣,学习unity那样的平台又太过困难,那么有没有什么是适合我们这些新手使用的?答案是:有! EasyX 是针对 C/C++ 的图形库,可以帮助使用C/C++语言的程序员快速上手图形和游戏编程

    2024年02月06日
    浏览(46)
  • 【c语言】五子棋(EasyX图形库+背景音乐)

    大家好,有没有觉得写了好多c语言代码,面对的都是黑框框控制台,当我们学习了基础的c语言知识,和EasyX图形库后,终于可以和黑框框saygoodbye,今天要分享给大家的是小游戏五子棋,跟着小张一起学习吧 图形库链接 1.点击下载 2.安装你对应集成开发环境对应的安装包,我用

    2024年02月09日
    浏览(39)
  • 基于EasyX学习图形学中的三维几何变换【全】

    本文开始学习几何变换中的三维变换,对于各种变换的定义方法基本和二维变换一样,在此我就不过多赘述了。 三维变换矩阵 由于二维变换矩阵为三阶矩阵,所以三维变换矩阵为四阶矩阵 以下例子均在此正方体基础上 坐标表示 矩阵表示 变换矩阵 核心代码 效果展示 坐标表

    2024年02月09日
    浏览(48)
  • C++实现贪吃蛇(含源代码)—基于easyx图形库

                                            食用指南:本文在有C++基础的情况下食用更佳                                           🍀 本文前置知识: C++基础                                        ♈️ 今日夜电波:toge—あよ              

    2024年02月09日
    浏览(46)
  • C/C++图形库EasyX保姆级使用教程(一) Microsoft Visual Studio 2022和EasyX的下载及安装使用

    第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包