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

保证程序能够正常运行

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

相关推荐
xian_wwq4 小时前
【学习笔记】大模型备案到底要交什么材料
笔记·学习
吴可可1234 小时前
用Teigha修改并保存CAD文件
数据库·算法·c#
老鱼说AI5 小时前
统计学习方法第一章讲解:统计与监督学习概率
人工智能·学习·学习方法
他们叫我阿冠5 小时前
Day5学习--SpringBoot详解
spring boot·后端·学习
tedcloud1235 小时前
hello-agents部署教程:从零学习AI Agent开发
服务器·人工智能·学习·自动化·powerpoint
qq_265153375 小时前
Redis在游戏服务器中怎么实现开合服数据同步?
服务器·redis·游戏·游戏服务器
我想我不够好。6 小时前
针对性抓人 随机应变
学习
OSwich6 小时前
【 Godot 4 学习笔记】命名规范
笔记·学习·godot
觅_6 小时前
前端学习后端的时候 选择一个技术
前端·学习