看来我的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-block中使用相同的代码,因为当lane等于1时,汽车正确地产生并沿着车道行驶。当lane = 1时,代码有问题,我不知道它是什么。
我的电脑运行Windows 7家庭高级版64位,而我正在使用C#2010 Express Edition与XNA game studio 4.0。
请帮帮忙?
答案 0 :(得分: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
);
看起来像我的尺度。
答案 1 :(得分:1)
当泳道等于1时,刻度(lane - 1) * (float)Math.PI * 0.5f
等于0,这意味着汽车被缩放为零 - 因此屏幕上没有任何内容。
答案 2 :(得分:0)
你应该只根据泳道改变pos
变量,而不是精灵的大小(你正在改变精灵的比例,只需将其设置为1.0f)。
spriteBatch.Draw(car, pos, null, Color.White, rotation,
origin, 1.0f, SpriteEffects.None, 0f);