在我创建的游戏中,我只希望僵尸能够每分钟击中玩家2次,而不是拿走洞健康条,因为它会让玩家快速受伤。
public void checkCollision(){
Rectangle r3 = player.getBounds();
for(int i = 0; i < zombie.size(); i++){
Zombie z = (Zombie) zombie.get(i);
Rectangle r2 = z.getBounds();
if(r3.intersects(r2)){
if(!player.getInvincibility()){
player.setHealth(player.getHealth() - 10);
player.setInvincibility(true);
}
}
}
}
这是检查玩家和僵尸碰撞的代码。我这样做是为了让玩家只受到10点伤害,但这样玩家就再也不会受到伤害了。我尝试使用if语句来检查玩家是否无敌,并且在if语句中有一个for循环,当int达到30000时,该循环会使玩家死亡,但僵尸仍然会以如此快的速度伤害玩家,以至于洞健康条被拿走。
我喜欢创建一个警报类来处理诸如“等待10帧,然后打印‘Hello world!’到控制台”之类的事情:
public class Alarm {
//'timer' holds the frames left until the alarm goes off.
int timer;
//'is_started' is true if the alarm has ben set, false if not.
boolean is_started;
public Alarm() {
timer = 0;
is_started = false;
}
public void set(int frames) {
//sets the alarm to go off after the number of frames specified.
timer = frames;
is_started = true;
}
public void tick() {
//CALL THIS EVERY FRAME OR ELSE THE ALARM WILL NOT WORK! Decrements the timer by one if the alarm has started.
if (is_started) {
timer -= 1;
}
}
public void cancel() {
//Resets the frames until the alarm goes off to zero and turns is_started off
timer = 0;
is_started = false;
}
public boolean isGoingOff() {
//Call this to check if the alarm is going off.
if (timer == 0 && is_started == true) {
return true;
}
else {
return false;
}
}
}
您可以这样制作一个无敌帧(假设玩家有一个名为invincibility_Alarm的警报,当僵尸击中玩家时,它被设置为30帧):
//Pretend this is your gameloop:
while (true) {
if (player.invincibility_alarm.isGoingOff()) {
player.setInvincibility(false);
player.invincibility_alarm.cancel();
}
player.invincibility_alarm.tick();
Thread.sleep(10);
}
有一个每帧都调用的方法 - 称之为更新计时器或其他方法。这种方法应该将玩家的无敌计时器减少一定数量。然后,如果玩家拥有非零无敌定时器,则在CheckCollission中容易受到伤害,这也会将无敌定时器设置为设定的数字。
对僵尸使用攻击冷却时间。
在我的游戏里,我有这样的东西
public boolean isReadyToAttack() {
boolean ret;
long delta = System.currentTimeMillis() - t0;
timer += delta;
if (timer > attackCooldown) {
timer = 0;
ret = true;
} else {
ret = false;
}
t0 = System.currentTimeMillis();
return ret;
}
然后你只需在循环中检查一下,如果僵尸还没有准备好攻击,即使他很近也不会攻击(事实上,最好在碰撞前检查冷却时间,这比较便宜)ø
我让敌人随机移动并看着玩家,现在我想让敌人射击玩家,我不知道为什么,但射击完全随机,正如你在下面的gif中看到的(你按左ctrl射击)。 无论如何,这是玩家类: 这是我的敌人类: 这是我的子弹课: 如果你想测试代码,我已经删除了不必要的东西:< br > https://pastebin.com/HT93hUzt 您可以在此处下载替换图像来测试代码(记得更改图像加载字符串!): https://w
我正在制作的网站可以在德语和英语之间切换显示语言。Shaka player似乎支持本地化切换,但我无法用英语以外的任何语言显示该播放器。尝试在新沙卡上使用changeLocale。用户界面。本地化实例,但它似乎对玩家没有影响。 如果能在不同地区之间切换,我将不胜感激。
当玩家或敌人被击中时,我希望他们的精灵变成红色。从本质上讲,我想要在精灵上显示透明的红色效果。皮游戏是否提供了一种方法来做到这一点?(我使用多个图像,因为角色是动画的,所以创建一个红色的精灵,只是闪烁而不是正常的子画面是行不通的)
我的程序要求用户输入牌数和玩家数。我只是想打印出每个玩家的卡片。ex.(球员1:黑桃王牌,红桃两枚。球员2:梅花两枚等)我已经把它打印出来了,但它似乎只打印出一套卡片,尽管玩家的数量中输入了2张。这是我的密码。 手类: 我的司机: 我得到的输出: 我想让它打印出两套卡片,而不是一套,但从逻辑上讲,我不知道该怎么做。任何帮助都会很好,谢谢。
快速笔记。这是我的高级NEA编程项目。有两个主要部分——一个是生成迷宫,用户必须在给定的时间段内通过它,该时间段当前没有实现,第二个部分是用户必须回答教育物理问题以获得最佳分数。问题从本地存储在我的系统上的文本文件中导入。然后,用户的分数和完成日期一起导出到本地文本文件中。 到目前为止,我的程序生成迷宫,用户可以自由移动。教育方面按预期工作。 我该从哪里开始,让墙壁充当物理屏障,而不仅仅是视觉屏障
为什么我的保安(S)和唐纳德(D)处于相同的位置。 地图应该是这样打印出来的 [D----] [- - - - -] [- - - - -] [--S-] [--P--] 但它却像这样出现 [S----] [- - - - -] [- - - - -] [- - - - -] [--P--] 所以正如你在这里看到的,我把安全位置设为[3,2],但出于某种原因,它没有将其识别为[3,2],并将安全位