Java 同时初始化多个图像
我对java非常陌生,我正在努力实现一个pacman游戏,我使用一个图像初始化了一个幽灵,目前在我的游戏中使用了一个对象,但我希望有多个图像,这样我就可以有不同颜色的幽灵。但当我初始化多个图像时,它们只是重叠在另一个图像上。这是我如何初始化鬼魂的Java 同时初始化多个图像,java,swing,Java,Swing,我对java非常陌生,我正在努力实现一个pacman游戏,我使用一个图像初始化了一个幽灵,目前在我的游戏中使用了一个对象,但我希望有多个图像,这样我就可以有不同颜色的幽灵。但当我初始化多个图像时,它们只是重叠在另一个图像上。这是我如何初始化鬼魂的 private Image RedGhost; private Image pacman1, pacman2up, pacman2left, pacman2right, pacman2down; 这里是我用来移动鬼魂的代码 private void
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您介意为建议的编码提供几行示例吗