从零开发游戏需要学习的c#模块,第十七章(显示真正的图片——精灵绘制)

第一步:准备图片

先用一张简单的来做测试。把你准备好的图片命名为 player.png

第二步:把图片加入项目

  1. 在 Visual Studio 右侧"解决方案资源管理器"里,找到 Content 文件夹

  2. 右键 Content添加现有项

  3. 选择你的 player.png 文件

  4. 选中刚添加的 player.png,在下方属性窗口里,确认:

    • 生成操作 = Content

    • 复制到输出目录 = 如果较新则复制

第三步:完整代码

打开 Game1.cs完整替换为:

using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Graphics;

using Microsoft.Xna.Framework.Input;

namespace MY_FIRST_GAME

{

public class Game1 : Game

{

private GraphicsDeviceManager _graphics;

private SpriteBatch _spriteBatch;

private Texture2D playerTexture;

private Vector2 playerPosition;

private float playerSpeed = 200f;

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);

// ★ 加载图片:用 Content.Load<Texture2D>("文件名不带后缀")

playerTexture = Content.Load<Texture2D>("player");

}

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;

if (keyboard.IsKeyDown(Keys.Escape))

Exit();

base.Update(gameTime);

}

protected override void Draw(GameTime gameTime)

{

GraphicsDevice.Clear(Color.CornflowerBlue);

_spriteBatch.Begin();

// ★ 画图片:纹理, 位置, 颜色(Color.White = 原色)

_spriteBatch.Draw(playerTexture, playerPosition, Color.White);

_spriteBatch.End();

base.Draw(gameTime);

}

}

}

其中新知识

cs 复制代码
playerTexture = Content.Load<Texture2D>("player");

其中

  • Content.Load<T>() 是 MonoGame 的资源加载器

  • "player" 是文件名不带后缀

  • 图片必须放在 Content 文件夹里

cs 复制代码
_spriteBatch.Draw(playerTexture, playerPosition, Color.White);
  • 第一个参数:纹理(你的图片)

  • 第二个参数:位置(Vector2

  • 第三个参数:颜色滤镜(Color.White = 原样显示)

注意一下本节课要准备的东西

准备一张你喜欢的32*32的图片,可以用piskel制作

好了,本节课的内容到此结束,关注我,下期更精彩。

相关推荐
硬件yun29 分钟前
学功能安全
学习·安全·汽车
火眼金睛炼单词29 分钟前
图像记单词:视觉化学习能否破解英语记忆难题
学习
一条破秋裤32 分钟前
STM32 学习笔记:GPIO 输出原理与硬件设计
笔记·stm32·学习
andrsted33 分钟前
作业发布、课堂检测和错题讲评,用一个小程序完成
学习·微信小程序·小程序·学习方法
Titan20241 小时前
HTTPS基础知识梳理
服务器·网络·c++·网络协议·学习·http·https
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】SSE协议
c++·学习·面试·大模型·sdk
一条破秋裤1 小时前
STM32 学习笔记:OLED 调试工具与 Keil 在线调试
笔记·stm32·学习
STLearner2 小时前
KDD 2026 | (2月轮)时空数据(Spatial-Temporal)论文总结时空(交通)预测,轨迹数据挖掘(表示,生成)
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘
一条破秋裤2 小时前
STM32 学习笔记:中断系统与 EXTI 外部中断
笔记·stm32·学习
艾莉丝努力练剑2 小时前
【AI大模型接入SDK】WebSocket & SSE 协议
网络·c++·websocket·网络协议·学习·面试