在 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

如何仅在按下键时更改值?

JS / Canvas - 如何仅在按下键时更新 draw() 函数?

在 Swift 中按下返回键时在文本字段之间切换

当我在OpenGL中按下一个键时无法绘制形状

当我在 tkinter 游戏中按下一个键时,敌人会停止