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

保证程序能够正常运行

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

相关推荐
我的xiaodoujiao26 分钟前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
心平气和量大福大1 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
你想知道什么?2 小时前
线性回归-学习笔记
笔记·学习·线性回归
鱼毓屿御2 小时前
从「只会聊」到「边想边做」的跃迁
前端·学习·react.js
AOwhisky3 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
星空露珠5 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
minglie15 小时前
zynq中linux系统的自动登录和免密登录
学习
-银雾鸢尾-5 小时前
C#中HashTable相关方法
开发语言·c#
茯苓gao5 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习
中国搜索直付通6 小时前
棋牌游戏支付与防沉迷:二级商户如何构建“免疫系统”
游戏