對於我的計算機科學課,我被要求創建一個遊戲。一切都很順利,直到我遇到鼠標輸入的問題。我試圖完成的是在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));
}
關於'「加刑問題與鼠標事件」'你的問題的標題應該是你的實際代碼的問題的總結,而不是誇誇其談或kvetch。 –
一個可能的問題是,您從不在mousePressed(MouseEvent e)方法主體中使用MouseEvent對象'e'。該對象包含點擊的位置,我不認爲你想忽略它。 –
你正在創建兩發子彈,它有可能是'tick'不是(總是),這取決於你如何'tick'是被稱爲 – MadProgrammer