使用重新加载函数延迟项目符号

时间:2018-05-28 05:11:31

标签: java

嗨,我目前很困惑如何在我的程序中添加一个计时器,以增加射击子弹之间的延迟,并计时重新加载功能。这是我当前的代码,用于拍摄当我点击E时鼠标所在的子弹。我想在此处添加延迟并在其上添加重新加载功能。

@Override
public void keyPressed(KeyEvent e) {
    keyPressed[e.getKeyCode()] = true;

    if(e.getKeyCode()==KeyEvent.VK_E){
        double xVel = mouseX - (player.x+player.width/2-cameraX);
        double yVel = mouseY - (player.y-cameraY);
        double ratio = Math.sqrt(xVel*xVel+yVel*yVel)/10;
        xVel /= ratio;
        yVel /= ratio;
        lasers.add(new Laser(player.x+player.width/2,player.y,10,10,xVel,yVel));
        //System.out.println("Laser added at "+(player.x+player.width/2)+","+player.y);
        }
}

这是从我的激光课程中调用的。

import java.awt.Color;
import java.awt.Graphics;

public class Laser {
double x, y;
int width, height;
double horizVel, vertVel;
boolean debug = false;

public Laser(int x, int y, int width, int height, double horizVel, double vertVel) {
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.horizVel = horizVel;
    this.vertVel = vertVel;
}

public void draw(Graphics g, int x, int y) {
    g.setColor(Color.GREEN);
    g.fillRect(x, y, width, height);
    if (debug) {
        g.drawString("horizVel=" + horizVel, x + width + 3, y);
    }
}

public void update() {
    x += horizVel;
    y += vertVel;
}

public static int getHeight() {
    // TODO Auto-generated method stub
    return 0;
}

public static int getWidth() {
    // TODO Auto-generated method stub
    return 0;
}

}

我的第一个问题是如何为我的程序实现一个计时器,这将导致镜头之间的延迟。据我所知,当按下e以检查计时器何时结束时,我必须有一段时间(真实)声明。

我的第二个问题是关于如何添加重新加载计时器来跟踪发射的子弹数量,在“重新加载时”创建延迟,以便在发生这种情况时无法触发。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

System.currentTimeMillis()将以毫秒为单位返回当前时间

所以,如果你这样做

long pastTime = System.currentTimeMillis();

long currentTime = System.currentTimeMillis();

long timeElapsed = currentTime-pastTime;



// I would control both the reloading time and delay between firing 
// time with two separate variables


if(bulletsleft>0){ //Not out of ammo
     if( reloadTimer<=0 && bulletDelay<=0){ //delays 
         fireShot();}
    }
else{
    reload();


}

这显然不能完全解决您的问题,但至少是一种思考方式