EasyX库使用入门 [学编程做游戏,快速入门](二)

简介: EasyX库使用入门 [学编程做游戏,快速入门]

图像处理函数


在使用图像之前,需要定义一个变量,然后把图片加载进变量中才能进行使用.

平时定义变量都是使用的基础数据类型,比如:int temp;

在使用图像的时候需要使用easyx提供给我们的类型:IMAGE,如:IMAGE.img;

loadimage(IMAGE* pDstImg,LPCTSTR pimgFile,int nWidth=0,int nHeight=0,bool bResize=false);从文件中读取图像

pDstImg            //保存图像的IMAGE对象指针&img

plmgFile            //图片文件名

nWidth=0          //图片的拉伸宽度

nHeight=0         //图片的拉伸高度

bResize=false   //是否调整IMAGE的大小以适应图片

putimage(int dstX,int dstY,IMAGE* pSrcimg,DWORD dwRop=SRCCOPY);在当前设备上绘制指定图像

dstX               //绘制位置的X坐标

dstY               //绘制位置的Y坐标

pSrcImg         //要绘制的IMAGE对象指针&

dwRop=SRCCOPY //三元光栅操作码  

加载图片

   IMAGE img;//定义一个对象
  loadimage(&img, L"./相对路径或者绝对路径",500,400);//加载图片,后面两个调整图片大小
  putimage(0, 0, &img);//输出图片,0,0,相当于坐标

注:相对路径: ./表示当前文件夹下,../当前文件夹的上一级目录

     绝对路径:E:\vs\youxi01

这里我推荐用相对路径,我讲解下操作.

1.点击此文件

image.png

2.将图片加载到你创建的文件下面,我这里是test.cpp

image.png

运行结果:

image.png

鼠标消息函数


  1. 鼠标消息需要使用MOUSEMSG类型,比如:MOUSEMSG.msg;
  2. 然后用MoustHit()判断是否有鼠标消息(左键,右键,中间,移动)
  3. 如果有鼠标消息就可以进行接收鼠标消息了msg=GetMouseMsg();
  4. 鼠标消息主要成员:
  1. uMsg;//当前鼠标消息
  2. x;      //当前鼠标x坐标
  3. y;      //当前鼠标y坐标
  • uMsg可用来判断当前鼠标消息是什么消息
  1. WM_LBUTTONDOWN 鼠标左键消息
  2. WM_RBUTTONDOWN 鼠标右键消息

代码示例:(要把前面写的代码的都放进去)

//鼠标消息
  while (1)//不断地处理事务,需要循环
  {
    if (MouseHit())
    {
      //cleardevice();
      MOUSEMSG msg = GetMouseMsg();//接收鼠标消息
      if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 100)
      {
        printf("我是QK,大家多多关照");
      }
      //消息分发
      switch (msg.uMsg)
      {
      case WM_LBUTTONDOWN:
        outtextxy(400, 400, L"鼠标左键按下");
        printf("坐标(%d,%d)\n", msg.x, msg.y);
        break;
      case WM_RBUTTONDOWN:
        outtextxy(400, 400, L"鼠标右键按下");
        printf("坐标(%d,%d)\n", msg.x, msg.y);
        break;
      }
    }
  }

注:这里>200,<500那段是判断鼠标是否点击在那个矩形区域内,如果是则输出下面的文字,如果不是则输出你所指向的坐标

运行结果:

e467cf110c344866aeb3e5e0a77e8cf7.png

另一种方式:

代码示例:

#include<iostream>
#include<easyx.h>
#include<string>
using namespace std;
void button(int x, int y, int w, int h)
{
  setbkmode(TRANSPARENT);
  setfillcolor(BROWN);
  fillroundrect(x, y, x + w, y + h, 10, 10);
  settextstyle(30, 0, L"黑体");
  wchar_t  text[] = L"按钮";
  int tx = x + (w - textwidth(text)) / 2;
  int ty = y + (h - textheight(text)) / 2;
  outtextxy(tx, ty, text);
}
int main()
{
  initgraph(640, 480, EW_SHOWCONSOLE);
  button(50,50,150,50);
  while (1)//不断地处理事务,需要循环
  {
    if (MouseHit())
    {
      //cleardevice();
      MOUSEMSG msg = GetMouseMsg();//接收鼠标消息
      //消息分发
        switch (msg.uMsg)
        {
        case WM_LBUTTONDOWN:
          if (msg.x >= 50 && msg.x <= 50 + 150 && msg.y >= 50 && msg.y <= 50 + 50)
          {
            printf("我是按钮,我被点击了\n");
          }
          break;
        default:
          break;
        }
    }
  }
  getchar();
  return 0;
}

运行结果

image.png

键盘消息函数


image.png

代码示例:

//鼠标消息
  int x = 0, y = 0;
  while (1)//不断地处理事务,需要循环
  {
    cleardevice();
    setfillcolor(BROWN);
    fillcircle(x, y, 20);
    char key = _getch();
    printf("%d,%c\n", key, key);
    switch (key)
    {
    case 72://上键
    case 'w':
    case 'W':
      y-=5;
      printf("上键\n");
      break;
    case 80://下键
    case 's':
    case 'S':
      y+=5;
      printf("下键\n");
      break;
    case 75:
    case'a'://左键
    case'A':
      x-=5;
      printf("左键\n");
      break;
    case 77://右键
    case 'd':
    case 'D':
      x+=5;
      printf("右键\n");
      break;
    }

运行结果:

image.png

image.png

//双缓冲绘图,需要放在绘图代码之前和之后
  BeginBatchDraw();
......
     EndBatchDraw();

另一种键盘操作方式:

        if (GetAsyncKeyState(VK_UP))//上键
    {
      y -= 5;
    }
    if (GetAsyncKeyState(VK_DOWN))//下键
    {
      y += 5;
    }
    if (GetAsyncKeyState(VK_LEFT))//左键
    {
      x -= 5;
    }
    if (GetAsyncKeyState(VK_RIGHT))//右键
    {
      x += 5;
    }

两种对比:后一种更好一点,不仅可以上下左右走,还可以斜着走

播放音乐


image.png

代码示例:

#include<iostream>
#include<conio.h>//使用getch() 
#include<graphics.h>
#include<mmsystem.h>//包含多媒体设备接口头文件
#pragma comment(lib,"winmm.lib")//加载静态库
//播放音乐
void BGM()
{
  //打开音乐,播放音乐,repeat重复播放
  mciSendString(L"open ./15161.mp3",0,0,0);
  mciSendString(L"play ./15161.mp3",0,0,0);
}

修改窗口标题


image.png

代码示例:

void change()
{
  //获取窗口句柄
  HWND hnd = GetHWnd();
  //设置窗口标题
  SetWindowText(hnd, L"c语言plus,欢迎关注");
  //弹出窗口,提示用户操作
  int isok=MessageBox(hnd, L"恭喜你成功过关", L"提示", MB_OKCANCEL);
  if (isok == IDOK)
  {
    printf("你点击了OK");
  }
  else if (IDCANCEL == isok)
  {
    printf("你点击了取消");
  }
}

运行结果:

image.png

image.png

相关文章
|
存储 缓存 编解码
Web端短视频编辑器的设计与实现 - 像做PPT一样做视频
对于视频的生产,一般的方案是交由专业机构去创作,但这将花费很多预算,如果我们能提供一个工具,基于知识的通用结构沉淀一些视频模版,让用户快速创作出视频知识内容岂不美哉?让想法再奔放些,如果我们能直接从知识库中抽取结构化的知识内容直接生成视频或是半成品视频,用户只需要稍作调整就能发布,这想想就很酷吧?是的,小蜜视频创作工具我就是想做这样一件事情。本篇分享来自阿里巴巴前端工程师李志成(敦固)在第十六届D2前端技术论坛的分享。
3910 0
Web端短视频编辑器的设计与实现 - 像做PPT一样做视频
|
Linux C++
通过C/C++代码设置Linux系统时间的方法与实例
Linux系统中的时间设置是关键任务之一,涉及日志记录、数据同步等众多应用场景。本文将详细介绍如何通过C/C++代码设置Linux系统时间,包括调用系统调用和使用第三方库,同时提供实例演示。
2995 2
|
3月前
|
Linux Go 虚拟化
docker
Docker是基于Go语言的开源容器技术,实现“一次镜像,处处运行”。它通过容器化隔离应用,对比传统虚拟机更轻量、启动更快。核心组件包括镜像、容器和仓库,利用宿主机内核高效运行,广泛应用于开发、部署与运维全流程。
|
存储 传感器 定位技术
【NI Multisim 14.0原理图设计基础——元器件分类】
一、元器件分类 NI Multisim 14.0不仅提供了数量众多的元器件符号图形,而且还设计了元器件的模型,并分门类地存储在各个元器件库中。下面按照元器件库的命名不同详细介绍常用的元器件。 1.电源库 单击“元器件”工具栏中的“放置源” 按钮,Sources 库的“系列”栏包括以下几种,如图所示: 电源(POWER-SOURCES):包括常用的交直流电源、数字地、地线、星形或三角形连接的三相电源、VCC、VDD、VEE、VSS 电压源,其元器件”栏下内容如图所示: 电压信号源(SIGNAL-VOLTAG…):包括交流电压、时钟电压、脉冲电压、指数电压、FM、AM等多种形式的电压信号,其“元器
19893 3
【NI Multisim 14.0原理图设计基础——元器件分类】
|
7月前
|
人工智能 自然语言处理 搜索推荐
《生成式引擎优化(GEO)服务商选择指南》:让AI大模型主动推荐你
GEO(生成式引擎优化)是针对AI生成式搜索引擎的优化策略,旨在让企业信息在AI回答中优先呈现,实现“无点击曝光”。与传统SEO不同,GEO强调语义理解、权威内容和结构化数据,提升品牌在AI推荐中的可见性与可信度。企业需关注GEO服务商的技术实力、行业匹配度、服务流程完整性等维度,确保优化效果。
1818 1
|
中间件 Linux vr&ar
Centos7升级Glibc
Centos7升级Glibc
2132 6
|
网络协议 5G 网络虚拟化
WiFI网速慢的原因都在这里了,3招教你WiFi慢的烦恼!
WiFI网速慢的原因都在这里了,3招教你WiFi慢的烦恼!
1719 2
|
API C语言 图形学
EasyX图形库学习(一、窗口创建函数initgraph、背景颜色设置setbkcolor、图形绘制函数)
EasyX图形库学习(一、窗口创建函数initgraph、背景颜色设置setbkcolor、图形绘制函数)
|
Windows
Multisim 14 常见电子仪器的使用和Multisim的使用
Multisim 14 常见电子仪器的使用和Multisim的使用
608 1
|
存储 弹性计算 监控
nacos常见问题之nacos启动后马上停止如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。

热门文章

最新文章