Java actionPerformed questions

时间:2015-06-12 20:16:29

标签: java swing jframe jpanel action

大家好我是java编程的新手,我开始爱上制作简单的JPanel或JFrame游戏。但是最近我开始挑战自己写一个更复杂的游戏,叫做#34; Doodle jump"。由于你们大多数人可能已经听说过这个游戏,你们不断跳到下一个平台,如果你摔倒,游戏就会结束。我已经制作了平台,并根据跳线是否下降或跳起来上下移动(如果物体/跳线向上跳跃,平台向下移动,如果物体/跳线下降,则平台向上移动,最后如果跳线一直向下,那么游戏结束时会向你显示一条"你丢失了#34;消息,我也认为如果你点击空格键,对象会跳跃并且#34; A&#34 ;和" D"按钮将对象/跳线向右或向左移动。)。在完成所有工作之后,我需要的是让跳线在落在平台上时停止下降。我不知道如何使它工作,我尝试在互联网上搜索,但结果是无用的。我别无选择,只能在stackoverflow上发布这个问题。

如果你想查看我的代码,那么它就在下面:

import java.awt.event.*;
import java.awt.*;
import java.util.Scanner;

import javax.swing.*;
public class DoodleJump extends JPanel implements ActionListener,KeyListener{
static JFrame f; 
static int width=1200, height=930;
static int DoodleW=500, DoodleH=500;
static int DoodleW1=540, DoodleH1=530;
static int DoodleW2=500, DoodleH2=530;
static int DoodlePlatformWidth=200, DoodlePlatformHeight=400;
static int DoodlePlatformWidth1=400, DoodlePlatformHeight1=530;
static int DoodlePlatformWidth2=900, DoodlePlatformHeight2=874;
static int DoodlePlatformWidth3=345, DoodlePlatformHeight3=643;
static int DoodlePlatformWidth4=711, DoodlePlatformHeight4=957;
static boolean rightjumper,leftjumper;
static boolean jumper;
static boolean gameplay=true;
public void paintComponent (Graphics g){
    g.setColor(Color.green);
    g.fillRect(DoodlePlatformWidth, DoodlePlatformHeight,200,30);
    g.fillRect( DoodlePlatformWidth1, DoodlePlatformHeight1,200,30);
    g.fillRect( DoodlePlatformWidth2, DoodlePlatformHeight2,200,30);
    g.fillRect( DoodlePlatformWidth3, DoodlePlatformHeight3,200,30);
    g.fillRect( DoodlePlatformWidth4, DoodlePlatformHeight4,200,30);
    g.setColor(Color.blue);
    g.fillRect(DoodleW, DoodleH,50,50);
    g.fillRect(DoodleW1, DoodleH1,10,50);
    g.fillRect(DoodleW2, DoodleH2,10,50);
    if (gameplay==false){
        g.setColor(Color.red);
        g.setFont(new Font("Rosewood Std Regular", Font.PLAIN, 100)); 
        g.drawString("You Lost",200,110);
        f.setBackground(Color.black);  
    }
}
public static void main(String a[]){
    DoodleJump D = new DoodleJump();
    f = new JFrame();
    D.init();       
    f.add(D);
    f.setSize(width,height);
    f.setVisible(true);
    f.repaint();                      
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Timer t=new Timer(10,D);        
    t.start();                      
} 
public void init (){
    this.addKeyListener(this);  
    setFocusable(true);  
}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub

    if (gameplay==true){
        if (jumper==true){
            DoodlePlatformHeight=DoodlePlatformHeight+20;
            DoodlePlatformHeight1=DoodlePlatformHeight1+20;
            DoodlePlatformHeight2=DoodlePlatformHeight2+20;
            DoodlePlatformHeight3=DoodlePlatformHeight3+20;
            DoodlePlatformHeight4=DoodlePlatformHeight4+20;

        }
        if (jumper==false){
            DoodlePlatformHeight=DoodlePlatformHeight-10;
            DoodlePlatformHeight1=DoodlePlatformHeight1-10;
            DoodlePlatformHeight2=DoodlePlatformHeight2-10;
            DoodlePlatformHeight3=DoodlePlatformHeight3-10;
            DoodlePlatformHeight4=DoodlePlatformHeight4-10;

        }
        if (leftjumper==true){
            DoodleW=(DoodleW-15);
            DoodleW1=(DoodleW1-15);
            DoodleW2=(DoodleW2-15);
        }
        if (rightjumper==true){
            DoodleW=(DoodleW+15);
            DoodleW1=(DoodleW1+15);
            DoodleW2=(DoodleW2+15);
        }

        if (DoodlePlatformHeight>height){
            DoodlePlatformWidth=(int) Math.floor(Math.random()*1201);
            DoodlePlatformHeight=0;
        }
        if (DoodlePlatformHeight1>height){
            DoodlePlatformWidth1=(int) Math.floor(Math.random()*1201);
            DoodlePlatformHeight1=0;
        }
        if (DoodlePlatformHeight2>height){
            DoodlePlatformWidth2=(int) Math.floor(Math.random()*1201);
            DoodlePlatformHeight2=0;
        }
        if (DoodlePlatformHeight3>height){
            DoodlePlatformWidth3=(int) Math.floor(Math.random()*1201);
            DoodlePlatformHeight3=0;
        }
        if (DoodlePlatformHeight4>height){
            DoodlePlatformWidth4=(int) Math.floor(Math.random()*1201);
            DoodlePlatformHeight4=0;
        }
        if (DoodlePlatformHeight<0&&DoodlePlatformHeight2<0&&DoodlePlatformHeight3<0&&
                DoodlePlatformHeight4<0){
            gameplay=false;
        }
        f.repaint();
    }
}
@Override
public void keyTyped(KeyEvent e) {
    // TODO Auto-generated method stub
}

@Override
public void keyPressed(KeyEvent e) {
    // TODO Auto-generated method stub
    if (e.getKeyCode()==KeyEvent.VK_SPACE){
        jumper=true;
    }
    if (e.getKeyCode()==KeyEvent.VK_A){
        leftjumper=true;
    }
    if (e.getKeyCode()==KeyEvent.VK_D){
        rightjumper=true;
    }
}
@Override
public void keyReleased(KeyEvent e) {
    // TODO Auto-generated method stub
    if (e.getKeyCode()==KeyEvent.VK_SPACE){
        jumper=false;
    }
    if (e.getKeyCode()==KeyEvent.VK_A){
        leftjumper=false;
    }
    if (e.getKeyCode()==KeyEvent.VK_D){
        rightjumper=false;
    }
}
}
如果有人可以帮助我,那就太棒了。谢谢大家!!!

1 个答案:

答案 0 :(得分:2)

主要思想是检查2个对象(形状)的交集。

平台没有被移动并且具有固定的Shape - Rectangle(让它命名为platformRect)。跳转对象移动(向下)并且还有一个形状 - 让我们说椭圆(并称之为movingEllipse)。

通过计时器,我们改变movingEllipse的y坐标(椭圆向下移动)。 W必须检测碰撞。

你可以使用Shape class&#39;方法public boolean intersects(Rectangle2D r)

对于新的Ellipse位置,您可以检查它是否与platformRect相交。如果没有继续向下移动(减少Y),如果是(在下面的平台)停止Y更新。