如何获取我的JPanels图形对象?

时间:2013-07-26 23:41:57

标签: java swing

我正在制作基本的太空入侵者游戏。我从LWJGL .zip文件中获取了所有资源(我没有使用LWJGL库来创建我的游戏,只是从中获取图片等。)无论如何,每当我按下键盘上的“空格”时,我的KeyListener创建一个新的我的船发射的子弹。但是,我不知道如何绘制项目符号图像,因为我的KeyListener没有传递图形对象,你需要一个绘制图像。导致问题的代码是“Shot”构造函数中的“drawImage”方法。继承我的代码:

    public class KeyTyped{

    public void keyESC(){
        Screen.isRunning = false;
    }

    public void keyLEFT() {
        Screen.shipPosX -= 10;

    }

    public void keyRIGHT() {
        Screen.shipPosX += 10;

    }
    //This is automatically called from my KeyListener whenever i 
    //press the spacebar
    public void keySPACE(){
        if(!spacePressed){
            ShotHandler.scheduleNewShot();
        }else{
            return;
        }
    }


}

公共类ShotHandler {

public static int shotX = Screen.shipPosX;
public static int shotY = Screen.shipPosY + 25;




public static void scheduleNewShot() {
    //All this does is set a boolean to 'false', not allowing you to fire any more shots until a second has passed.
    new ShotScheduler(1);


    new Shot(25);
}

}

public class Shot扩展了ShotHandler {

public Shot(int par1){

    //This is my own method to draw a image. The first parameter is the graphics object that i need to draw.
    GUI.drawImage(*????????*, "res/spaceinvaders/shot.gif", ShotHandler.shotX, ShotHandler.shotY);

}
            //Dont worry about this, i was just testing something
    for(int i = 0; i <= par1; i++){
        ShotHandler.shotY++;
    }
}

}

谢谢你们!任何帮助将不胜感激!

(这是重新发布的,因为我最后一次发布这个,我没有得到足够的答案,至少在我的技能水平上)

1 个答案:

答案 0 :(得分:3)

首先看看

您可能还会发现Concurrency in Swing有用。

基本要点是你应该有某种模型来描述任何时刻游戏的状态。此模型在事件调度线程的内容之外更新,通常在某种后台线程中,其中执行更新所花费的时间不会影响Swing继续运行并保持对用户的响应的能力。

您需要覆盖JPanel的{​​{1}}方法。在这里,您可以将模型状态绘制到屏幕上。

还有许多其他技术可以讨论,但让我们开始吧

...实例