2012-01-16 117 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