图形库EasyX的学习:)

news2025/4/7 2:05:07

最近学了一点做小游戏的基本知识,来总结一下,巩固一下记忆:

在这个基础上初学者要先明白vs的下载及基本使用还有图形库的下载及安装

然后才是正题:

图形库里包含c++语法,所以要用c++文件,但是除了里面的函数外其他的语法是c语言,也就是说这个虽然是c++文件,但是c语言基础好的同学学起来也没什么问题;

在要用EasyX里面的函数时,记得包含头文件<easyx.h>

刚开始学习这个的时候肯定都是先从创建窗口开始,所以先来了解一些基本函数功能再来打代码:

initgraph函数暂定它只有两个参数(后面再学新的),一个是宽,一个是高,单位是像素,也就是在平面图里的矩形的长宽;

还有一个函数closegraph()没有参数,用于关闭窗口,当然,如果你不关的话也没什么事,但是还是要养成好习惯,根据上面的知识,可以打出这样的代码:

#include<easyx.h>
int main()
{
    initgraph(800, 600);
    closegraph();
	return 0;
	

}

这个代码可以运行,但是你会发现,确实创建了一个这样的800像素宽,600像素高的窗口,但是窗口一闪而过,就没了,这是为什么呢?

后来我才了解到:程序运行后窗口创建后就立刻关闭了,但是这样的话,根本就看不清窗口,创建和没创建不就一样了;所以为了解决这个问题,又来了一个函数getchar();它的作用是暂时阻塞程序,等待用户按键后再关闭,看起来很厉害,其实这个函数就本来是用来获取用户输入的字符的,但是一个单独的这样的,在用户没有按键也就是输入字符的时候,程序就一直在等,就不会再到后面的关闭窗口了,知道用户输入字符就会继续程序的编译,就便于看见这个创建的窗口;对了还有一点要注意:getchar函数是编译器自带的函数库里的函数所以要记得引用头文件#include<stdio.h>

更改后的程序就变成这样了:

#include<easyx.h>
#include<stdio.h>
int main()
{
    initgraph(800, 600);
    getchar();
    closegraph();
	return 0;

}

然后第二个了解的就是窗口的逻辑坐标和物理坐标:

在图形库里,

这张图相当于一个窗口。仔细看可以发现它是从除了标题框从黑框开始的最左上角作为原点(0,0),下面和右边分别为y,x坐标的正方向,刚开始默认物理坐标,和逻辑坐标都是这样,但是有一点不同,逻辑坐标可以改,物理坐标不可以改,可以这么理解:每个人的逻辑可能都会不一样,所以逻辑坐标可以更改,而,物理客观存在的事物不可以更改,所以物理坐标不可以改;

所以怎么改逻辑坐标呢?

为什么要改?

可以想到,有时候我们要作图的时候肯定要画在这个窗口让人看见才行,所以按照我们一般来看都是与靠中间越好,而且一般我们建立直角坐标系都是 从中间建立,以便计算其他位置的坐标,所以为了解决这个问题,有了这几个函数:

setorigin函数,有两个参数,表示设置的逻辑坐标的x坐标和y坐标;

还有一个,由于我们一般的习惯是y方向向上为正,为了符合自己的习惯,这时候我也想改过来,所以就发现了这样一个函数:setaspectratio函数,有两个参数,我现在了解的不多,从我目前了解的来看,他的两个参数可以调大小,但是具体是做什么的,暂时可以不去深究,因为目前我只是改变它的正负而已,两个参数都默认为1,都为正,分别表示x,y轴的朝向向右为正,和向下为正,这时候,把第二个参数改成-1也就让y轴变成了以向上为正;

将程序放进这两个函数之后就变成这样:

#include<easyx.h>
#include<stdio.h>
int main()
{
    initgraph(800, 600);
    setorigin(400, 300);
	setaspectratio(1, -1);
    getchar();
    closegraph();
	return 0;

}
   

这里现总结一个误区和一个易错点:

这个setorigin函数建立新的逻辑坐标是在物理坐标的基础上,物理坐标是不会变的,也就是说如果我连续用了两个这个建立逻辑坐标的原点函数,最终建立起来的逻辑坐标,和将第一个逻辑坐标删掉的一样;(可以通过画图函数画出来的图的位置来验证);

还有一个易错点:千万不要把画这些有功能的函数放在getchar后面,至于为什么可以从上面了解到的基础只是可以得出原因;

现在窗口差不多建立完了,也是时候开始画图了,一大波知识点正在来袭,保护好脑子(主要是想练熟的话就要爱惜一下手了):

line函数,四个参数,分别表示俩个确定点坐标的xy值;也就是相当于line(100,200,100,300);这个画出来的会是一条x1=100,y1=200,x2=100,y2=300;的两个点确定的直线;画一下试试(这里的坐标都是只逻辑坐标);

 上面的那条白色的小线条就是;来看看这个代码:

#include<easyx.h>
#include<stdio.h>
int main()
{
    initgraph(800, 600);
    setorigin(400, 300);
    setaspectratio(1, -1);
    line(100, 200, 100, 300);
    getchar();
    closegraph();
    return 0;

}

circle函数,画圆的函数,有三个参数,圆心的xy坐标分别占两个,(这些函数的坐标都是一逻辑坐标为基础的x,y坐标)还有一个就是以像素为单位的半径;

所以可以写一个这样的代码,结果为:

#include<easyx.h>
#include<stdio.h>
int main()
{
    initgraph(800, 600);
    setorigin(400, 300);
    setaspectratio(1, -1);
   circle(100, 200, 100);
    getchar();
    closegraph();
    return 0;

}

 学了前面的基础下面的函数就更容易理解了(也就是相面还有一堆画图函数QAQ);

但是没有下面了,今天结束了,对学习说晚安~~

---------------------------------------------------------------------------------------------------------------------------------

要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubantu docker学习笔记(六)容器数据卷——补充实验

文章目录一、volume container二、 data-packed volume container三、利用数据卷驱动共享数据注意要在同一个网络配置下&#xff01;3.1服务端3.2客户端一、volume container 这里我觉得很好理解&#xff0c;volume container是专门为其他容器提供volume的容器。其实也就相当于…

深圳海运到墨西哥需要多长时间

目前&#xff0c;墨西哥的跨境电商商业正在高速发展&#xff0c;并且具有可观的红利。因此&#xff0c;从中国到墨西哥的运输需求很大&#xff0c;特别是海运&#xff0c;是很多跨境电商卖家主要选择的运输方式。 一般而言&#xff0c;中国到墨西哥的跨境卖家们普遍关注海运所需…

“终于我从字节离职了...“一个年薪40W的测试工程师的自白...

”我递上了我的辞职信&#xff0c;不是因为公司给的不多&#xff0c;也不是因为公司待我不好&#xff0c;但是我觉得&#xff0c;我每天看中我憔悴的面容&#xff0c;每天晚上拖着疲惫的身体躺在床上&#xff0c;我都不知道人生的意义&#xff0c;是赚钱吗&#xff1f;是为了更…

【云原生进阶之容器】第五章容器运行时5.8--容器热迁移

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

MySQL-存储过程

什么是存储过程我们前面所学习的MySQL语句都是针对一个表或几个表的单条 SQL 语句&#xff0c;但是在数据库的实际操作中&#xff0c;并非所有操作都那么简单&#xff0c;经常会有一个完整的操作需要多条SQL语句处理多个表才能完成。例如&#xff0c;为了确认学生能否毕业&…

015 - C++ 类与结构体对比

今天这期我们主要解决一个问题&#xff0c;就是 C 中的类和结构体有什么区别。 上一期我们讲类的时候&#xff0c; 我们对类有了一些基本的介绍&#xff0c;在本期的学习开始之前你可以先看看那一期。 本期我们有两个术语&#xff0c;结构体 struct&#xff0c;它是 structur…

【终结扩散模型】Consistency Models.OpenAI开源新模型代码,一步成图,1秒18张

【终结扩散模型】Consistency Models.OpenAI开源新模型代码&#xff0c;一步成图&#xff0c;1秒18张0、前言Abstract1. Introduction2. Diffusion Models3. Consistency Models3.1 Definition3.2 Parameterization3.3 Sampling3.4 Zero-Shot Data Editing4. Training Consiste…

MySQL运维13-数据库性能测试

文章目录1、数据库性能指标1.1、事务吞吐率1.2、响应时间2、数据库性能测试的目的3、数据库性能测试的注意事项4、数据库性能测试工具选型4.1、sysbench4.2、mysqlslap5、sysbench测试介绍5.1、sysbench的安装5.1.1、sysbench的正常安装步骤5.1.2、安装中的异常处理5.2、sysben…

数据结构|二叉树的三种遍历方式,你掌握了几种?

目录 1、遍历方式 2、前序遍历 3、中序遍历 1、遍历方式 学习二叉树的结构&#xff0c;最简单的方式就是遍历二叉树。遍历二叉树就是通过某条线路对二叉树的各个结点进行一次访问&#xff0c;访问的方法有三种分为前序遍历、中序遍历、后续遍历&#xff0c;层序遍历它们的遍…

TryHackMe-Year of the Fox(Linux渗透测试)

Year of the Fox 你能熬过狡猾的狐狸吗&#xff1f; 端口扫描 循例nmap 有个域名&#xff0c;加入hosts SMB枚举 smbmap enum4linux -a&#xff0c;枚举到两个账户 Web枚举 进80发现需要登录 上hydra RCE to Getshell 进来可以查看一些文件 bp发现这里存在过滤 burpfuzz一…

数据结构---作业1时间复杂度

本专栏是对自我的平时作业错题及掌握知识不牢固的地方的总结专栏. 1.大O是一个渐进表示法&#xff0c;不会去表示精确的次数&#xff0c;cpu的运算速度很快&#xff0c;估计精确的没有意义。 2. 此函数有一个循环&#xff0c;但是循环没有被执行n次&#xff0c;i每次都是2倍进…

再不转型为ChatGPT程序员,有遭受降维打击的危险

Open AI在演示GPT-4的时候&#xff0c;有这么一个场景&#xff1a;给一个界面草图&#xff0c;就可以生成网页代码。这个演示非常简单&#xff0c;如果界面原型比较复杂呢&#xff1f;像这样&#xff1a;ChatGPT能不能直接生成HTML, CSS,JavaScript代码&#xff0c;把这个网页给…

【MySQL】表的约束

前言 hi~大家好呀&#xff0c;欢迎来到我的MySQL学习笔记系列~ 继上次数据类型的描述&#xff0c;这篇笔记重点记录DDL-数据定义语言对表的结构中的其他约束条件进行说明&#xff0c;以便让关系型数据库真正的保持完整性。 我的上一篇MySQL笔记~ 【MySQL】表的操作和数据类型_柒…

OpenCV实战之人脸美颜美型(七)——美颜demo

前言 之前我们已经完成了人脸检测、肤色检测、磨皮、美白功能,这一篇文章中我们将尝试利用OpenCV中的滑动条对象,结合窗口制作一个简单的demo。demo中会将上述功能集成进来,并通过滑动条来调整美白、磨皮力度观察其效果,先放一张效果图如下。 滑动条 OpenCV中可通过crea…

【Fluent】Run can not be started until validation issues are resolved.

一、问题背景 因为在fluent中用Discard Data, Replace Mesh选项替换了网格&#xff0c;但是没有抛弃算例设置等参数。 当时我以为网格是完全一样的&#xff0c;便忽略了产生冲突/错误的可能。 之后在calculate的时候&#xff0c;报错&#xff1a;Run can not be started unt…

联盟链是虚构的?没有用的?用FISCO BCOS来展示链委员这件事

前言 当前区块链大都使用的是投票决定这种方法&#xff0c;但是如何使现实中的投票转换到区块链中&#xff0c;如何让举手表决变得更加智能&#xff0c;如何让投票透明、安全、权威&#xff0c;这是区块链的一大设计思路&#xff0c;有很多人觉得联盟链是个梦&#xff0c;是个虚…

分享一个国内可用的免费ChatGPT网站

背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具&#xff0c;近期的热度直接沸腾&#x1f30b;。 作为一个程序员&#xff0c;我也忍不住做了一个基于ChatGPT的网站&#xff0c;免费&#xff01;免登陆&#xff01;&#xff01;国内可直接对话ChatGPT&#xff0c;也…

十年磨一剑,你要的低代码平台在这里

目录低代码平台现状没有创新的“拼凑”&#xff0c;没有好东西ivx平台是什么ivx与其他平台的区别产品思路不同用户不同学习价值不同应用范围不同有无框架限制总结低代码开发平台已成为企业数字化转型和应用程序开发的重要工具。它们提供了一种快速创建和部署应用程序的方法&…

【MySQL】DDL数据库、表的创建与管理

一、基本概念 1、从系统架构的层面来看&#xff0c;数据库从大到小依次是数据库服务器(上面安装了DBMS和数据库)、数据库(也称database或者schema)、数据表、数据表的行与列 二、创建和管理数据库 1、创建数据库 直接创建&#xff1a;CREATE DATABASE 数据库名;(使用默认的…

这篇文章价值很大:股票历史分时成交数据怎么简单获取?【干货】

文章目录前言一、准备二、使用步骤1.引入库2&#xff0c;使用这个API查询历史分时数据&#xff1a;3.查询完整历史分时数据4.其他查询方法参数格式&#xff1a;[(市场代码, 股票代码), ...]参数&#xff1a;市场代码, 股票代码, 文件名, 起始位置, 数量参数&#xff1a;市场代码…