Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 跳雪碧_Java_Swing_Keylistener - Fatal编程技术网

Java 跳雪碧

Java 跳雪碧,java,swing,keylistener,Java,Swing,Keylistener,我正在为学校制作一个2d格斗游戏(想想扣杀兄弟),但我不知道如何使用y的速度让精灵跳跃。这是我的按键代码: if (key == KeyEvent.VK_LEFT) { p2.setVelX(-3); } else if (key == KeyEvent.VK_RIGHT) { p2.setVelX(3); } else if (key == KeyEvent.VK_UP) { p2.setVelY(-3)

我正在为学校制作一个2d格斗游戏(想想扣杀兄弟),但我不知道如何使用y的速度让精灵跳跃。这是我的按键代码:

if (key == KeyEvent.VK_LEFT)
    {
        p2.setVelX(-3);
    }

    else if (key == KeyEvent.VK_RIGHT) {
        p2.setVelX(3);
   }

    else if (key == KeyEvent.VK_UP) {
        p2.setVelY(-3);
    }        

    else if (key == KeyEvent.VK_DOWN)
    {
        p2.setVelY(3);
    }
下面是一些来自玩家的信息:

public class Player {
private double x; 
private double y;
private BufferedImage player;

private double velX = 0;
private double velY = 0;
public Player(double x, double y, Game game) {
    this.x = x;
    this.y = y;
    SpriteSheet ss =  new SpriteSheet(game.getSpriteSheet());
    player = ss.grabImage(1,1,32,32);
}

private void initPlayer() {

}

public void tick()
{
    x+=velX;
    y+=velY;

    if(x <= 0)
        x=0;

    if (x >= 940-32)
        x=940-32;

    if(y <= 0)
        y=0;

    if (y >= 370-64)
        y=370-64;
}

public void render(Graphics g)
{
    g.drawImage(resize(player,64,64), (int)x, (int)y, null);
}

public double getX() {
    return x;
}

public double getY() {
    return y;
}

public void setX(double x)
{
    this.x = x;
}

public void setY(double y)
{
    this.y = y;
}

public void setVelX(double velX)
{
    this.velX = velX;
}

public void setVelY(double velY)
{
    this.velY = velY;
}
public static BufferedImage resize(BufferedImage img, int newW, int newH) { 
    Image tmp = img.getScaledInstance(newW, newH, Image.SCALE_SMOOTH);
    BufferedImage dimg = new BufferedImage(newW, newH, BufferedImage.TYPE_INT_ARGB);

    Graphics2D g2d = dimg.createGraphics();
    g2d.drawImage(tmp, 0, 0, null);
    g2d.dispose();

    return dimg;
} 
公共类播放器{
私人双x;
私人双y;
私人缓冲图像播放器;
私人双velX=0;
私有双精度=0;
公共玩家(双x,双y,游戏){
这个.x=x;
这个。y=y;
SpriteSheet ss=新的SpriteSheet(game.getSpriteSheet());
player=ss.grabImage(1,1,32,32);
}
私有播放器(){
}
公共空白勾号()
{
x+=velX;
y+=0;
如果(x=940-32)
x=940-32;
如果(y=370-64)
y=370-64;
}
公共空间渲染(图形g)
{
g、 drawImage(调整大小(播放器,64,64),(整数)x,(整数)y,null);
}
公共双getX(){
返回x;
}
公共双盖{
返回y;
}
公共无效集x(双x)
{
这个.x=x;
}
公共空间设置(双y)
{
这个。y=y;
}
公共无效设置级别(双级别)
{
this.velX=velX;
}
公共无效设置(双重设置)
{
这是一个很好的例子;
}
公共静态BuffereImage resize(BuffereImage img、int newW、int newH){
Image tmp=img.getScaledInstance(newW、newH、Image.SCALE\u平滑);
BuffereImage dimg=新的BuffereImage(newW,newH,buffereImage.TYPE_INT_ARGB);
Graphics2D g2d=dimg.createGraphics();
g2d.drawImage(tmp,0,0,null);
g2d.dispose();
返回dimg;
} 
}


我应该为VK_UP if()语句添加什么。我必须使用swing和击键而不是按键侦听器吗?谢谢。

FloatSpring
就是一个例子。你需要知道的一个概念是,物体有一个初始速度,随着时间的推移,它会降低到一个已知的状态(比如0)