从零开发游戏需要学习的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();

保证程序能够正常运行

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

相关推荐
半亩码田1 分钟前
C#转Python第5.1篇:异步编程:asyncio vs async/await,语法相似但机制不同
开发语言·python·c#
andrsted2 分钟前
练题簿在线免费刷题:Excel、CSV 批量导题与章节整理,把现成表格变成日常题库
学习·微信小程序·小程序·刷题·在线刷题
ab12376826 分钟前
MQTT笔记
java·笔记·mqtt·学习
阿华田51229 分钟前
Java 类加载冲突实战:解决 is not an instance of
c#·linq
承渊政道44 分钟前
Linux网络学习【TCP Socket编程实战:connect的断线重连与客户端访问Linux验证】
linux·网络·学习·ubuntu·tcp·socket编程
qq_408606861 小时前
确界的倒数性质证明
学习·算法
sunoo-2291 小时前
嵌入式Linux驱动学习笔记(第3-6天):从misc封装、platform总线到设备树、中断与单总线外设实战
linux·arm开发·驱动开发·笔记·单片机·学习
一木 之林1 小时前
Agent智能体学习总结:从一次调用到模型自主规划、工具调用与 ReAct 循环的项目实战-6/6
前端·人工智能·学习·react.js
来包番茄沙司1 小时前
【网盘资源分享】2026新版尚硅谷AI Agent智能体极速版|全套课程资料+面经
人工智能·学习
每天题库1 小时前
塔式起重机安装拆卸工考试题库 真题模拟考前押题精准覆盖
学习·安全·考试·题库·考证