从零开发游戏需要学习的c#模块,第十六章(安装 MonoGame 并创建第一个窗口)

关于c#的基本内容我们差不多学完了,接下来我们来学习安装monogame并创建第一个窗口。

第一步:安装 MonoGame 模板

  1. 打开 Visual Studio Installer(开始菜单搜一下就有)

  2. 找到你安装的 Visual Studio 版本,点击 修改

  3. 在右侧找到 "游戏开发" 或直接搜 "游戏"

  4. 勾选 "使用 C# 的游戏开发"(或者c++的游戏开发) 这个工作负荷

  5. 点击右下角 修改,等待安装完成

安装完成后,打开 Visual Studio。

第二步:创建第一个 MonoGame 项目

  1. 在 Visual Studio 里点击 创建新项目

  2. 在搜索框里输入 MonoGame

  3. 选择 MonoGame Cross-Platform Desktop Application(不是 Android/iOS 的)

  4. 项目名称写 MyFirst2DGame ,选好位置,点 创建

如果无法搜索到,请使用备用方案

用命令行装模板(备选方案) :如果VS里搜不到那个插件,或者安装了还是没用,可以打开命令行(CMD或PowerShell),输入下面这行代码然后回车,它会直接把模板文件安装到你的电脑里:
dotnet new install MonoGame.Templates.CSharp

第三步:了解项目结构

创建完后你会看到以下文件:

文件 作用
Game1.cs 游戏主类,核心逻辑都在这里
Program.cs 启动入口(和之前一样)
Content 文件夹 存放图片、音效、字体等资源

第四步:看 Game1.cs 的结构

打开 Game1.cs,你会看到这些你非常熟悉的东西:

protected override void Initialize()

{

// 初始化游戏数据(你之前的 Start())

base.Initialize();

}

protected override void LoadContent()

{

// 加载图片、音效(你之前的 LoadGame())

}

protected override void Update(GameTime gameTime)

{

// 每帧更新逻辑(你之前的 Update())

// gameTime 里有 deltaTime,相当于你的 Thread.Sleep(30)

}

protected override void Draw(GameTime gameTime)

{

// 每帧渲染画面(你之前的 Render())

}

第五步:画出第一个东西------红色方块

在game里替换

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Graphics;

using Microsoft.Xna.Framework.Input;

namespace MyFirst2DGame

{

public class Game1 : Game

{

private GraphicsDeviceManager _graphics;

private SpriteBatch _spriteBatch;

// 玩家相关

private Texture2D playerTexture; // 玩家的纹理(图片)

private Vector2 playerPosition; // 玩家的位置

private int playerSpeed = 200; // 移动速度

public Game1()

{

_graphics = new GraphicsDeviceManager(this);

Content.RootDirectory = "Content";

IsMouseVisible = true;

}

protected override void Initialize()

{

// 设置窗口大小

_graphics.PreferredBackBufferWidth = 800;

_graphics.PreferredBackBufferHeight = 600;

_graphics.ApplyChanges();

// 玩家初始位置:屏幕中央

playerPosition = new Vector2(400, 300);

base.Initialize();

}

protected override void LoadContent()

{

_spriteBatch = new SpriteBatch(GraphicsDevice);

// ★ 创建一个 1x1 的白色纹理,然后染色成红色

playerTexture = new Texture2D(GraphicsDevice, 1, 1);

playerTexture.SetData(new\[\] { Color.White });

}

protected override void Update(GameTime gameTime)

{

// 获取键盘状态

KeyboardState keyboard = Keyboard.GetState();

// 移动速度 * 帧时间 = 每秒移动固定距离

float speed = playerSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;

if (keyboard.IsKeyDown(Keys.W) || keyboard.IsKeyDown(Keys.Up))

playerPosition.Y -= speed;

if (keyboard.IsKeyDown(Keys.S) || keyboard.IsKeyDown(Keys.Down))

playerPosition.Y += speed;

if (keyboard.IsKeyDown(Keys.A) || keyboard.IsKeyDown(Keys.Left))

playerPosition.X -= speed;

if (keyboard.IsKeyDown(Keys.D) || keyboard.IsKeyDown(Keys.Right))

playerPosition.X += speed;

// ESC 退出

if (keyboard.IsKeyDown(Keys.Escape))

Exit();

base.Update(gameTime);

}

protected override void Draw(GameTime gameTime)

{

// 清屏为深蓝色

GraphicsDevice.Clear(Color.CornflowerBlue);

// 开始画东西

_spriteBatch.Begin();

// ★ 画一个 50x50 的红色方块代表玩家

Rectangle playerRect = new Rectangle(

(int)playerPosition.X - 25,

(int)playerPosition.Y - 25,

50, 50

);

_spriteBatch.Draw(playerTexture, playerRect, Color.Red);

_spriteBatch.End();

base.Draw(gameTime);

}

}

}

第六步:运行

F5,你会看到:

  • 一个 800x600 的深蓝色窗口

  • 一个 50x50 的红色方块在屏幕中央

  • WASD方向键移动方块

  • ESC 退出

注意:program改为

cs 复制代码
using var myGame = new MY_FIRST_GAME.Game1();
myGame.Run();

保证程序能够正常运行

好了,今天的课程到此结束,关注我,下期更精彩

相关推荐
V搜xhliang02464 小时前
AI智能体的数据安全与合规实践
人工智能·学习·数据分析·自动化·ai编程
无敌的牛5 小时前
redis学习过程
数据库·redis·学习
z落落6 小时前
C#WinForm 窗体切换与窗体传值(登录跳转案例)+WinForm 窗体传值(从上往下传、从下往上传)
开发语言·windows·c#
旅僧7 小时前
Π环境部署(运行 且 无理论讲解)
学习
jushi89997 小时前
Lucas Chess R国际象棋、中国象棋、日本将棋、五子棋训练学习工具游戏软件
学习
自传.7 小时前
尚硅谷 Vibe Coding|第一章 AI 编程基础理论 学习笔记
笔记·学习·尚硅谷·vibe coding
吃好睡好便好8 小时前
改变时间轴的跨度
学习·生活
fox_lht8 小时前
15.3.改进我们之前的输入、输出项目
开发语言·后端·学习·rust
chase。8 小时前
【学习笔记】SimpleVLA-RL:通过强化学习扩展 VLA 训练
笔记·学习
众乐乐_20089 小时前
用claude Fabel5一句话生成的游戏:三国天命(有资源包)
游戏