- 第1章 简介
- 第2章 步骤1 – 精灵动画
- 第3章 步骤2 – 对象模型
- 第4章 步骤3 – 游戏逻辑与控制
- 第5章 步骤4 – 杂七杂八
4.2 敌人的产生
为了产生敌人,我们注册一个回调函数。它每秒都会被调用,然后随机的决定是否创建新敌人。为了实现随机效果,我们使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论