我有一个基本的按钮类,当鼠标悬停在按钮上并且适用于我的主菜单时它会发光。但是,使用暂停功能,我的x值将始终不同。我有一个相机类可以改变视口,并根据玩家的位置滚动。这一切都很好。但是,当我介绍暂停选项时,正确放置了“绘制”按钮,但是用于鼠标检测的矩形距离它有一段距离。
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),矩形为(0,0,100,100) - (x,y,width,height),因此矩形从(0,0)延伸到(100,100) )。例如,如果将位置更新为(100,100),则还必须将矩形的x和y坐标更新为(100,100),因此矩形现在从(100,100)延伸到(200,200)
我的代码示例中没有足够的信息来告诉您哪里出了问题,但是我可以告诉您发生了什么。
另一个注意事项..如果你将相机的变换矩阵传递给SpriteBatch.Begin(...)
并且你也在SpriteBatch.Begin...End
部分内对你的HUD元素进行绘制调用,你应该考虑制作另一个SpriteBatch.Begin...End
部分1}}部分没有传入相机的变换矩阵。这样,你的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();
}