gpt4 book ai didi

java - 同时初始化多个图像

转载 作者:行者123 更新时间:2023-12-02 03:42:47 25 4
gpt4 key购买 nike

我对java很陌生,我正在实现一个pacman游戏,我使用一个图像初始化了一个幽灵,并且当前在我的游戏中使用一个对象,但我想要多个图像,这样我就可以有不同的颜色鬼魂。但是当我初始化多个图像时,它们只是重叠在另一个图像上。这是我初始化 Ghost 的方法

private Image RedGhost;
private Image pacman1, pacman2up, pacman2left, pacman2right, pacman2down;

这是我用来移动Ghosts 的代码

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;
}
}
}

在夏天,所有幽灵目前都是红色的,我希望它是不同的颜色

最佳答案

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

但是,由于您使用的是 Java,我建议您利用 OOP 并创建一个 Ghost 类来保存幽灵的所有属性(x 位置、y 位置、颜色等)。然后,您可以拥有代表每个单独幽灵的 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");

您可以将它们存储在一个集合中:

Set<Ghost> ghostSet = new HashSet<Ghost>();
ghostSet.add(redGhost);
...

那么你的方法可以更改为如下所示:

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)
...
...
}
}

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

关于java - 同时初始化多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36653878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com