使用适用于 .NET 2.0 的 AllegNet 库创建游戏






3.32/5 (9投票s)
2005年12月9日
2分钟阅读

53818

1745
一篇关于如何使用 AllegNet 库以 .NET 2.0 框架的托管语言编写游戏的文章。
目录
引言
AllegNet 是一个基于著名的 C++ Allegro 库的游戏编程库。 最初,AllegNet 只是一个包装器,但由于需要在托管环境中处理大量对象,我通过重新创建一组类、结构和函数来更改它,以便拥有完全托管的对象来使用。
使用 AllegNet,您可以创建游戏和多媒体应用程序,并在用户的 PC 上支持 DirectX。 AllegNet 提供与 Allegro 库 4.2.0 相同的功能,但进行了一些修改,以带来 .NET Framework 2.0 的强大功能。
AllegNet 是一个完全托管的库,因此您可以使用 C#、VB.NET、C++.NET 和 J#。 Examples 部分中的所有示例都提供 C#、VB.NET,有时也提供 J#。
本文将介绍如何开始使用 AllegNet 库创建支持 DirectX 的多媒体应用程序。
必备组件
为了安装和运行一些代码,您必须检查两点
- 文件msvcr80.dll 必须存在于 %windir%\system32 目录中。
- 文件 alleg42.dll 必须存在于 %windir%\system32 目录中。
这两个文件可以在这里找到。
创建您的第一个 AllegNet 兼容程序
打开 Visual Studio Express,并创建一个新的控制台应用程序项目。 接下来,添加对 AllegNet 库的引用。 您可以在这里下载一个版本。
为了轻松完全访问该库,您可以从 AllegNet.API
类继承主类。
//C# version
//Don't forget to add
using using AllegNet;
class MainClass : API
{
//Code here...
}
'VB version
'Don't forget to add imports
imports AllegNet
Public Class MainClass inherits API
'Code here...
End Class
您必须在使用库之前对其进行初始化。 Allegro_Init
函数可以做到这一点。 您还需要添加键盘事件。
//C# Version
if (Allegro_init() != 0)
return 1;
Install_keyboard();
'VB version
If Allegro_init() <> 0 Then
Return 1
End If
Install_keyboard()
使用代码
现在,您将创建一个函数,该函数将显示一种渐变条,显示屏幕的颜色深度。
//C# Version
public static void TestColor(COLOR_DEPTH colordepth)
{
int x;
//You need a PALETTE object to deal with 8bits color depth
PALETTE pal = new PALETTE();
/* set the screen mode */
API.Set_color_depth(colordepth);
'VB Version
Public Shared Sub TestColor(ByVal colordepth As COLOR_DEPTH)
Dim x As Integer Dim pal As PALETTE = New PALETTE()
'set the screen mode API.Set_color_depth(colordepth)
接下来,您将创建一个伪 332 调色板来模拟 8 位深度的渐变调色板。 您将创建一个 640*480 BITMAP
缓冲区并将屏幕设置为 640*480 分辨率,并将颜色深度设置为颜色深度变量。
//C# Version
BITMAP Buffer = API.Create_bitmap(SCREEN_RESOLUTIONS.SIZE_640_480);
if (API.Set_gfx_mode(GFX_MODES.GFX_DIRECTX_WIN,
SCREEN_RESOLUTIONS.SIZE_640_480) != 0)
return;
Generate_332_palette(ref pal); Set_palette(pal);
API.Clear_to_color(Buffer,API.Makecol(0,0,0));
'VB Version
Dim Buffer As BITMAP = _
API.Create_bitmap(SCREEN_RESOLUTIONS.SIZE_640_480)
If API.Set_gfx_mode(GFX_MODES.GFX_AUTODETECT_FULLSCREEN, _
SCREEN_RESOLUTIONS.SIZE_640_480) <> 0 Then
Return
End If
Generate_332_palette(pal)
Set_palette(pal)
API.Clear_to_color(Buffer, API.Makecol(0, 0, 0))
现在您可以在屏幕的左侧绘制一些彩色字符串。 您可以使用 Textout_ex
函数和缓冲区,以及默认字体对象。
//C# Version
Textout_ex(Buffer, Font, ((int)colordepth).ToString() +
" bit color...", 0, 0,
Makecol(255, 255, 255), -1);
Textout_ex(Buffer, Font, "Red", 32, 80,
Makecol(255, 0, 0), -1);
Textout_ex(Buffer, Font, "Green", 32, 100,
Makecol(0, 255, 0), -1);
Textout_ex(Buffer, Font, "Blue", 32, 120,
Makecol(0, 0, 255), -1);
Textout_ex(Buffer, Font, "Yellow", 32, 140,
Makecol(255, 255, 0), -1);
Textout_ex(Buffer, Font, "Cyan", 32, 160,
Makecol(0, 255, 255), -1);
Textout_ex(Buffer, Font, "Magenta", 32, 180,
Makecol(255, 0, 255), -1);
Textout_ex(Buffer, Font, "Grey", 32, 200,
Makecol(128, 128, 128), -1);
'VB Version
Textout_ex(Buffer, Font, _
(CType(colordepth, Integer)).ToString() + _
" bit color...", 0, 0,
Makecol(255, 255, 255), -1)
Textout_ex(Buffer, Font, "Red", 32, 80, Makecol(255, 0, 0), -1)
Textout_ex(Buffer, Font, "Green", 32, 100, Makecol(0, 255, 0), -1)
Textout_ex(Buffer, Font, "Blue", 32, 120, Makecol(0, 0, 255), -1)
Textout_ex(Buffer, Font, "Yellow", 32, 140, Makecol(255, 255, 0), -1)
Textout_ex(Buffer, Font, "Cyan", 32, 160, _
Makecol(0, 255, 255), -1)
Textout_ex(Buffer, Font, "Magenta", 32, _
180, Makecol(255, 0, 255), -1)
Textout_ex(Buffer, Font, "Grey", 32, 200, _
Makecol(128, 128, 128), -1)
现在您可以将渐变色条绘制到缓冲区中。
//C# Version
/* or we could draw some nice smooth color gradients... */
for (x = 0; x < 256; x++)
{
Vline(Buffer, 192 + x, 112, 176, Makecol(x, 0, 0));
Vline(Buffer, 192 + x, 208, 272, Makecol(0, x, 0));
Vline(Buffer, 192 + x, 304, 368, Makecol(0, 0, x));
}
Textout_centre_ex(Buffer, Font, "<press a key>",
Buffer.w / 2, Buffer.h - 16,
Makecol(255, 255, 255), -1);
'VB Version
'or we could draw some nice smooth color gradients...
For x = 0 To 256 - 1 Step x + 1
Vline(Buffer, 192 + x, 112, 176, Makecol(x, 0, 0))
Vline(Buffer, 192 + x, 208, 272, Makecol(0, x, 0))
Vline(Buffer, 192 + x, 304, 368, Makecol(0, 0, x))
Next
Textout_centre_ex(Buffer, Font,
"<press a key>",
Buffer.w / 2, Buffer.h - 16, Makecol(255, 255, 255), -1)
现在,要完成,您将在屏幕上绘制结果并等待用户按下一个键。 在主函数中,您只需为您要测试的每个深度调用该函数。
//C# Version
Blit(Buffer,Screen,0,0,0,0,Screen.w,Screen.h);
Readkey();
//And in the main function public static int Main()
{
if (Allegro_init() != 0)
return 1;
Install_keyboard();
/* try each of the possible possible color depths... */
TestColor(COLOR_DEPTH.BITS_8);
TestColor(COLOR_DEPTH.BITS_15);
TestColor(COLOR_DEPTH.BITS_16);
TestColor(COLOR_DEPTH.BITS_24);
TestColor(COLOR_DEPTH.BITS_32);
return 0;
}
'VB Version
Blit(Buffer, Screen, 0, 0, 0, 0, Screen.w, Screen.h)
Readkey()
'And in the main function
Public Shared Function Main() As Integer
If Allegro_init() <> 0 Then
Return 1
End If
Install_keyboard()
'Try each of the possible possible color depths...
TestColor(COLOR_DEPTH.BITS_8)
TestColor(COLOR_DEPTH.BITS_15)
TestColor(COLOR_DEPTH.BITS_16)
TestColor(COLOR_DEPTH.BITS_24)
TestColor(COLOR_DEPTH.BITS_32)
Return 0
End Function
历史
- 2005 年 12 月 1 日 - 第一个在线版本。