带有 nextboolean 的 elsif 用于图片
elsif with nextboolean for pictures
我正在用仙人掌图片制作游戏,但是当我执行我的代码时,如果它试图在图片之间切换,它将停止并冻结在那个点上,否则如果它不起作用我也使用 bufferedimage 作为图片
我的代码:
package objectgame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import util.Resource;
public class EnemiesManager {
private List<Enemy> enemies;
private Random random;
private BufferedImage imagecactus1, imagecactus2, imagecactus3 ;
public EnemiesManager() {
enemies = new ArrayList<Enemy>();
imagecactus1 = Resource.getResourceImage("data/cactus1.png");
imagecactus2 = Resource.getResourceImage("data/cactus2.png");
imagecactus3 = Resource.getResourceImage("data/cactus3.png");
random = new Random();
enemies.add(getRandomCactus());
random = new Random();
}
public void update() {
for(Enemy e: enemies) {
e.update();
}
Enemy firstEnemy = enemies.get(0);
if(firstEnemy.isOutOfScreen()) {
enemies.remove(firstEnemy);
enemies.add(getRandomCactus());
}
}
public void draw(Graphics g) {
for(Enemy e: enemies) {
e.draw(g);
}
}
private Cactus getRandomCactus() {
Cactus cactus;
cactus = new Cactus();
cactus.setX(600);
if(random.nextBoolean()) {
cactus.setImage(imagecactus1);
}
else{
cactus.setImage(imagecactus2);
}
return cactus;
}
}
新class
package objectgame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import util.Resource;
public class Cactus extends Enemy{
private BufferedImage image;
private int posX, posY;
private Rectangle rect;
public Cactus() {
image = Resource.getResourceImage("data/cactus1.png");
posX = 200;
posY = 83;
rect = new Rectangle();
}
public void update() {
posX -= 3;
rect.x = posX;
rect.y = posY;
rect.width = image.getWidth();
rect.height = image.getHeight();
}
@Override
public Rectangle getBound() {
return rect;
}
@Override
public void draw(Graphics g) {
g.drawImage(image, posX, posY, null);
}
public void setX(int x) {
posX = x;
}
public void setY(int y) {
posY = y;
}
public void setImage(BufferedImage images) {
this.image = images;
}
@Override
public boolean isOutOfScreen() {
return (posX + image.getWidth() < 0);
}
}
这是什么问题,这是动画管理器的代码和图片的细节。我已经尝试了很多教程,但是 none 正确的工作总是稍微偏离随机布尔的目的。我使用 eclipse,所以我不会收到任何特定于错误发生位置的错误。我也确实使用了调试器,但没有正常工作。所以我真的需要你们的帮助。
您可能 运行 遇到问题有几个原因,主要原因是您被多次调用 Random.nextBoolean()。当你这样做时,它每次都会给你一个新的价值。您希望设置一个等于 Random.nextBoolean() 的变量。
此外,由于您似乎是在三张不同的图片之间进行选择,而不是两张。为此,我建议您改用 Random.nextInt:
private Cactus getRandomCactus() {
Cactus cactus;
cactus = new Cactus();
int randomInt = random.nextInt(0, 3); // this only called random.nextInt once, and gives me a random number between 0 and 2
cactus.setX(600);
if(randomInt == 0) {
cactus.setImage(imagecactus1);
}
else if (randomInt == 1) {
cactus.setImage(imagecactus2);
}
else {
cactus.setImage(imagecactus3);
}
return cactus;
}
一个干净的方法如下:
private Cactus getRandomCactus() {
Cactus cactus = new Cactus();
cactus.setX(600);
BufferedImage [] images = {imagecactus1, imagecactus2, imagecactus3};
cactus.setImage(images[random.nextInt(3)]);
return cactus;
}
注: random.nextInt(3)
returns 一个从 0 到 2 的 int
,即 0 或 1 或 2。
问题是哪里有 2 个文件叫 cactus3.png,还有一个 space 太多了。谢谢你和我一起思考。
我正在用仙人掌图片制作游戏,但是当我执行我的代码时,如果它试图在图片之间切换,它将停止并冻结在那个点上,否则如果它不起作用我也使用 bufferedimage 作为图片 我的代码:
package objectgame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import util.Resource;
public class EnemiesManager {
private List<Enemy> enemies;
private Random random;
private BufferedImage imagecactus1, imagecactus2, imagecactus3 ;
public EnemiesManager() {
enemies = new ArrayList<Enemy>();
imagecactus1 = Resource.getResourceImage("data/cactus1.png");
imagecactus2 = Resource.getResourceImage("data/cactus2.png");
imagecactus3 = Resource.getResourceImage("data/cactus3.png");
random = new Random();
enemies.add(getRandomCactus());
random = new Random();
}
public void update() {
for(Enemy e: enemies) {
e.update();
}
Enemy firstEnemy = enemies.get(0);
if(firstEnemy.isOutOfScreen()) {
enemies.remove(firstEnemy);
enemies.add(getRandomCactus());
}
}
public void draw(Graphics g) {
for(Enemy e: enemies) {
e.draw(g);
}
}
private Cactus getRandomCactus() {
Cactus cactus;
cactus = new Cactus();
cactus.setX(600);
if(random.nextBoolean()) {
cactus.setImage(imagecactus1);
}
else{
cactus.setImage(imagecactus2);
}
return cactus;
}
}
新class
package objectgame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import util.Resource;
public class Cactus extends Enemy{
private BufferedImage image;
private int posX, posY;
private Rectangle rect;
public Cactus() {
image = Resource.getResourceImage("data/cactus1.png");
posX = 200;
posY = 83;
rect = new Rectangle();
}
public void update() {
posX -= 3;
rect.x = posX;
rect.y = posY;
rect.width = image.getWidth();
rect.height = image.getHeight();
}
@Override
public Rectangle getBound() {
return rect;
}
@Override
public void draw(Graphics g) {
g.drawImage(image, posX, posY, null);
}
public void setX(int x) {
posX = x;
}
public void setY(int y) {
posY = y;
}
public void setImage(BufferedImage images) {
this.image = images;
}
@Override
public boolean isOutOfScreen() {
return (posX + image.getWidth() < 0);
}
}
这是什么问题,这是动画管理器的代码和图片的细节。我已经尝试了很多教程,但是 none 正确的工作总是稍微偏离随机布尔的目的。我使用 eclipse,所以我不会收到任何特定于错误发生位置的错误。我也确实使用了调试器,但没有正常工作。所以我真的需要你们的帮助。
您可能 运行 遇到问题有几个原因,主要原因是您被多次调用 Random.nextBoolean()。当你这样做时,它每次都会给你一个新的价值。您希望设置一个等于 Random.nextBoolean() 的变量。
此外,由于您似乎是在三张不同的图片之间进行选择,而不是两张。为此,我建议您改用 Random.nextInt:
private Cactus getRandomCactus() {
Cactus cactus;
cactus = new Cactus();
int randomInt = random.nextInt(0, 3); // this only called random.nextInt once, and gives me a random number between 0 and 2
cactus.setX(600);
if(randomInt == 0) {
cactus.setImage(imagecactus1);
}
else if (randomInt == 1) {
cactus.setImage(imagecactus2);
}
else {
cactus.setImage(imagecactus3);
}
return cactus;
}
一个干净的方法如下:
private Cactus getRandomCactus() {
Cactus cactus = new Cactus();
cactus.setX(600);
BufferedImage [] images = {imagecactus1, imagecactus2, imagecactus3};
cactus.setImage(images[random.nextInt(3)]);
return cactus;
}
注: random.nextInt(3)
returns 一个从 0 到 2 的 int
,即 0 或 1 或 2。
问题是哪里有 2 个文件叫 cactus3.png,还有一个 space 太多了。谢谢你和我一起思考。