Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 - Fatal编程技术网

Java 同时初始化多个图像

Java 同时初始化多个图像,java,swing,Java,Swing,我对java非常陌生,我正在努力实现一个pacman游戏,我使用一个图像初始化了一个幽灵,目前在我的游戏中使用了一个对象,但我希望有多个图像,这样我就可以有不同颜色的幽灵。但当我初始化多个图像时,它们只是重叠在另一个图像上。这是我如何初始化鬼魂的 private Image RedGhost; private Image pacman1, pacman2up, pacman2left, pacman2right, pacman2down; 这里是我用来移动鬼魂的代码 private void

我对java非常陌生,我正在努力实现一个pacman游戏,我使用一个图像初始化了一个幽灵,目前在我的游戏中使用了一个对象,但我希望有多个图像,这样我就可以有不同颜色的幽灵。但当我初始化多个图像时,它们只是重叠在另一个图像上。这是我如何初始化鬼魂的

private Image RedGhost;
private Image pacman1, pacman2up, pacman2left, pacman2right, pacman2down;
这里是我用来移动鬼魂的代码

private void moveGhosts(Graphics2D g2d) {

        short i;
        int pos;
        int count;

        for (i = 0; i < nrofghosts; i++) {
            if (ghostx[i] % blocksize == 0 && ghosty[i] % blocksize == 0) {
                pos = ghostx[i] / blocksize + nrofblocks * (int) (ghosty[i] / blocksize);

                count = 0;

                if ((screendata[pos] & 1) == 0 && ghostdx[i] != 1) {
                    dx[count] = -1;
                    dy[count] = 0;
                    count++;
                }

                if ((screendata[pos] & 2) == 0 && ghostdy[i] != 1) {
                    dx[count] = 0;
                    dy[count] = -1;
                    count++;
                }

                if ((screendata[pos] & 4) == 0 && ghostdx[i] != -1) {
                    dx[count] = 1;
                    dy[count] = 0;
                    count++;
                }

                if ((screendata[pos] & 8) == 0 && ghostdy[i] != -1) {
                    dx[count] = 0;
                    dy[count] = 1;
                    count++;
                }

                if (count == 0) {

                    if ((screendata[pos] & 15) == 15) {
                        ghostdx[i] = 0;
                        ghostdy[i] = 0;
                    } else {
                        ghostdx[i] = -ghostdx[i];
                        ghostdy[i] = -ghostdy[i];
                    }

                } else {

                    count = (int) (Math.random() * count);
                    if (count > 3) {
                        count = 3;
                    }

                    ghostdx[i] = dx[count];
                    ghostdy[i] = dy[count];
                }

            }

            ghostx[i] = ghostx[i] + (ghostdx[i] * ghostspeed[i]);
            ghosty[i] = ghosty[i] + (ghostdy[i] * ghostspeed[i]);
            drawGhost(g2d, ghostx[i] + 1, ghosty[i] + 1);
            //drawblueGhost(g2d, ghostx[i] + 1, ghosty[i] + 1);

            if (pacmanx > (ghostx[i] - 12) && pacmanx < (ghostx[i] + 12)
                && pacmany > (ghosty[i] - 12) && pacmany < (ghosty[i] + 12)
                && ingame) {

                dying = true;
            }
        }
    }
private void moveGhosts(Graphics2D g2d){
短i;
int pos;
整数计数;
对于(i=0;i3){
计数=3;
}
鬼影dx[i]=dx[count];
鬼魂[i]=dy[count];
}
}
ghostx[i]=ghostx[i]+(ghostdx[i]*ghostspeed[i]);
幽灵[i]=幽灵[i]+(幽灵[i]*幽灵速度[i]);
drawGhost(g2d,ghostx[i]+1,ghosty[i]+1);
//drawblueGhost(g2d,ghostx[i]+1,ghosty[i]+1);
if(pacmanx>(ghostx[i]-12)和&pacmanx<(ghostx[i]+12)
&&pacmany>(幽灵[i]-12)和&pacmany<(幽灵[i]+12)
&&(英加梅){
死亡=真实;
}
}
}

总之,所有重影当前都是红色的,我希望它是不同的颜色。

使用当前代码,您可以修改drawGhost方法,以获取所绘制重影颜色的标识符。然后,您可以拥有另一个数组,该数组保存每个重影颜色的标识符

但是,由于您使用的是Java,我建议您利用OOP并创建一个Ghost类来保存Ghost的所有属性(x位置、y位置、颜色等)。然后,您可以拥有代表每个单独重影的重影对象集合

以下是一个例子:

创建一个包含重影可以具有的所有属性的重影类:

public class Ghost {
    private String color;
    private int x;
    private int y;
    private boolean alive;
    // getters and setters. You could even move the logic for moving a ghost to this class
    ...
}
然后您将初始化重影,如下所示:

Ghost redGhost = new Ghost("Red");
Ghost greenGhost = new Ghost("Green");
Ghost pinkGhost = new Ghost("Pink");
private void moveGhosts(Graphics2D g2d) {
    // Utilize an enhanced for loop
    for(Ghost ghost : ghosts){
        ...
        ...
        ghostx[i] = ghostx[i] + (ghostdx[i] * ghostspeed[i]);
        ghosty[i] = ghosty[i] + (ghostdy[i] * ghostspeed[i]);
        drawGhost(g2d, ghost);

        if (pacmanx > (ghostx[i] - 12) && pacmanx < (ghostx[i] + 12)
        ...
        ...
    }
}
您可以将它们存储在一个集合中:

Set<Ghost> ghostSet = new HashSet<Ghost>();
ghostSet.add(redGhost);
...
Set ghostSet=new HashSet();
添加(红色重影);
...
然后,您的方法可以更改为以下内容:

Ghost redGhost = new Ghost("Red");
Ghost greenGhost = new Ghost("Green");
Ghost pinkGhost = new Ghost("Pink");
private void moveGhosts(Graphics2D g2d) {
    // Utilize an enhanced for loop
    for(Ghost ghost : ghosts){
        ...
        ...
        ghostx[i] = ghostx[i] + (ghostdx[i] * ghostspeed[i]);
        ghosty[i] = ghosty[i] + (ghostdy[i] * ghostspeed[i]);
        drawGhost(g2d, ghost);

        if (pacmanx > (ghostx[i] - 12) && pacmanx < (ghostx[i] + 12)
        ...
        ...
    }
}
private void moveGhosts(Graphics2D g2d){
//利用增强的for循环
用于(鬼:鬼){
...
...
ghostx[i]=ghostx[i]+(ghostdx[i]*ghostspeed[i]);
幽灵[i]=幽灵[i]+(幽灵[i]*幽灵速度[i]);
drawGhost(g2d,ghost);
if(pacmanx>(ghostx[i]-12)和&pacmanx<(ghostx[i]+12)
...
...
}
}

现在drawGhost方法将查看ghost类中的字段(通过调用getter和setter方法)确定要开始绘制的x和y。颜色字段用于确定要绘制的图像。

使用当前代码,可以修改drawGhost方法以获取绘制的重影颜色的标识符。然后,可以使用另一个数组来保存每个重影颜色的标识符

但是,由于您使用的是Java,我建议您利用OOP并创建一个包含所有Ghost属性(x位置、y位置、颜色等)的Ghost类。然后,您可以拥有一个代表每个Ghost的Ghost对象集合

以下是一个例子:

创建一个包含重影可以具有的所有属性的重影类:

public class Ghost {
    private String color;
    private int x;
    private int y;
    private boolean alive;
    // getters and setters. You could even move the logic for moving a ghost to this class
    ...
}
然后您将初始化重影,如下所示:

Ghost redGhost = new Ghost("Red");
Ghost greenGhost = new Ghost("Green");
Ghost pinkGhost = new Ghost("Pink");
private void moveGhosts(Graphics2D g2d) {
    // Utilize an enhanced for loop
    for(Ghost ghost : ghosts){
        ...
        ...
        ghostx[i] = ghostx[i] + (ghostdx[i] * ghostspeed[i]);
        ghosty[i] = ghosty[i] + (ghostdy[i] * ghostspeed[i]);
        drawGhost(g2d, ghost);

        if (pacmanx > (ghostx[i] - 12) && pacmanx < (ghostx[i] + 12)
        ...
        ...
    }
}
您可以将它们存储在一个集合中:

Set<Ghost> ghostSet = new HashSet<Ghost>();
ghostSet.add(redGhost);
...
Set ghostSet=new HashSet();
添加(红色重影);
...
然后,您的方法可以更改为以下内容:

Ghost redGhost = new Ghost("Red");
Ghost greenGhost = new Ghost("Green");
Ghost pinkGhost = new Ghost("Pink");
private void moveGhosts(Graphics2D g2d) {
    // Utilize an enhanced for loop
    for(Ghost ghost : ghosts){
        ...
        ...
        ghostx[i] = ghostx[i] + (ghostdx[i] * ghostspeed[i]);
        ghosty[i] = ghosty[i] + (ghostdy[i] * ghostspeed[i]);
        drawGhost(g2d, ghost);

        if (pacmanx > (ghostx[i] - 12) && pacmanx < (ghostx[i] + 12)
        ...
        ...
    }
}
private void moveGhosts(Graphics2D g2d){
//利用增强的for循环
用于(鬼:鬼){
...
...
ghostx[i]=ghostx[i]+(ghostdx[i]*ghostspeed[i]);
幽灵[i]=幽灵[i]+(幽灵[i]*幽灵速度[i]);
drawGhost(g2d,ghost);
if(pacmanx>(ghostx[i]-12)和&pacmanx<(ghostx[i]+12)
...
...
}
}

现在drawGhost方法将查看ghost类中的字段(通过调用getter和setter方法)确定要开始绘制的x和y。颜色字段用于确定要绘制的图像。

谢谢Mike M您介意为建议的编码提供几行示例吗?谢谢Mike M您介意为建议的编码提供几行示例吗