如何在移动的画布上绘制精灵

时间:2015-03-27 09:59:47

标签: c# canvas xna sprite

我通常认为这种事情正常,但我很难过。我怀疑这是我错过的数学组合,但无论如何。

我有一个移动的背景(目前从上到下上下) 我有一个移动的对象(当前以编程方式从画布的中心向左和向右移动)。

所以这就是问题,如何让一个物体相对于画布上x和y方向的位置移动?

以下是我的相关代码:

//Helper method
    private Vector2 CalculateDirection()
    {
        Vector2 calculatedDirection = new Vector2((float)Math.Cos(direction),
            (float)Math.Sin(direction));
        calculatedDirection.Normalize();
        return calculatedDirection;
    }

画布上的对象

    public void Update(GameTime gameTime, Vector2 center)
    {
        this.currentCentre = originalCentre - center;
        //movement logic here
        Vector2 calculatedDirection = CalculateDirection();
        //deltaTime = ((float)gameTime.ElapsedGameTime.TotalMilliseconds) / 15f;

        if (speed > 0f || speed < 0f)
        {
            ///TODO: work this out!!
            Velocity = calculatedDirection * speed;
            float dir = (originalCentre.Y - currentCentre.Y);
            position.X += Velocity.X * (1.0f - 0.9f);
            position.Y = dir;// *(1.0f - 0.9f); 
        }
    }

画布移动方法

    private void determinePitchSize()
    {
        int newHeight = Convert.ToInt32(pitch.Height * ratio);
        this.canvas = new Rectangle(
            0, posHeight,
            device.PresentationParameters.BackBufferWidth,
            newHeight
            );
    }

    public void increasePosHeight()
    {
        posHeight++;
    }

    public void decreasePosHeight()
    {
        posHeight--;
    }

    private void determineDirection()
    {
        if (!direction)
        {
            if (this.canvas.Height + this.canvas.Y <= this.screenY)
                direction = true;
        }
        else
        {
            if (this.canvas.Y >= 0)
                direction = false;
        }
    }
    private void useDirection()
    {
        this.determineDirection();

        if (direction)
            this.increasePosHeight();
        else decreasePosHeight();
    }

如果您需要更多信息,我可以在这里添加。

由于

1 个答案:

答案 0 :(得分:0)

好的,谢谢Nico,我能够回答这个问题。

    Vector2 Velocity { get; set; }
    Vector2 relative { get; set; }
    public void Update(GameTime gameTime, Vector2 center)
    {

        this.currentCentre = center;

        Vector2 calculatedDirection = CalculateDirection();


        if (speed > 0f || speed < 0f)
        {
            Velocity = calculatedDirection * speed * 0.1f;
            relative = relative - Velocity;
            position = currentCentre + relative;

        }
    }

速度创建物体移动以测试它最终在不同的地方。

相对从0,0(中心)开始,并由速度调整。

然后将位置设置为中心加上相对位置。这是由速度设定的。