news 2026/5/21 3:55:22

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开发游戏需要学习的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);
}
}
}

其中新知识

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

其中

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

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

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

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

  • 第二个参数:位置(Vector2

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

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

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 3:54:49

告别Markdown?手把手教你用VSCode+Sphinx搭建专业技术文档(RST实战)

从Markdown到RST&#xff1a;用VSCodeSphinx构建专业级技术文档体系 在技术文档领域&#xff0c;Markdown因其简单易用成为许多开发者的首选。但当项目规模扩大、文档复杂度提升时&#xff0c;Markdown的局限性逐渐显现——缺乏原生目录结构、交叉引用能力弱、多格式输出支持有…

作者头像 李华
网站建设 2026/5/21 3:54:03

数据结构顺序表

1、线性表 线性表(linearlist):是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。但是在物理结构上并不一定是连续的…

作者头像 李华
网站建设 2026/5/21 3:47:41

Codex使用DeepSeek API的方法(cc switch + codex bridge方案)

一、背景 OpenAI 的 Codex 是目前主流的 AI 编程助手之一&#xff0c;不仅可以用来编写代码&#xff0c;还可以用于办公&#xff0c;生活服务等。操作浏览器&#xff0c;操作电脑更是将要抢占龙虾的地位。 DeepSeek V4 在代码场景下性价比高、API 成本低。 两者无法直接对接&…

作者头像 李华
网站建设 2026/5/21 3:42:01

晶振参数深度解读与替代选型实战(55.2MHz 工业级无源晶振案例)

前言作为嵌入式 / 硬件 FAE&#xff0c;日常工作中晶振的参数解读、客户需求替代是高频场景。最近遇到一个典型的工业级宽温晶振客户需求&#xff0c;参数里藏着很多新手容易踩的坑&#xff0c;比如 “负频率” 的误解、负载电容不匹配、宽温范围忽略等问题。本文以客户的55.2M…

作者头像 李华