为什么';我的投射物画在屏幕上

本文关键字:屏幕 投射物 我的 为什么 | 更新日期: 2023-09-27 18:20:27

因此,我正在开发一个简单的C#程序,该程序允许您在图形中移动,并让它在单击鼠标时发射从播放器到鼠标位置的子弹。我对C#还是个新手,但对Java和Python有一些经验。

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

漏洞可能在哪里?

投射物的绘制方法?Game1类的用户输入更新方法?投射物的方向设置?

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

我把球员类别排除在外,但它只包含一些球员变量,比如健康状况。

为什么';我的投射物画在屏幕上

首先,你能移动吗

mouseStateCurrent = Mouse.GetState();
if (mouseStateCurrent.LeftButton == ButtonState.Pressed)
{
    if (mouseStatePrevious.LeftButton != ButtonState.Pressed)
    {
        AddProjectile(player.positionPlayer);
        mouseStatePrevious = mouseStateCurrent; //<-- This line
    }
}
//<-- Here

一旦你按下按钮,你就再也不会输入这个if了。

编辑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的构造函数,这看起来更自然。(如果你为此使用构造函数,那么你就知道,任何时候你有一个实例,你都可以使用它,而不必调用其他方法)

轻微编辑

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

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

positionBullet += directionLine*velocity;

而不是

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

除此之外,您的代码似乎很好!如果在这些更改后仍然不起作用,请告诉我。此外,请使用调试器进行调试,看看是否能找到任何有趣的内容。:)