返回介绍

3.3 玩家对象

发布于 2024-07-13 13:15:23 字数 1899 浏览 0 评论 0 收藏 0

玩家就是只有一个实例的简单类(因为这是个单人游戏嘛),所以在这里使用面向对象只会使得代码更易阅读。

在玩家对象中,我们需要有属性来描述玩家飞船状态,例如飞船是否还有护盾、还有命?同时,飞船的基本动作可以通过对象方法实现。因为在这个游戏里,我们不需要物理引擎来管理飞船移动,你仅仅只需增加/减少位置,我选择不使用任何方法来管理飞船的移动。

第一个方法 damage(),用来判断 损伤 事件。当导弹击中飞船时,我们调用这个方法,并根据返回值判断飞船是否该 了。对外界来说,这个方法屏蔽了对护盾的管理。如果你想知道 variabl--含义,它代表 variable = variable – 1,这也适用于其他操作符。

function Player(node){
  this.node = node;
  //this.animations = animations;

  this.grace = false;
  this.replay = 3; 
  this.shield = 3; 
  this.respawnTime = -1;

  // This function damage the ship and return true if this cause the ship to die 
  this.damage = function(){
if(!this.grace){
  this.shield--;
  if (this.shield == 0){
  return true;
  }
  return false;
} 
return false;
  };
//...

第二个方法叫做 resoawn(),它所关注的是当飞船死亡(之间的 damage() 方法返回 true),而且玩家仍然有剩余的 生命 时所发生的事。在这种情形下,飞船护盾必须重新生成,并且飞船会处于敌人无法攻击到的无敌(grace)模式。无敌模式只能持续 3 秒钟,我们需要测定时间以便得知何时该启动无敌模式,何时该关闭无敌模式,这就是代码 this.respawnTime = (new Date()).getTime(); 所做的事情。

为了让玩家知道飞船正处于无敌(grace)模式,我们使飞船变得稍微透明,jQuery 的 fadeTo() 方法可以实现。这个方法的第一个参数是变成指定透明度所花费的时间(这里因为是即使生效所以 0ms),第二个参数是我们想要得到的透明度(1 代表完全不透明,0 代表不可见)。

//...
// this try to respawn the ship after a death and return true if the game is over
this.respawn = function(){
this.replay--;
if(this.replay==0){
  return true;
}

this.grace   = true;
this.shield    = 3;

this.respawnTime = (new Date()).getTime();
$(this.node).fadeTo(0, 0.5); 
return false;
  };
//...

玩家类的最后部分是检测无敌模式是否结束。这个方法必须在每个时隙都被调用。、

//...
this.update = function(){
if((this.respawnTime > 0) && (((new Date()).getTime()-this.respawnTime) > 3000)){
  this.grace = false;
  $(this.node).fadeTo(0, 1); 
  this.respawnTime = -1;
}
  }
  
  return true;
}

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

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

发布评论

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