我目前正在娱乐自己并使用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;
}
}
}
正如您所看到的,当玩家在项目上时,布尔 presentpeed 会变为false,以便项目消失。 当这个函数只是 Items.java 文件中的一个函数时,这个有用(但是我只能生成1个项目,因为其他项目会随着第一个项目而消失)
但是现在我把它变成了一个构造函数(在 ItemSpeed.java 文件中)游戏运行得太快,玩家甚至无法触摸键盘以开始他已经丢失。< / p>
这是调用要生成的项目
的地方 public static void drawItems()
{
new ItemSpeed(600, 500);
new ItemSpeed(650, 500);
Items.Life(805, 500);
Items.Coins(1400, 500);
}
你可以看到构造函数和没有构造函数。
我的问题:我该怎么做才能让它正常工作,'因为它在技术上有效,但它不可玩(而且我的电脑不是问题)
答案 0 :(得分:2)
好的,这只是错误。您需要将此逻辑移动到单个方法,该方法由某种主类/ 引擎调用。包含这种逻辑的方法(对于每个游戏对象可能是独立的)应该在一定的时间间隔内由引擎调用。
例如,如果你想每秒更新你的游戏状态30次,你应该让你的引擎每1/30秒运行一个方法,在这个方法中你应该迭代你所有的游戏对象并运行他们各自的游戏逻辑方法将执行计算和重绘。转速/速度/碰撞/重绘。强>
如果您创建游戏对象界面,则可以将所有游戏对象添加到列表,这样引擎可以轻松迭代。
如果您不确定这意味着什么,我建议您在进一步阅读之前阅读一些有关游戏制作的教程。
答案 1 :(得分:0)
也许您打算将代码的绘图块包含在这样的while
循环中?:
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;
}
}
}
}
之前的while
循环会立即运行,不会产生任何影响。
总的来说,这个代码在很多层面看起来都是错误的。不要在构造函数中进行这样复杂的计算 - 它不适合它。肯定会出现并发问题。