0

XNAとC#を使用しています。

からベクトル変数を呼び出すのに問題がありますparticleEmitter。静止している場合や動いていない場合でも、パーティクルをうまく描画できます。そして、(x、y)の固定位置に設定されたベクトル変数がある場合、それは問題なく、画面上に描画されます。しかし、x軸またはy軸で移動するように設定されているベクトル変数がある場合、それはまったく描画されません。

宣言された変数:

Vector2 shipPos;
float shipMovement;
ParticleEngine particleEngine;

そして、ベクトルで何が起こるべきか、そしてそれがどのように振る舞うべきかについてのものをロードするメソッド:

public void loadEmitter(GameTime gameTime)
{
    shipMovement = 2f;
    shipPos.Y -= shipMovement;          
    particleEngine.EmitterLocation = new Vector2(shipPos.X,shipPos.Y);
}

particleEngine船の動きを追跡しようとしています。私ができないように見えるのは、これが起こるように設定したときにそれを描画させることです。

その他の情報: ParticleEngineそれ自体がクラスであり、基本的に、描画するパーティクルがどのように動作するかについていくつかのパラメータを設定します。spritebatch Beginと呼び出しを含む他の画面がありEndます。それ以外に、私のメインクラスのコードは次のとおりです。

namespace PlanetDrill2
{
class LaunchScreen : Screen
{
    Texture2D LaunchScreenTexture;
    Texture2D shipLaunch;

    Vector2 shipPos;
    float shipMovement;
    ParticleEngine particleEngine;

    Vector2 smokePos;

    public LaunchScreen(Game game, SpriteBatch batch, ChangeScreen changeScreen)
        : base(game, batch, changeScreen)
    {            
    }

    protected override void SetupInputs()
    {
        base.SetupInputs();
    }

    public override void Activate()
    {
        base.Activate();
    }

    public void LaunchShip()
    {
    }

    public void loadEmitter(GameTime gameTime)
    {
        shipMovement = 2f;
        shipPos.Y -= shipMovement;        
        particleEngine.EmitterLocation = new Vector2(shipPos.X,shipPos.Y);
    }

    protected override void LoadScreenContent(ContentManager content)
    {
        LaunchScreenTexture = content.Load<Texture2D>("launchTest");
        shipLaunch = content.Load<Texture2D>("shipLaunch");

        List<Texture2D> textures = new List<Texture2D>();
        textures.Add(content.Load<Texture2D>("smoketexture"));
        particleEngine = new ParticleEngine(textures, new Vector2(0, 0));
        base.LoadScreenContent(content);
    }

    protected override void UpdateScreen(GameTime gameTime, DisplayOrientation screenOrientation)
    {
        //if (gameTime.TotalGameTime.Seconds>10)
        //{
        //    changeScreenDelegate(ScreenState.UMA);
        //}


        loadEmitter(gameTime);
        particleEngine.Update();
        base.UpdateScreen(gameTime, screenOrientation);
    }

    protected override void DrawScreen(SpriteBatch batch, DisplayOrientation screenOrientation)
    {
        batch.Draw(LaunchScreenTexture, Vector2.Zero, Color.White);
        batch.Draw(shipLaunch, new Vector2(80, 450) +shipPos, Color.White);
        particleEngine.Draw(batch);
        base.DrawScreen(batch, screenOrientation);
    }

    protected override void SaveScreenState()
    {
        base.SaveScreenState();
    }
} // end class LaunchScreen
} // end namespace PlanetDrill2
4

1 に答える 1

1

ここから

batch.Draw(shipLaunch, new Vector2(80, 450) +shipPos, Color.White);
particleEngine.Draw(batch);

[80、450]を基準にして船を描画しているように見えますが、このオフセットをparticleEngineに適用していません。

于 2012-07-27T18:22:06.813 に答える