返回介绍

4.2 敌人的产生

发布于 2024-07-13 13:19:34 字数 2118 浏览 0 评论 0 收藏 0

为了产生敌人,我们注册一个回调函数。它每秒都会被调用,然后随机的决定是否创建新敌人。为了实现随机效果,我们使用 Math.random() 方法产生一个伪随机数,伪随机数平均的分布于 0 到 1 之间(JavaScript 包含了一些预定义的内置函数)。

我们给新创建的精灵定义一个名字,为了生成一个几乎唯一的名字,我们用到两个函数。Math.random() 和 Math.ceil() 函数。Math.ceil 返回的是所给浮点数的近似整数值。联合上述两个函数,我们可以生成 0 到 1000 之间的随机整数。当然这并不是说,在同一时刻,两个精灵的 id 永远不会一样,而是说这很少见。

一旦通过 addSprite() 方法创建了新敌人,我们需要立即使用它,把它和之前定义的敌人类的实例相关联。一个好的做法是保持对象集合的分离因为这使得代码看起来更清洁。当然每次选择对象节点是要花点时间,但这却便于调试。

为了通过 jQuery 选择器往指定节点存储信息,必须使用[0]符号。当只有一个一个对象的时候,这是很有意义的。【var s = $( div ) jQuery 对象默认都有个 0 索引,s 为 jQuery 对象,s[0]为 dom 对象,可以使用 dom 对象的所有属性方法】

//This function manage the creation of the enemies
$.playground().registerCallback(function(){
  if(!bossMode && !gameOver){
if(Math.random() < 0.4){
  var name = "enemy1_"+Math.ceil(Math.random()*1000);
  $("#actors").addSprite(name, {animation: enemies[0]["idle"], 
  posx: PLAYGROUND_WIDTH, posy: Math.random()*PLAYGROUND_HEIGHT,
  width: 150, height: 52});
  $("#"+name).addClass("enemy");
  $("#"+name)[0].enemy = new Minion($("#"+name));
} else if (Math.random() > 0.5){
  var name = "enemy1_"+Math.ceil(Math.random()*1000);
  $("#actors").addSprite(name, {animation: enemies[1]["idle"],
  posx: PLAYGROUND_WIDTH, posy: Math.random()*PLAYGROUND_HEIGHT,
  width: 100, height: 42});
  $("#"+name).addClass("enemy");
  $("#"+name)[0].enemy = new Brainy($("#"+name));
} else if(Math.random() > 0.8){
  bossMode = true;
  bossName = "enemy1_"+Math.ceil(Math.random()*1000);
  $("#actors").addSprite(bossName, {animation: enemies[2]["idle"],
  posx: PLAYGROUND_WIDTH, posy: Math.random()*PLAYGROUND_HEIGHT,
  width: 100, height: 100});
  $("#"+bossName).addClass("enemy");
  $("#"+bossName)[0].enemy = new Bossy($("#"+bossName));
}
  } else {
if($("#"+bossName).length == 0){
  bossMode = false;
}
  }
  
}, 1000); //once per seconds is enough for this 

我们让敌人先出现在屏幕右边的不可见区域。jQuery 中的 addClass() 方法可以把参数值指定为精灵的类名。为敌人精灵添加同一类名,可以方便修改位置,检测碰撞。当我们生成一个 boss 类型的敌人后,我需要设置合适的游戏状态来描述;为了检测 boss 型敌人是否已经被消灭,我们也需要存储它的名字。请注意,我是如何巧妙的在非 boss 模式下生成敌人,又是如何在 boss 模式下复位游戏到正常模式的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文