从零开发游戏需要学习的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制作

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

相关推荐
圆奋奋14 小时前
FreeRTOS学习(三)- 任务调度模块
学习·开源·freertos
吃着火锅x唱着歌14 小时前
Effective C++ 学习笔记 条款40 明智而审慎地使用多重继承
c++·笔记·学习
xian_wwq15 小时前
【学习笔记】Prompt Engineering 没死,只是它不再够用了-2/16
笔记·学习·prompt
天吾cc15 小时前
RTT-ADC
单片机·嵌入式硬件·学习
kaixin_啊啊15 小时前
test_机器学习算法学习
学习·算法·机器学习
m4Rk_16 小时前
【论文阅读】Agent 记忆机制(34):MemoryBank——用遗忘曲线管理可强化的长期对话记忆
论文阅读·人工智能·学习·开源·github
210Brian16 小时前
STM32学习笔记(五)EXTI外部中断(上)
笔记·stm32·学习
辣知16 小时前
辣知·化智19 人类文明的轮回
学习
xian_wwq18 小时前
【学习笔记】RAG 只是 Context Engineering 的一小块-5/16
笔记·学习·rag
123_不打狼18 小时前
零基础到就业:完整计算机视觉系统化学习路线指南
人工智能·学习·计算机视觉