我知道这可能已经得到了解答,但是在我发现它的所有地方,它都无法正常工作。我在Greenfoot制作游戏,而且我遇到了问题。因此,每次计数器达到600时,我都会生成一个随机数,然后测试该随机生成的数字是否等于1,如果是,则创建一个对象。出于某种原因,每次计数器达到600时都会创建对象。我对Java有点新鲜,所以它可能很简单。
import greenfoot.*;
import java.util.Random;
/**
* Write a description of class Level_One here.
*
* @CuddlySpartan
*/
public class Level_One extends World
{
Counter counter = new Counter();
/**
* Constructor for objects of class Level_One.
*
*/
public Level_One()
{
super(750, 750, 1);
prepare();
}
public Counter getCounter()
{
return counter;
}
private void prepare()
{
addObject(counter, 150, 40);
Ninad ninad = new Ninad();
addObject(ninad, getWidth()/2, getHeight()/2);
Fail fail = new Fail();
addObject(fail, Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
}
private int spawnCounter = 0;
private int invincibleCounter = 0;
Random random = new Random();
private int randomNumber;
public void act()
{
controls();
{if (spawnCounter > 500) {
spawnCounter = 0;
addObject(new Fail(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
}
spawnCounter++;
{if (spawnCounterTwo > 300) {
spawnCounterTwo = 0;
addObject(new APlus(), Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
}
spawnCounterTwo++;
}
if (invincibleCounter > 600)
{
int randomNumber = random.nextInt(10);
if (randomNumber == 1)
{
Invincible invincible = new Invincible();
addObject(invincible, Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
invincibleCounter = 0;
}
if (randomNumber == 2)
{
Storm storm = new Storm();
addObject(storm, Greenfoot.getRandomNumber(getWidth()), Greenfoot.getRandomNumber(getHeight()));
}
else
{
}
}
invincibleCounter ++;
}
}
private int spawnCounterTwo = 100;
public void controls()
{
if (Greenfoot.isKeyDown("escape"))
{
Greenfoot.stop();
}
}
}
我没有收到错误,因为它编译得很好,但是当我运行它时我有问题。有帮助吗?提前致谢!
答案 0 :(得分:1)
这只是猜测,因为我看不到你的其余代码,但我怀疑你是用一些常数来播种你的随机数发生器。因此,每次运行程序时,随机数生成器都会以相同的顺序生成数字。为了确认这一点,请显示更多代码。
此外,您的括号不匹配,因此至少请显示足够的代码以匹配大括号。
答案 1 :(得分:0)
你确定它是在计数器达到600时准确创建的吗?您每帧都会递增计数器,并且默认为~30 fps速度,即20秒。然后在每一帧之后,你获得一个随机整数并有10%的几率创造一个无敌。但10%的概率平均会在10帧内出现,即1/3秒。然后计数器将重置,你将等待二十秒,然后在下一秒内创建一个无敌,依此类推。如果你想要每20秒有10%的几率,你需要在else分支中重置Counter,以及"然后"分支(或者只是在你的第一个if内部重置它。)