动态移动暂停按钮矩形正确,但绘图不正确

本文关键字:绘图 不正确 移动 暂停 按钮 动态 | 更新日期: 2023-09-27 18:08:41

我有一个按钮类,这是基本的,它发光时,鼠标在按钮上,并为我的主菜单工作。但是对于暂停函数x值总是不同的。我有一个camera类,它可以改变视口,并根据玩家的位置滚动。这一切都很好。然而,当我引入暂停选项时,绘制的"按钮"被正确放置,然而用于鼠标检测的矩形离它有一段距离。

replay.SetPosition(new Vector2(camera.viewport.Width / 4 + 50,camera.centre.Y));
//replay.SetPosition(new Vector2((int)camera.centre.X , (int)camera.centre.Y);
replay.Update(mouse);

注释掉的那个正确地画出了图像,但是矩形离得太远了。未注释的版本具有正确的矩形位置,但图像当前保持在200(x),250(y)

if (isPaused)
{
    spriteBatch.Draw(pauseTexture,pauseRectangle, Color.White);
    //replay.Draw(spriteBatch);
    exit.Draw(spriteBatch);
    mainmenu.Draw(spriteBatch);
}

相机类更新元素:

public void Update(Vector2 position, int xOffset, int yOffset)
{
    if (position.X < viewport.Width / 4)
        centre.X = viewport.Width / 4;
    else if (position.X > xOffset - (viewport.Width / 4))
        centre.X = xOffset - (viewport.Width / 4);
    else centre.X = position.X;
}

如果需要的话,我将在一天的大部分时间里补充信息。谢谢你的帮助!

动态移动暂停按钮矩形正确,但绘图不正确

不幸的是,我还没有足够的代表来评论,所以根据给出的信息,我会尽我最大的努力回答。

听起来你的矩形和菜单项的位置没有一起更新。假设位置为(0,0),矩形为(0,0,100,100)- (x, y,宽度,高度),因此矩形从(0,0)延伸到(100,100)。例如,如果您将位置更新为(100,100),则还必须将矩形的x和y坐标更新为(100,100),因此矩形现在从(100,100)扩展到(200,200)。

我从你的代码样本中没有足够的信息来告诉你哪里出了问题,但从我能告诉你的是发生了什么。

在另一个注意…如果你将相机的变换矩阵传递给SpriteBatch.Begin(...),并且你也在SpriteBatch.Begin...End部分中对HUD元素进行绘制调用,你应该考虑在没有传递相机变换矩阵的情况下制作另一个SpriteBatch.Begin...End部分。这样你的HUD元素的位置就会是屏幕坐标与世界坐标的对比,你就不会遇到这样的问题了。HUD元素通常不会改变位置,除非你允许它们这样做,但你仍然会使用与世界坐标相比的屏幕坐标。

示例:(请记住,我不记得SpriteBatch.Begin(...)的确切参数,但这应该有所帮助)

//Main Draw function
public void Draw() {
    //World Coordinates
    spriteBatch.Begin(cameraTransformationMatrix);
    //Draw all world coordinate objects
    //Player, Enemies, Walls, etc.
    spriteBatch.End();
    //Screen Coordinates
    spriteBatch.Begin();
    //Draw all screen coordinate objects
    //Menus, In-Game HUD elements, etc.
    spriteBatch.End();
}