つまり、基本的には2Dプラットフォームのシューティングゲームです。そして、個々の弾丸のパスを描きたいと思います。すべての弾丸の後に白い線があり、アルファ値は弾丸から発射された位置まで減少しているはずです。
どうすればそのような効果を生み出すことができますか?
編集:私は詳細なコードの代わりに基本的な方法を求めています。それを行うにはパーティクルエフェクトを使用する必要があると思いますか?
編集2:ありがとう!しかし、グラデーションテクスチャのソース長方形をスケーリングする代わりに変更できますか?
どこかで間違えたら訂正してください、ありがとう!
Texture2Dgradlineは次のようになります。
(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がの高さに達するまで、トレイルの端の部分のみを描画するように変更する必要があります。テクスチャ。