Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我调用新构造函数时,java运行太快_Java_Constructor - Fatal编程技术网

当我调用新构造函数时,java运行太快

当我调用新构造函数时,java运行太快,java,constructor,Java,Constructor,我目前正在玩一个2D跑步游戏,并在Java中进行实验。 我最近为玩家添加了一些物品。有硬币,速度助推器和生命之心 但是我意识到我不能产生超过1个这样的物品,因为一旦玩家抓到它们,让它们消失的条件就改变了。 我想我应该使用这样的构造函数: private static boolean presentspeed = true; public ItemSpeed(int x, int y) { if(presentspeed ) { while(y < 560)

我目前正在玩一个2D跑步游戏,并在Java中进行实验。 我最近为玩家添加了一些物品。有硬币,速度助推器和生命之心

但是我意识到我不能产生超过1个这样的物品,因为一旦玩家抓到它们,让它们消失的条件就改变了。 我想我应该使用这样的构造函数:

private static boolean presentspeed = true;

public ItemSpeed(int x, int y)
{
    if(presentspeed )
    {
        while(y < 560)
        {
            y += 1;
        }
        Drawer.drawImage(Load.Speed.getImage(), x+DrawAll.Xbackground, y, null);
        if(Player.x <= x+40 && Player.x >= x && Player.getY()+Player.textureY == y+40)
        {
            Player.BoostTimer += 100;
            presentspeed = false;
        }
    }
}
您可以看到有构造函数和没有构造函数


我的问题:我应该怎么做才能使它正常工作,因为它在技术上可以工作,但不可播放(我的电脑也不是问题所在)

也许你的意思是将代码的绘图块包含到一个
中,而像这样循环

private static boolean presentspeed = true;

public ItemSpeed(int x, int y)
{
    if(presentspeed )
    {
        while(y < 560)
        {
            y += 1;
            Drawer.drawImage(Load.Speed.getImage(), x+DrawAll.Xbackground, y, null);
            if(Player.x <= x+40 && Player.x >= x && Player.getY()+Player.textureY == y+40)
            {
                Player.BoostTimer += 100;
                presentspeed = false;
            }
        }
    }
}
private静态布尔presentspeed=true;
公共项目速度(整数x,整数y)
{
如果(当前速度)
{
而(y<560)
{
y+=1;
Drawer.drawImage(Load.Speed.getImage(),x+DrawAll.Xbackground,y,null);
如果(Player.x=x&&Player.getY()+Player.textureY==y+40)
{
Player.BoostTimer+=100;
presentspeed=false;
}
}
}
}
上一个
while
循环将立即运行,不会产生任何效果


总的来说,这段代码在很多方面都是错误的。不要在构造函数中进行如此复杂的计算——它不是一个适合它的地方。肯定会有并发问题。

好的,这完全是错误的。您需要将此逻辑移动到单个方法,该方法由某种主类/引擎调用。引擎应该在一定的时间间隔内调用包含这种逻辑的方法(对于每个游戏对象可能是单独的)

例如,如果你想每秒更新游戏状态30次,你应该让引擎每1/30秒运行一个方法,在这个方法中,你应该迭代所有游戏对象并运行它们各自的游戏逻辑方法,这些方法将执行计算和重绘。速度/速度/碰撞/重画。

如果您创建一个游戏对象界面,您可以将所有游戏对象添加到一个列表,该列表便于引擎进行迭代


如果您不确定这意味着什么,我建议您在继续之前阅读一些关于游戏制作的教程。

这些是并发性问题,在这里很可能无法解决。请阅读一些关于在Java中创建并发动画的内容;因为它所做的唯一的事情就是递增,直到它达到那个值。除此之外,将这种逻辑放在构造函数中是不合适的,它的目的只是创建并初始化对象,而不是别的。你应该重新考虑一下你是怎么做的。我无法理解代码的逻辑。您似乎在drawItems中创建了两个对象,但没有为它们保留一个实例,因此它们将悬空并在稍后清理。此外,所有速度对象都共享布尔值“presentSpeed”,因此一旦触发presentSpeed,所有速度对象都将消失,不再显示。虽然(y<560)仅用于将来的编码,但我计划根据它们下面的内容使项目在特定高度上繁殖(例如,如果有一个平台,物品可以放在上面,它会停在平台上)我刚用了560,因为它是地面。然后我要感谢你们所有人,我只是做错了,构造器不是我应该用的:)我会想些别的东西让它工作,谢谢!这就是我一开始做的。构造函数中的所有内容都是Item.java文件中的方法。我不能制作多个项目,因为它们都是在预设速度布尔值的条件下。使用构造函数的想法可能不是我应该做的…:)如果你觉得答案合理,并祝你在游戏中好运,不要忘记接受答案!:)
private static boolean presentspeed = true;

public ItemSpeed(int x, int y)
{
    if(presentspeed )
    {
        while(y < 560)
        {
            y += 1;
            Drawer.drawImage(Load.Speed.getImage(), x+DrawAll.Xbackground, y, null);
            if(Player.x <= x+40 && Player.x >= x && Player.getY()+Player.textureY == y+40)
            {
                Player.BoostTimer += 100;
                presentspeed = false;
            }
        }
    }
}