Java elsif与nextboolean一起用于图片
我正在用仙人掌图片制作一个游戏,但当我编写代码时,如果它试图在图片之间切换,它将停止并冻结在该点上。否则,如果它不工作,我也会使用BuffereImage处理图片 我的代码:Java elsif与nextboolean一起用于图片,java,if-statement,random,boolean,bufferedimage,Java,If Statement,Random,Boolean,Bufferedimage,我正在用仙人掌图片制作一个游戏,但当我编写代码时,如果它试图在图片之间切换,它将停止并冻结在该点上。否则,如果它不工作,我也会使用BuffereImage处理图片 我的代码: packageobjectgame; 导入java.awt.Graphics; 导入java.awt.Image; 导入java.awt.image.buffereImage; 导入java.util.ArrayList; 导入java.util.List; 导入java.util.Random; 导入实用资源; 公共类E
packageobjectgame;
导入java.awt.Graphics;
导入java.awt.Image;
导入java.awt.image.buffereImage;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
导入实用资源;
公共类EnemiesManager{
私人名单敌人;
私有随机;
专用缓冲区imagecactus1、imagecactus2、imagecactus3;
公共敌人管理者(){
敌人=新的ArrayList();
imagecactus1=Resource.getResourceImage(“data/cactus1.png”);
imagecactus2=Resource.getResourceImage(“data/cactus2.png”);
imagecactus3=Resource.getResourceImage(“data/cactus3.png”);
随机=新随机();
添加(getRandomCactus());
随机=新随机();
}
公共无效更新(){
对于(敌人e:敌人){
e、 更新();
}
敌人第一敌人=敌人。获取(0);
if(first敌军.isOutOfScreen()){
敌人。移除(第一个敌人);
添加(getRandomCactus());
}
}
公共空间绘制(图g){
对于(敌人e:敌人){
e、 抽签(g);
}
}
私人仙人掌{
仙人掌;
仙人掌=新仙人掌();
仙人掌(600);
if(random.nextBoolean()){
仙人掌图像(图像仙人掌1);
}
否则{
仙人掌图像(图像仙人掌2);
}
还仙人掌;
}
}
新类
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);
}
}
packageobjectgame;
导入java.awt.Graphics;
导入java.awt.Image;
导入java.awt.Rectangle;
导入java.awt.image.buffereImage;
导入实用资源;
公营仙人掌{
私有缓冲图像;
私有int-posX,posY;
私有矩形矩形;
公共仙人掌(){
image=Resource.getResourceImage(“data/cactus1.png”);
posX=200;
posY=83;
rect=新矩形();
}
公共无效更新(){
posX-=3;
rect.x=posX;
rect.y=posY;
rect.width=image.getWidth();
rect.height=image.getHeight();
}
@凌驾
公共矩形getBound(){
返回矩形;
}
@凌驾
公共空间绘制(图g){
g、 drawImage(image,posX,posY,null);
}
公共无效集合x(整数x){
posX=x;
}
公共空间设置(整数y){
posY=y;
}
public void setImage(buffereImage图像){
这个图像=图像;
}
@凌驾
公共布尔值isOutOfScreen(){
返回(posX+image.getWidth()<0);
}
}
问题是什么?这是信息管理器中的代码和图片中的详细信息。我试过很多教程,但没有一个是正确的,总是稍微偏离了随机布尔的目的。我使用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;
}
您可能会遇到一些问题,主要原因是您多次被称为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;
}
注意:
随机。nextInt(3)
返回从0到2的int
,即0或1或2。干净的方法如下:
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)
返回一个从0到2的int
,即0或1或2。问题是,有两个文件名为cactus3.png,而且有一个空间太多。谢谢你和我一起思考。问题出在两个名为cactus3.png的文件中,还有一个空间太大。谢谢你和我一起思考。我想你应该更详细地解释一下你所说的“它会停止,什么都不起作用”是什么意思?它会崩溃吗?结果与你所希望的不同吗?显示声明变量“random”的上下文也会有所帮助。祝你好运。是的,当新的仙人掌出现时,它会崩溃游戏会冻结你想要整个班级的仙人掌吗?我想你应该更详细地解释你所说的“它会停止,没有任何工作”是什么意思?它会崩溃吗?结果与你所希望的不同吗?显示声明变量“random”的上下文也会有所帮助。祝你好运。是的,当新的仙人掌出现时它会崩溃游戏会冻结你想要整个班级的仙人掌吗如果我尝试你的代码我会有很多错误游戏不起作用他把图片放在一起,然后什么都没有动如果我尝试你的代码我会有很多错误游戏不起作用他把图片放在一起,然后什么都没有动我使用BuffereImage当我尝试此操作时,我不会work@kajvans-解决方案仍然有效。只需将图像
替换为缓冲图像
。我已经更新了我的答案。如果有任何疑问/问题,请立即尝试并随时发表评论。如果我现在尝试,游戏将以Freezing开始。您的代码中的其他地方似乎存在问题。为了进一步帮助你