关于c#的基本内容我们差不多学完了,接下来我们来学习安装monogame并创建第一个窗口。
第一步:安装 MonoGame 模板
-
打开 Visual Studio Installer(开始菜单搜一下就有)
-
找到你安装的 Visual Studio 版本,点击 修改
-
在右侧找到 "游戏开发" 或直接搜 "游戏"
-
勾选 "使用 C# 的游戏开发"(或者c++的游戏开发) 这个工作负荷
-
点击右下角 修改,等待安装完成
安装完成后,打开 Visual Studio。
第二步:创建第一个 MonoGame 项目
-
在 Visual Studio 里点击 创建新项目
-
在搜索框里输入 MonoGame
-
选择 MonoGame Cross-Platform Desktop Application(不是 Android/iOS 的)
-
项目名称写 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();
保证程序能够正常运行
好了,今天的课程到此结束,关注我,下期更精彩