为什么我的弹丸没有画在屏幕上?

时间:2012-01-16 01:55:58

标签: c# xna 2d

所以我正在开发一个简单的C#程序,它允许你移动一个图形并让它在鼠标点击时发射从玩家到鼠标位置的子弹。我还是C#的新手,但对Java和Python有一些经验。

我完全可以使用WASD移动我的角色,但无法让子弹被绘制,更不用说让它们在更新时移动。

虫子可能在哪里?

抛射物体的绘制方法? Game1类的用户输入更新方法? 抛射物物体的方向设定?

以下是完整代码: http://pastebin.com/j5QVLKU3

我离开了玩家类,但它只有一些像健康一样的玩家变量。

1 个答案:

答案 0 :(得分:6)

首先,你能移动吗

mouseStateCurrent = Mouse.GetState();

if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
{
    if (mouseStatePrevious.LeftButton != ButtonState.Pressed)
    {
        AddProjectile(player.positionPlayer);

        mouseStatePrevious = mouseStateCurrent; //<-- This line
    }
}
//<-- Here

按下按钮后,再也不会输入该按钮。

编辑1

此外,这在您的子弹中

    Player playerObject = new Player();
    Game1 gameObject = new Game1();

必须看起来像:

    Player playerObject;
    Game1 gameObject;

    public Projectile(Player player, Game1 game)
    {
        playerObject = player;
        gameObject = game;
    }

由于你只是使用它们来获取子弹的原点和目的地,所以如果你只计算那些外部并且通过初始化传递它们会更好。 (因为它会消除Projectile需要知道Game1和Player对象的样子)

你也可以完全删除Initialize方法,只使用Projectile的构造函数,这似乎更自然。 (如果您使用构造函数,那么您知道只要有实例,就可以使用它而无需调用其他方法)

轻微编辑

我认为你真的不需要弹丸类中的bulletOrigin,你可以使用这个位置,然后从那里移动到bulletDestination。

此外,Vector2类是使用运算符重载方法制作的,因此您可以使用

positionBullet += directionLine*velocity;

而不是

positionBullet = Vector2.Add(positionBullet, directionLine * velocity);

除此之外,您的代码似乎没问题!告诉我在这些更改后它是否仍然无效。此外,使用调试器进入它,看看你是否能找到任何有趣的东西。 :)