所以基本上它是一个 2D 平台射击游戏。我想画出每个子弹的路径。每个子弹后面应该有一条白线,并且 alpha 值应该从子弹到它被发射的位置递减。
我怎样才能创造出这样的效果?
编辑:我只是要求一个基本的方法而不是详细的代码。我想我可能需要使用粒子效果来做到这一点?
编辑2:谢谢!但是我可以改变渐变线纹理的源矩形而不是缩放它吗?
如果我在某处弄错了,请纠正我,谢谢!
Texture2D 渐变线应如下所示:
(据我记得在使用 Math.Atan2 求向量的角度时,0 度应该在 Y 轴的正方向)
我正在使用这种方法来查找向量的度数。由于正 Y 在窗口坐标系中沿着窗口向下,我在这里改为 -vector.Y :(这对我来说更有意义)
protected float VectorToRadians(Vector2 vector)
{
return (float)Math.Atan2(vector.X, -vector.Y);
}
而且我还需要找到子弹与发射位置之间的距离,以确定源矩形的高度。所以我有这样的方法
protected int GetRectangleHeight(Vector2 startingPos, Vector2 currentPos, int lineTextureLength)
{
float distance = (startingPos - currentPos).Length();
if (distance < lineTextureLength) // if distance is smaller than the texture length, only draw part of it
return distance;
else // if distance is larger or equal to the texture length, draw the entire texture
return lineTextureLength;
}
最后在平局
spriteBatch.Draw(
gradline,
bulletCurrentPos,
new Rectangle(0, 0, gradline.Width, GetRectangleHeight(bulletStartingPos, bulletCurrentPos),
Color.White,
VectorToRadians(bulletCurrentPos - bulletStartingPos),
Vector2.Zero, // actually i think setting the top-center as origin might look better
1f, // full scale
SpriteEffects.None,
0f);
当子弹击中某物并消失时,路径仍应绘制到屏幕上。在此期间,源矩形的 y(以及高度,我认为,以确保矩形不会超出纹理)应更改为仅绘制轨迹的末端部分,直到 y 达到质地。