0

看来我的 if 语句不起作用;它是,从我之前在整个代码中放置的调试消息框收集到的以报告变量等,只是不修改 if 块中的变量“pos”,但 if 块肯定正在执行。很难解释。

我正在用街道上的汽车制作一个小游戏,在这里,我尝试生成新车并根据它们所在街道的车道为它们分配起始位置(或修改它们的位置)。这不是生产代码,这只是我粗略的基本想法。

for (int i = 0; i < carlane.Count; i++)
{
    float lane = carlane.ElementAt(i);
    if (lane == 1)
    {
        if (carpos.Count <= i)
        {
            pos = new Vector2(screenWidth - 20, (screenHeight / 2) - (8 * screenHeight / 200));
        }
        else
        {
            pos = new Vector2(carpos[i].X - 2, carpos[i].Y);
        }
        rotation = 1.5f * (float)Math.PI;
    }
    else if (lane == 2)
    {
        if (carpos.Count <= i)
        {
            pos = new Vector2(screenWidth - 20, (screenHeight / 2) - (8 * screenHeight / 200));
        }
        else
        {
            pos = new Vector2(carpos[i].X - 2, carpos[i].Y);
        }
        rotation = 1.5f * (float)Math.PI;
    }
}

spriteBatch.Draw(car, pos, null, Color.White, rotation, origin, (lane - 1) * (float)Math.PI * 0.5f, SpriteEffects.None, 0f);

if (carpos.Count > i)
{
     carpos[i] = (pos);
}
else
{
     carpos.Add(pos);
}

因此,当车道设置为 1 时,什么也没有发生。汽车产生,但不出现。当车道设置为 2 时,我故意在 if 块中使用与车道等于 1 时相同的代码,并且汽车会正确生成并沿着车道行驶。代码有问题,当车道 = 1 时,我不知道它是什么。

我的电脑运行 Windows 7 Home Premium 64 位,我正在使用 C# 2010 速成版和 XNA 游戏工作室 4.0。

请帮忙?

4

3 回答 3

1

lane为零时,(lane - 1) * (float)Math.PI * 0.5f为零。你正在Draw使用scale参数零,它什么都没有。

文档:

public void Draw (
         Texture2D texture,
         Vector2 position,
         Nullable<Rectangle> sourceRectangle,
         Color color,
         float rotation,
         Vector2 origin,
         float scale,
         SpriteEffects effects,
         float layerDepth
)

你的代码:

spriteBatch.Draw(
         car,
         pos,
         null,
         Color.White,
         rotation,
         origin,
         (lane - 1) * (float)Math.PI * 0.5f,
         SpriteEffects.None,
         0f
);

看起来像我的规模。

于 2013-06-13T23:30:11.153 回答
1

当车道等于 1 时,比例(lane - 1) * (float)Math.PI * 0.5f等于 0,这意味着汽车被缩放为空——因此屏幕上什么都不会出现。

于 2013-06-13T23:33:13.410 回答
0

您应该只pos根据车道更改变量,而不是精灵的大小(您正在更改精灵的比例,只需将其设置为 1.0f)。

    spriteBatch.Draw(car, pos, null, Color.White, rotation, 
                 origin, 1.0f, SpriteEffects.None, 0f);
于 2013-06-13T23:38:01.530 回答