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

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

相关推荐
jinglong.zha3 分钟前
LScript-从零基础到商业变现的AI自动化学习平台
运维·学习·自动化
闪闪发亮的小星星23 分钟前
STK_00 学习方案路线
学习
一楼的猫1 小时前
茄子写作助手——品牌搜索突破9万后的技术型品牌认知与官网入口指南
人工智能·学习·机器学习·chatgpt·ai写作
AOwhisky1 小时前
学习自测与解析:MySQL第五、六、七期核心知识点详解
运维·数据库·笔记·学习·mysql·云计算
niuniuyi~1 小时前
QT学习笔记
笔记·qt·学习
咸甜适中2 小时前
rust语言学习笔记Trait(十六)Error(错误)
笔记·学习·rust
xuhaoyu_cpp_java2 小时前
项目学习(三)代码生成器
java·经验分享·笔记·学习
深海潜水员2 小时前
【从零开始的C#游戏开发课程】- FarmStory1.0 日志系统和游戏资源的管理
游戏·c#·monogame
worilb3 小时前
Spring Cloud 学习与实践(8):Spring Cloud Gateway 统一入口、路由转发与双重跨域故障演练
学习·spring·spring cloud
初圣魔门首席弟子3 小时前
学习工作方法论与任务执行计划
学习