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

保证程序能够正常运行

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

相关推荐
M78佐菲3 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
yi.Ist3 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
geovindu4 小时前
CSharp: 万年历
开发语言·后端·c#·.net
小小数媒成员6 小时前
【8.29-8.31】游戏见闻*
游戏
骐骥17 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦7 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
m4Rk_9 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
闭月之泪舞10 小时前
C++编程学习
c++·学习
网安蟹佬霸11 小时前
2026网络安全每日学习计划:每天学多久?学什么?怎么安排?照着做就行!
网络·学习·安全·web安全·学习路线·网安
一条破秋裤11 小时前
TIM 输入捕获与 PWMI:从边沿到频率、占空比
笔记·stm32·学习