网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月23日漏签0天
图形编程forc吧 关注:14贴子:296
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 4回复贴,共1页
<<返回图形编程forc吧
>0< 加载中...

[教程] DxLib 超简易入门

  • 取消只看楼主
  • 收藏

  • 回复
  • aaaaaaa421
  • 随机贪心
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
(测试是否能发出来)
0. 引言
DxLib 是一个日本人开发的库,光看名字可能以为这是一个辅助使用 DirectX 的库,但它实际上涵盖了许多方面的内容,如图像、声音、归档文件、网络、模型等,功能十分全面,适合新手使用。其官网地址为 https://dxlib.xsrv.jp/ 。据官网介绍,其支持的平台也很多,例如 Windows、Android 等。
1. 下载 DxLib
点击官网的 "DXライブラリのダウンロード",转到下载页面。这里可以下载对应平台用的库文件,如使用 VS 就选择 VisualStudio,MinGW 就使用 Gnu C++。这篇文章会以 MinGW 举例。下载后,将解压的文件放到一个地方,便于日后使用。(注:在 ./help/dxfunc.html 中,可以找到 DxLib 的函数帮助手册,不过是全日文的,可以借助页面翻译工具阅读。)
2. 配置 DxLib
在 "プロジェクトに追加すべきファイル_GCC(MinGW)用" 中,可以看到一些以版本号为名的文件夹。这里我用的是 gcc 8.2.0,那么就将 "8_2_0" 这个文件夹提出来使用。为了方便日后编译,可以事先写一个 compile.bat 批处理(Makefile 也可),将配置信息写在里面。参考内容如下:(DxLibPath 是 DxLib 库的路径)
@璐村惂鐢ㄦ埛_000076K馃惥 off
for /F "usebackq delims=" %%A in (`echo %1 ^| sed 's/.cpp/.exe/'`) do g++ -IDxLibPath %1 -o %%A -mwindows -LDxLibPath -lDxLib -lDxUseCLib -lvorbis_static -lvorbisfile_static -logg_static -lopusfile -lopus -ljpeg -lpng -lzlib -ltheora_static -lbulletdynamics -lbulletcollision -lbulletmath -lcelt -ltiff -lDxDrawFunc -lsilk_common
pause
3. 编写第一个 DxLib 程序
编写一个程序是从头文件开始的,这里我们需要 #include <DxLib.h>,以便使用 DxLib 的函数。这里提示一下,DxLib 类似于 easyx,是一个 C++ 库,但提供的是 C 风格接口,因此文件后缀名需要是 .cpp。这里我预先准备了一段代码,其中简单地使用了几个函数:
#include <DxLib.h>
int main(void) {
SetOutApplicationLogValidFlag(FALSE); // 禁止输出日志到 Log.txt
ChangeWindowMode(TRUE); // 改变为窗口模式
if (DxLib_Init() == -1) // 初始化 DxLib
return -1;
SetMainWindowText("Hello DxLib!"); // 设置窗口标题
printfDx("Hello %s!\n", "DxLib"); // 在 DxLib 屏幕上打印 Hello DxLib!
DrawPixel(320, 240, GetColor(255, 0, 0)); // 在屏幕中央画一个红色点
WaitKey(); // 等待按键输入
DxLib_End(); // 反初始化 DxLib
}
在命令提示符里执行 compile.bat <文件名>.cpp,会生成一个对应名字的 exe 文件。打开它,你应当能看到程序窗口里的 Hello DxLib! 与屏幕中央的一个红点。


  • aaaaaaa421
  • 随机贪心
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
4. [Course 1] Hello DxLib Console!
在开始第一节课之前,首先提醒:这篇文章是无法将所有可能使用到的函数都列举出来的,但我会尽可能说明一些较为有用的函数,剩下的强烈建议自己去翻帮助文件。
这节课和图形其实并没有大的关系,但是这节课里用到的函数有时能很方便地帮助你进行调试,况且控制台是我们熟悉的界面,何不从这里开始呢?
下面的示例代码的效果是:显示一个类似控制台的界面,要求用户输入文字,程序会回显文字。输入 ESC 可以中断输入,并且要求用户再按一个键进行清屏。清屏后一秒,程序会自动退出。
// 注: 代码为简化, 未进行错误处理, 实际使用时应当处理
#include <DxLib.h>
int main(void) {
char chInput;
SetOutApplicationLogValidFlag(FALSE);
ChangeWindowMode(TRUE);
DxLib_Init();
printfDx("Hello world!\n");
printfDx("Now try to input some text below(no backspace, use ESC to stop):\n");
// GetInputCharWait: 从缓冲里获取一个字符, 若没有则堵塞, 对于控制字符需要特别处理
// 参数 1: int, 决定是否要从缓冲里移除读入的当前字符
for (chInput = GetInputCharWait(TRUE); chInput != CTRL_CODE_ESC; chInput = GetInputCharWait(TRUE))
printfDx("%c", chInput == CTRL_CODE_CR ? '\n' : chInput);
printfDx("\nNow type any key to clear the screen.");
WaitKey();
// clsDx: 清除 printfDx 生成的文字
clsDx();
printfDx("Now we are going to exit the program.");
// ClearDrawScreen: 清除当前绘制的屏幕
ClearDrawScreen();
// ScreenFlip: 交换前后缓冲屏幕, 这里可以促使 DxLib 渲染 printfDx 输出的文字
ScreenFlip();
// WaitTimer: 休眠一段时间
// 参数 1: 欲休眠的毫秒数
WaitTimer(1000);
DxLib_End();
}
注:只建议用 printfDx 输出 ASCII 字符,此函数不被官方推荐作为主要的文本渲染方式,一方面是效率低,另一方面对英文以外的语种不一定会有良好支持。


2025-05-23 02:53:12
广告
  • aaaaaaa421
  • 随机贪心
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
5. [Course 2] Hello Simple Graphics!
这节课,我们将初步了解如何用 DxLib 绘制简单的图形。效果见代码注释。
// 注: 代码为简化, 未进行错误处理, 实际使用时应当处理
// 注: 大多数 DxLib 函数会在发生错误时返回 -1, 可以借此进行错误处理
#include <DxLib.h>
int main(void) {
unsigned int nClrRed, nClrBlue, nClrGreen, nClrWhite, nClrBlack;
SetOutApplicationLogValidFlag(FALSE);
ChangeWindowMode(TRUE);
// SetUseCharCodeFormat: 设置 DxLib 使用的字符编码
// 参数 1: 欲使用的字符编码
SetUseCharCodeFormat(DX_CHARCODEFORMAT_UTF8); // 设置编码为 UTF-8
// SetGraphMode: 设置图形模式
// 参数 1: 屏幕的新宽度
// 参数 2: 屏幕的新高度
// 参数 3: 新颜色深度
SetGraphMode(800, 600, 32);
DxLib_Init();
// 在当前的图形模式下获取一些颜色
nClrRed = GetColor(255, 0, 0);
nClrGreen = GetColor(0, 255, 0);
nClrBlue = GetColor(0, 0, 255);
nClrWhite = GetColor(255, 255, 255);
nClrBlack = GetColor(0, 0, 0);
// SetDrawScreen: 设置接下来图形的目标绘制屏幕
// 参数 1: 目标屏幕句柄, 可使用预定义值: DX_SCREEN_FRONT(前屏幕), DX_SCREEN_BACK(后屏幕)
SetDrawScreen(DX_SCREEN_BACK); // 使用后备屏幕, 若不使用, 绘图时可能在部分机器上发生闪烁现象
// ChangeFont: 改变字体
// 参数 1: 字体名
ChangeFont("Microsoft YaHei"); // 改变字体为微软雅黑
// ChangeFontType: 改变字体
// 参数 1: 字体类型
ChangeFontType(DX_FONTTYPE_ANTIALIASING_EDGE_8X8); // 设置字体为 8x8 抗锯齿, 并且描边
SetMainWindowText("DxLib - Hello Simple Graphics! - Scene 1 / 2");
{ // 1. 绘制简单的几何图形
// 1) DrawPixel: 画一个点
// 参数 1: x 坐标
// 参数 2: y 坐标
// 参数 3: 颜色
for (int x = 10; x < 80; x++) {
for (int y = 10; y < 160; y++)
DrawPixel(x, y, nClrRed);
}
// 2) DrawLine: 画一条线 (在名称后加上 AA 代表使用的是抗锯齿版本, 并且坐标可使用浮点数, 后续函数同)
// 参数 1: 起始点的 x 坐标
// 参数 2: 起始点的 y 坐标
// 参数 3: 终止点的 x 坐标
// 参数 4: 终止点的 y 坐标
// 参数 5: 颜色
DrawLine(5, 5, 110, 170, nClrGreen);
DrawLineAA(5, 20, 110, 185, nClrGreen);
// 3) DrawBox: 画一个框
// 参数 1: 起始点的 x 坐标
// 参数 2: 起始点的 y 坐标
// 参数 3: 终止点的 x 坐标
// 参数 4: 终止点的 y 坐标
// 参数 5: 颜色
// 参数 6: 绘制参数, TRUE: 绘制实心框, FALSE: 绘制空心框
DrawBox(10, 200, 80, 340, nClrBlue, TRUE);
DrawBox(5, 195, 85, 345, nClrBlue, FALSE);
// 4) DrawCircle: 画一个圆 (此函数的抗锯齿版本在第 3 个参数后添加了一个参数, 用于控制顶点数, 越多效果越好, 同时也越慢)
// 参数 1: 圆心的 x 坐标
// 参数 2: 圆心的 y 坐标
// 参数 3: 圆的半径
// 参数 4: 颜色
// 参数 5: 绘制参数, TRUE: 绘制实心圆, FALSE: 绘制空心圆
DrawCircle(60, 420, 45, nClrRed, TRUE);
DrawCircle(60, 420, 50, nClrRed, FALSE);
// 5) DrawOval: 画一个椭圆 (此函数的抗锯齿版本在第 4 个参数后添加了一个参数, 作用同 DrawCircle)
// 参数 1: 圆心的 x 坐标
// 参数 2: 圆心的 y 坐标
// 参数 3: 圆的 x 半径
// 参数 4: 圆的 y 半径
// 参数 5: 颜色
// 参数 6: 绘制参数, TRUE: 绘制实心椭圆, FALSE: 绘制空心椭圆
DrawOval(160, 90, 40, 80, nClrGreen, TRUE);
DrawOval(160, 90, 45, 85, nClrGreen, FALSE);
// 6) DrawTriangle: 画一个三角形
// 参数 1: 第一个顶点的 x 坐标
// 参数 2: 第一个顶点的 y 坐标
// 参数 3: 第二个顶点的 x 坐标
// 参数 4: 第二个顶点的 y 坐标
// 参数 5: 第三个顶点的 x 坐标
// 参数 6: 第三个顶点的 y 坐标
// 参数 7: 颜色
// 参数 8: 绘制参数, TRUE: 绘制实心三角形, FALSE: 绘制空心三角形
DrawTriangleAA(120, 180, 200, 200, 130, 320, nClrRed, FALSE);
// 7) DrawString: 画一个字符串 (其同类 DrawFormatString 可绘制格式字符串, 但注意其参数 3 和 参数 4 交换了)
// 参数 1: 字符串的 x 坐标
// 参数 2: 字符串的 y 坐标
// 参数 3: 字符串
// 参数 4: 字符串填充颜色
// (参数 5: 字符串描边颜色)
DrawString(220, 10, "Hello world!", nClrWhite, nClrBlack);
DrawString(220, 40, "\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x8C\xE4\xB8\x96\xE7\x95\x8C\xEF\xBC\x81", nClrWhite); // 硬编码为 UTF-8 的 "你好,世界!"
}
ScreenFlip(); // 刷新画面
ClearDrawScreen(); // 清空后备屏幕
WaitKey();
SetMainWindowText("DxLib - Hello Simple Graphics! - Scene 2 / 2");
{ // 2. 绘制一些图片 (须提前准备 test.png)
int nGraphHandle, nWidth, nHeight;
// LoadGraph: 加载一张图片为图形句柄
// 参数 1: 图片名称
nGraphHandle = LoadGraph("test.png");
// GetGraphSize: 获取图形的维度信息
// 参数 1: 图形句柄
// 参数 2: 指向 int 的指针, 用于保存长度信息
// 参数 3: 指向 int 的指针, 用于保存高度信息
GetGraphSize(nGraphHandle, &nWidth, &nHeight);
// DrawExtendGraph: 绘制一个图形 (不缩放版本为 DrawGraph, 少了参数 3 和参数 4)
// 参数 1: 起始点的 x 坐标
// 参数 2: 起始点的 y 坐标
// 参数 3: 终止点的 x 坐标
// 参数 4: 终止点的 y 坐标
// 参数 5: 图形句柄
// 参数 6: 是否启用透明绘制 (若为 TRUE, DxLib 优先使用图片的 Alpha 通道, 若没有则使用 SetTransColor 设置的透明色)
DrawExtendGraph(0, 0, 800, 600, nGraphHandle, FALSE);
// DrawRotaGraph: 绘制一张旋转的图形
// 参数 1: 中心点的 x 坐标
// 参数 2: 中心点的 y 坐标
// 参数 3: 放大倍率 (1 为不变, 0.5 为 1/2 倍)
// 参数 4: 旋转角度 (弧度制)
// 参数 5: 图形句柄
// 参数 6: 是否启用透明绘制
// 参数 7: 是否左右翻转图形 (TRUE: 左右翻转, FALSE: 不翻转)
DrawRotaGraph(400, 300, 0.2, 3.1415926 / 6, nGraphHandle, FALSE, FALSE);
DrawFormatString(0, 0, nClrWhite, "Image dimension: %dx%d", nWidth, nHeight);
// DeleteGraph: 删除一个图形
// 参数 1: 图形句柄
DeleteGraph(nGraphHandle);
}
ScreenFlip();
WaitKey();
DxLib_End();
}
预览图片:



  • aaaaaaa421
  • 随机贪心
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
补一下 Visual Studio 使用 DxLib 的方法,以便于有需要的人使用:
配置 DxLib (Visual Studio) (2021.8.17 追加)
如果你偏向于使用 Visual Studio 进行开发的话,则可以略过上面一节,阅读这节,反之亦然。目前 DxLib 已经更新到了 3.22c,支持最新的 VS2019,我们也将基于 VS2019 进行举例。首先解压下载得到的压缩包,在 “./DxLib_VC/サンプルプログラム実行用フォルダ” 中有一份官方提供的 “VisualStudio_2019用.sln” 样例解决方案文件,双击它即可开始编写代码,无需额外配置。如果你需要自定义配置,可以将 “プロジェクトに追加すべきファイル_VC用” 文件夹重命名并移动到自己喜欢的位置(如 C:\VS_libraries\DxLib),然后新建一个 “Windows 桌面向导” 项目(选择 “桌面应用程序” 并勾选 “空项目”)。右键 “源文件”,选中 “添加/新建项”,添加一个 “C++ 文件”,在文件中编写代码(请注意,由于 DxLib 默认使用 TCHAR,你需要将所有涉及 DxLib API 的字符串都用 _T 包裹,如 _T("hello");此外,你需要将 main 修改为 WinMain)。完成后,右击 DxLibTest 项目,选中 “属性”,展开 “C/C++”,选中 “常规”,在 “附加包含目录” 中添加你之前移动的文件夹,然后展开 “链接器”,选中 “常规”,在 “附加库目录” 中添加你之前移动的文件夹,最后点击 “确定” 保存设置。此时你的程序已经可以正常编译运行了。


  • aaaaaaa421
  • 随机贪心
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
LoadDivGraph 简单演示:


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 4回复贴,共1页
<<返回图形编程forc吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示