If语句出错

本文关键字:出错 语句 If | 更新日期: 2023-09-27 18:18:32

似乎我的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);
}

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

我的电脑运行Windows 7 Home Premium 64位,我使用c# 2010 express edition with XNA game studio 4.0。

请帮忙吗?

If语句出错

当lane = 1时,比例(lane - 1) * (float)Math.PI * 0.5f = 0,这意味着汽车被缩放为0 -因此屏幕上没有显示任何内容

lane为零时,(lane - 1) * (float)Math.PI * 0.5f为零。您正在使用scale参数0进行Draw处理,它没有绘制任何内容。

文档:

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
);

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

    spriteBatch.Draw(car, pos, null, Color.White, rotation, 
                 origin, 1.0f, SpriteEffects.None, 0f);