Java 某种类型的z索引,并在Applet中绘制内容

Java 某种类型的z索引,并在Applet中绘制内容,java,applet,Java,Applet,我正在使用awt制作一个java小程序。我知道它很旧,但我们的教授要求我们使用它,所以请耐心点。我的问题是图像的分层。现在,要在另一个图像上分层,我必须先显示我想要在另一个图像上的每个图像,然后再显示其他图像。这使得事情变得相当复杂和混乱。有没有办法(媒体跟踪器或其他东西)使一个图像1始终位于另一个图像2的顶部 另外,我正在制作的程序是一个地牢爬虫类型的游戏。屏幕由一个5x5区域块填充,每个区域块的图像大小为32像素。比如: [W][W][ ][ ][W] [W][ ][ ][ ][W] [W]

我正在使用awt制作一个java小程序。我知道它很旧,但我们的教授要求我们使用它,所以请耐心点。我的问题是图像的分层。现在,要在另一个图像上分层,我必须先显示我想要在另一个图像上的每个图像,然后再显示其他图像。这使得事情变得相当复杂和混乱。有没有办法(媒体跟踪器或其他东西)使一个图像1始终位于另一个图像2的顶部

另外,我正在制作的程序是一个地牢爬虫类型的游戏。屏幕由一个5x5区域块填充,每个区域块的图像大小为32像素。比如:

[W][W][ ][ ][W]
[W][ ][ ][ ][W]
[W][W][W][ ][ ]
[ ][W][ ][ ][ ]
[ ][ ][ ][ ][ ]
其中[W]是墙图像,[]是路径图像。问题是,我希望这组图像始终显示,并且只在角色在图像中移动时重新绘制。是否有一种方法可以在调用“重新绘制”时不清除这些图像

这是我的密码:

public class GUI extends Applet implements KeyListener {
    int imageSize = 32;
    int dimensions = imageSize*5; //makes the display 5x5
    Image pathImage, wallImage, playerImage;
    MediaTracker mt;

    public void init() {
        this.setSize(dimensions, dimensions);
        mt = new MediaTracker();
        pathImage = getImage(getCodeBase(), "path.gif"); //all the images are stills
        wallImage = getImage(getCodeBase(), "wall.gif");
        playerImage = getImage(getCodeBase(), "player.gif");
        mt.addImage(pathImage, 0);
        mt.addImage(wallImage, 1);
        mt.addImage(playerImage, 2);
        addKeyListener(this);
    }

    public void paint(Graphics g) {
        try {
            tracker.waitForAll();
        } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

//this first one prints the first three layers from the top of the 5x5 display
 int x = 0;
            int y = 0;
            for(int i = 0; i < 3; i++) {
                for(int j = 0; j < 5; j++) {
                        switch(Global.currentMap.getTileMap(player.getXCoordinate() + j - 2,                  

  player.getYCoordinate() + i - 2).getImageID()) {
                        case "path":
                            g.drawImage(pathImage, x, y, imageSize, imageSize, this);
                            break;
                        case "wall":
                            g.drawImage(wallImage, x, y - imageSize/2, imageSize, imageSize*3/2,   
this);
                            break;
                    }
                    x += imageSize;
                }
                y += imageSize;
                x = 0;
            }

            //this one draws the player so that it's on top of the top 3 layers
            g.drawImage(bird[face], imageSize*2, imageSize, imageSize, imageSize*2, this);

            //this one draws the last two layers so they're on top of the player
            for(int i = 3; i < 5; i++) {
                for(int j = 0; j < 5; j++) {
                    switch(Global.currentMap.getTileMap(player.getXCoordinate() + j - 2,                 
player.getYCoordinate() + i - 2).getImageID()) {
                        case "wall":
                            g.drawImage(wallImage, x, y - imageSize/2, imageSize, imageSize*3/2,         

this);
                            break;
                        case "path":
                            g.drawImage(pathImage, x, y, imageSize, imageSize, this);
                            break;
                    }
                    x += imageSize;
                }
                y += imageSize;
                x = 0;
            }
    }
公共类GUI扩展小程序实现KeyListener{
int imageSize=32;
int dimensions=imageSize*5;//显示5x5
图像路径图像、墙图像、玩家图像;
MediaTracker mt;
公共void init(){
此.设置尺寸(尺寸、尺寸);
mt=新的MediaTracker();
pathImage=getImage(getCodeBase(),“path.gif”);//所有图像都是静态图像
wallImage=getImage(getCodeBase(),“wall.gif”);
playerImage=getImage(getCodeBase(),“player.gif”);
mt.addImage(路径图像,0);
阿迪马奇山(wallImage,1);
阿迪马奇山(playerImage,2);
addKeyListener(此);
}
公共空间涂料(图g){
试一试{
tracker.waitForAll();
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//第一个从5x5显示器顶部打印前三层
int x=0;
int y=0;
对于(int i=0;i<3;i++){
对于(int j=0;j<5;j++){
开关(Global.currentMap.getTileMap(player.getXCoordinate()+j-2,
player.getYCoordinate()+i-2.getImageID()){
案例“路径”:
g、 drawImage(pathImage,x,y,imageSize,imageSize,this);
打破
案例“墙”:
g、 drawImage(墙图像,x,y-图像大小/2,图像大小,图像大小*3/2,
这),;
打破
}
x+=图像大小;
}
y+=图像大小;
x=0;
}
//这一个绘制玩家,使其位于前3层的顶部
g、 drawImage(鸟[脸],imageSize*2,imageSize,imageSize,imageSize*2,本);
//这一个画最后两层,所以他们在球员的顶部
对于(int i=3;i<5;i++){
对于(int j=0;j<5;j++){
开关(Global.currentMap.getTileMap(player.getXCoordinate()+j-2,
player.getYCoordinate()+i-2.getImageID()){
案例“墙”:
g、 drawImage(墙图像,x,y-图像大小/2,图像大小,图像大小*3/2,
这),;
打破
案例“路径”:
g、 drawImage(pathImage,x,y,imageSize,imageSize,this);
打破
}
x+=图像大小;
}
y+=图像大小;
x=0;
}
}
上面的代码不是同一个代码。但我希望它能说明我的观点,我必须对图像进行分层

以下是一个示例输出:


谢谢。

你的问题太广泛了,这个网站不适合回答这样的问题:)对不起!我在键入标签LOL时不小心按了enter键。它现在已经被修复了。:)没关系。不必道歉。只需发布一些代码即可。到目前为止,你所做的一切谢谢:)