2013-04-10 56 views
1

我有一个基本的按钮类,它发光时,鼠标是在按钮上,并为我的主菜单工作。然而,有一个暂停函数,我的x值会一直有所不同。我有一个相机类,它可以改变视口,并根据玩家的位置进行滚动。这一切工作正常。但是,当我引入暂停选项时,Drawn“按钮”被正确放置,但用于鼠标检测的矩形与该距离相距一定距离。动态移动暂停按钮矩形正确,但绘图不正确

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,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(); 
} 
+0

哇...我从来没有想过使用分离式spriteBatch.Begin的() ; /结束它修复了它......在屏幕上移动按钮并按需要暂停覆盖工作。我非常感谢你。被困在调试中,以及几个小时以后的事情......坐标系不是问题......至少我不知道。绘图是问题。非常感谢你的帮助。我现在终于可以完成暂停菜单,并进入调整我的游戏功能...再次感谢 – Eddy 2013-04-10 16:12:49

+0

没有问题,很高兴帮助你!如果你可以请帮助我的代表,如果你接受我的答案,那很棒。谢谢=) – cmhley 2013-04-10 16:24:24