2012-01-16 47 views
1

所以我开发一个简单的C#程序,让你走动的图形,并让它火,从玩家前往鼠标在鼠标点击时的位置子弹。我仍然对C#不熟悉,但对Java和Python有一定的经验。为什么我的投射物不在屏幕上绘制?

我完全能够与WASD移动我的性格,但无法得到子弹要绘制更别说让他们移动,因为他们更新。

的臭虫可能是什么?

弹丸对象的抽签方法? 用户输入的Game1类的更新方法? 射弹对象的方向设置?

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

我离开的球员类,但是它没有任何更多的则像健康的几个球员变量。

+0

哪里的弹丸类的构造函数? – annonymously 2012-01-16 03:38:36

回答

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; 
    } 

由于您使用的这些只拿到了出发地和目的地子弹,如果你只是在外面计算这些子弹,并且在初始化时通过它们会更好。 (因为它会删除弹丸的需要知道的Game1和球员的对象看起来像)

你也可以完全删除初始化方法,只是用弹的构造函数,这似乎更自然。 (如果你使用这个构造函数,那么你知道你有一个实例任何时候,你可以使用它,而无需调用其他方法)

轻微编辑

我不认为你真的需要bulletOrigin在你的Projectile类中,你可以使用该位置,并从那里移动到bulletDestination。

此外,Vector2类与运营商的重载方法做,所以你可以使用

positionBullet += directionLine*velocity; 

,而不是

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

除了这些,你的代码似乎罚款!告诉我这些更改后它仍然不起作用。另外,使用你的调试器进入它,看看你是否能找到有趣的东西。 :)

+0

我接受了你的建议并修改了一下。它仍然像以往一样sl sl。 字符触发子弹但是他们都对去(0,0) 我的猜测是,它与我的子弹目的地的概率... 代码: http://pastebin.com/hBEQV4Ri – 2012-01-16 06:53:22

+0

哦,一个常见的错误现在,你需要删除Vector2在bulletDest之前,如果你在检查点击的地方你已经声明它是一个全局的,但是在这里你再次声明它,然后传递全局的bulletDest(这是0,0 )到你的子弹建造者。当你查看你的代码的时间太长时,很难看出来,我知道我经常遇到这样的错误,只是看不到。 – neeKo 2012-01-16 07:07:37

+0

现在一切正常,谢谢你的帮助。 – 2012-01-18 02:15:02