2016-05-03 48 views
0

對於我的計算機科學課,我被要求創建一個遊戲。一切都很順利,直到我遇到鼠標輸入的問題。我試圖完成的是在JFrame中的特定位置點擊鼠標,然後讓子彈初始化我角色的位置並朝鼠標點射擊。我已經瞭解如何使用trig來讓子彈在該角度拍攝。問題是,當我點擊鼠標後射擊一顆子彈時,我角色的x和y位置不會更新爲子彈,這意味着子彈總是在相同的位置初始化。以下是我認爲會導致問題的代碼段。加重鼠標事件的問題

public void mousePressed(MouseEvent e) 
{  
    handler.addObject(new Bullet("res\\Fireball.png",x,y + ,ID.BasicEnemy,handler)); 
} 

public void mouseReleased(MouseEvent e) 
{ 
} 


public void tick() 
{ 

    x+=velX; 
    y+=velY; 

    x = Game.clamp(x,0,Game.WIDTH-40); 
    y = Game.clamp(y,0,Game.HEIGHT-40); 

    collision(); 


} 

從我收集通過調查研究,爲什麼在對的mousePressed x和y()方法不更新的原因是因爲鼠標事件是在不同的線程比我打勾。我對java遊戲編程有點新,我想知道是否有人會給我明確的建議。我的遊戲的實際代碼是很長,所以我把範圍縮小到一塊上面的代碼。(我試過同步保留字和volatile變量,但我可能已經實現了他們是錯的)

如果這會有所幫助,相反,如果我在下面這樣做,子彈對象永遠不會出現!

public void mousePressed(MouseEvent e) 
{  
    press=true; 
} 

public void mouseReleased(MouseEvent e) 
{ 
    press=false; 
} 


public void tick() 
{ 

    x+=velX; 
    y+=velY; 

    x = Game.clamp(x,0,Game.WIDTH-40); 
    y = Game.clamp(y,0,Game.HEIGHT-40); 


    collision(); 

    if (press) 
     handler.addObject(new Bullet("res\\Fireball.png",(int)x,(int)y ,ID.BasicEnemy,handler)); 
} 
+0

關於'「加刑問題與鼠標事件」'你的問題的標題應該是你的實際代碼的問題的總結,而不是誇誇其談或kvetch。 –

+0

一個可能的問題是,您從不在mousePressed(MouseEvent e)方法主體中使用MouseEvent對象'e'。該對象包含點擊的位置,我不認爲你想忽略它。 –

+0

你正在創建兩發子彈,它有可能是'tick'不是(總是),這取決於你如何'tick'是被稱爲 – MadProgrammer

回答

2

這裏:

public void mousePressed(MouseEvent e) {  
    handler.addObject(new Bullet("res\\Fireball.png",x,y + ,ID.BasicEnemy,handler)); 
} 

你永遠不使用的MouseEvent Point對象,但似乎用一個不變的x和y的值。也許(很難說),你要使用的X和Y從MouseEvent對象:

public void mousePressed(MouseEvent e) {  
    handler.addObject(new Bullet("res\\Fireball.png", e.getX(), e.getY(), 
     ID.BasicEnemy, handler)); 
} 

如果這不能解決你的問題,然後再考慮創建並張貼Minimal, Complete, and Verifiable Example Program,你凝結您的代碼到最小位仍然編譯和運行,沒有外部依賴性(例如需要鏈接到數據庫或圖像),沒有額外的代碼與您的問題無關,但仍顯示您的問題。

+0

啊看到'press'狀態,非常接近:P(我很困惑,但我沒有睡覺 - 所以沒什麼不同) – MadProgrammer