【问题标题】:'particleEngine' being drawn against a vector'particleEngine' 被绘制在一个向量上
【发布时间】:2012-07-27 16:46:45
【问题描述】:

我正在使用 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 BeginEnd 调用的屏幕。除此之外,这是我的主类的代码:

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

【问题讨论】:

    标签: c# windows-phone-7 vector xna


    【解决方案1】:

    从这里

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

    看起来您正在绘制相对于 [80, 450] 的船,但您没有将此偏移量应用于粒子引擎。

    【讨论】:

    • particleEngine.EmitterLocation = new Vector2(100, 450)+shipPos; 谢谢!你一发布我就意识到了这一点,我的船的起源一开始有点乱,但修复了它我没有足够的代表点来投票,但再次感谢大声笑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多