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

Oli*_*num 1 c# xna 2d

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

我完全能够用WASD移动我的角色,但无法让子弹被绘制,更不用说让他们在更新时移动.

这个bug可能在哪里?

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

这是完整的代码:http: //pastebin.com/j5QVLKU3

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

nee*_*eKo 6

首先,你能动一下吗?

mouseStateCurrent = Mouse.GetState();

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

        mouseStatePrevious = mouseStateCurrent; //<-- This line
    }
}
//<-- Here
Run Code Online (Sandbox Code Playgroud)

按下按钮后,再也不会输入.

编辑1

此外,这在你的弹丸中

    Player playerObject = new Player();
    Game1 gameObject = new Game1();
Run Code Online (Sandbox Code Playgroud)

必须看起来像:

    Player playerObject;
    Game1 gameObject;

    public Projectile(Player player, Game1 game)
    {
        playerObject = player;
        gameObject = game;
    }
Run Code Online (Sandbox Code Playgroud)

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

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

轻微编辑

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

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

positionBullet += directionLine*velocity;
Run Code Online (Sandbox Code Playgroud)

代替

positionBullet = Vector2.Add(positionBullet, directionLine * velocity);
Run Code Online (Sandbox Code Playgroud)

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