在 Monogame 中按下键时,我需要帮助上下移动精灵
Posted
技术标签:
【中文标题】在 Monogame 中按下键时,我需要帮助上下移动精灵【英文标题】:I need help moving a sprite up and down when a key is pressed in Monogame 【发布时间】:2021-11-12 23:06:09 【问题描述】:我是一名新的 GameTechnology 学生,我必须重新创建 Pong 作为我的第一款游戏。当按下“W”,“S”,向上或向下时,我目前正在上下移动条形图,但我似乎无法让它工作,有人可以帮忙吗?到目前为止,这是我的代码。我真的很感激任何帮助,但请保持简单并解释,因为正如我所说,我对此还是新手
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
namespace Pong
public class Game1 : Game
private GraphicsDeviceManager _graphics;
SpriteBatch spriteBatch;
Texture2D RightPlayer;
Texture2D LeftPlayer;
Texture2D Ball;
Vector2 LeftPos;
Vector2 RightPos;
Vector2 BallPos;
KeyboardState currentKBState, previousKBState = Keyboard.GetState();
int Ypos1;
public Game1()
_graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
IsMouseVisible = true;
protected override void Initialize()
Ypos1 = 50;
base.Initialize();
protected override void LoadContent()
spriteBatch = new SpriteBatch(GraphicsDevice);
RightPlayer = Content.Load<Texture2D>("rodeSpeler");
LeftPlayer = Content.Load<Texture2D>("blauweSpeler");
Ball = Content.Load<Texture2D>("Bal");
protected override void Update(GameTime gameTime)
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
Exit();
LeftPos = Vector2.Zero;
if (currentKBState.IsKeyDown(Keys.Up) && previousKBState.IsKeyUp(Keys.Up))
Ypos1 = Ypos1 - 500;
LeftPos = new Vector2(0, Ypos1);
base.Update(gameTime);
protected override void Draw(GameTime gameTime)
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(LeftPlayer, LeftPos, Color.White);
spriteBatch.End();
base.Draw(gameTime);
【问题讨论】:
你从哪里得到 500 的值?它在什么单位? 我使用 YPos1 的值作为 LeftPlayer 精灵的 Y 位置。我只用了 500 就看到了显着的差异。不知道要不要加个单元? 欢迎来到 ***。请花点时间参加tour 并学习How to Ask。请解释一下您的实施当前的错误结果/行为是什么,以及期望的效果是什么。 我试图让我的精灵(LeftPlayer)在我按下时向上移动,我将数量增加到 500 以查看是否有任何变化。但是每当我按下时,它什么也不做 【参考方案1】:您的代码存在四个问题。由于这是一个家庭作业问题,我只会给出提示。
单位为每步像素,每秒60次,取决于上面的if
。因此,移动 500 很可能会将其移出屏幕。
LeftPos
已经包含一个 Y 组件:LeftPos.Y
,因此不再需要 Ypos1
变量。
您使用的某些变量将始终具有默认值。您在 Update() 中缺少两个作业。更正后,您会发现根本不需要其中之一,因为所写的行为存在逻辑错误。
您是否在每一步都将变量设置为固定值,不应该这样?
我喜欢手动(即手写)制作变量图表并跟踪游戏的每个循环,看看这些值是否符合我的预期。在 Visual Studio 中可以通过在 Update 开始时放置检查点(单击代码行最左侧的栏)来确认此技术,然后使用 F11 进入每一行并将鼠标悬停在每个变量上以检查其值。
希望这能让您走上发现问题的正确道路。
【讨论】:
以上是关于在 Monogame 中按下键时,我需要帮助上下移动精灵的主要内容,如果未能解决你的问题,请参考以下文章
当我在 vba powerpoint 中按下一个键时调用一个 Sub