对于我的计算机科学课,我被要求创建一个游戏。在我遇到鼠标输入问题之前,一切都很顺利。我想要完成的是在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未更新的原因是因为鼠标事件与我的tick不同。我对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 :(得分:2)
下面:
public void mousePressed(MouseEvent e) {
handler.addObject(new Bullet("res\\Fireball.png",x,y + ,ID.BasicEnemy,handler));
}
您永远不会使用MouseEvent Point对象,但似乎使用不变的x和y值。也许(很难说)你想使用MouseEvent对象中的x和y:
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,将代码压缩到仍然编译和运行的最小位,没有外部依赖(例如需要链接到数据库)或图像),没有与您的问题无关的额外代码,但仍然可以证明您的问题。