鼠标事件加重问题

时间:2016-05-03 00:22:45

标签: java input mouse game-physics

对于我的计算机科学课,我被要求创建一个游戏。在我遇到鼠标输入问题之前,一切都很顺利。我想要完成的是在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));
}

1 个答案:

答案 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,将代码压缩到仍然编译和运行的最小位,没有外部依赖(例如需要链接到数据库)或图像),没有与您的问题无关的额外代码,但仍然可以证明您的问题。