【问题标题】:XNA Texture2D cropping bugXNA Texture2D 裁剪错误
【发布时间】:2012-09-02 00:57:46
【问题描述】:

我遇到了一个问题,我的菜单和面板的菜单项被裁剪,因此这些内容不会低于面板顶部。一切正常,你只是看不到那个点以下的东西。当我使用此代码检查该面板的位置时

if (Position.X <= 400)
    panelMenu.Initialize(TestPanelMenuTexture, new Vector2(700, 200), Item1, Item2, Item3, Item4);
else
    panelMenu.Initialize(TestPanelMenuTexture, new Vector2(100, 200), Item1, Item2, Item3, Item4);

前 4 个裁剪掉整个菜单,接下来的 8 个裁剪掉除一个部分之外的所有内容,依此类推。如果我不检查它(我只使用第 2 行),那么前 8 个会切断所有内容,接下来的 8 个会切断除一个部分之外的所有内容,依此类推。 (旁注:每个部分的高度为 100 像素。)

这里是用于初始化每个面板的代码,以及菜单和菜单项:

for (int i = 0; i <= 7; i++)
{
    for (int q = 0; q <= 7; q++)
    {
        Panel Panel = new Panel();
        Panel.Initialize(TestTextureStill, TestTextureHover, TestTextureActive, new Vector2 (q * 100 + 50, i * 100 + 50), MenuTexture, menuItem1, menuItem2, menuItem3, menuItem4);
        Panels[i, q] = Panel;
    }
}

面板菜单

if (Position.X <= 400)
    panelMenu.Initialize(TestPanelMenuTexture, new Vector2(700, 200), Item1, Item2, Item3, Item4);
else
    panelMenu.Initialize(TestPanelMenuTexture, new Vector2(100, 200), Item1, Item2, Item3, Item4);

这里是绘图代码:

GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
for (int i = 0; i <= 7; i++)
{
    for (int q = 0; q <= 7; q++)
        Panels[i, q].Draw(spriteBatch);
}
spriteBatch.End();
base.Draw(gameTime);

在 Panel.Draw() 中

if (selected)
    panelMenu.Draw(spriteBatch);
spriteBatch.Draw(PanelTextureCurrent, Position, null, Color.White, 0f, new Vector2(Width / 2, Height / 2), 1f, SpriteEffects.None, 0f);

在 PanelMenu.Draw() 中

spriteBatch.Draw(PanelMenuTexture, Position, null, Color.White, 0f, new Vector2(Width / 2, Height / 2), 1f, SpriteEffects.None, 0f);
spriteBatch.Draw(Item1.CurrentTexture, new Vector2(Position.X, 50), null, Color.White, 0f, new Vector2(WidthMI1 / 2, HeightMI1 / 2), 1f, SpriteEffects.None, 0f);
spriteBatch.Draw(Item2.CurrentTexture, new Vector2(Position.X, 150), null, Color.White, 0f, new Vector2(WidthMI2 / 2, HeightMI2 / 2), 1f, SpriteEffects.None, 0f);
spriteBatch.Draw(Item3.CurrentTexture, new Vector2(Position.X, 250), null, Color.White, 0f, new Vector2(WidthMI3 / 2, HeightMI3 / 2), 1f, SpriteEffects.None, 0f);
spriteBatch.Draw(Item4.CurrentTexture, new Vector2(Position.X, 350), null, Color.White, 0f, new Vector2(WidthMI4 / 2, HeightMI4 / 2), 1f, SpriteEffects.None, 0f);

如果你还需要什么,请告诉我!

【问题讨论】:

  • 另外,经过一番测试,我认为错误发生在菜单初始化的某个地方,或者在绘图期间。我只是不知道到底出了什么问题。
  • 好的,我想我知道问题出在哪里,只是不知道如何解决。所选面板右侧或下方未绘制任何内容。然而,任何高于它的东西都是。
  • 问题已解决。我只是需要画一点不同的东西。

标签: xna crop texture2d


【解决方案1】:

将菜单和项目的绘图移动到所有面板都绘制完之后。这是因为面板与菜单重叠,导致菜单消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多