2

您好我有 3 个 javascript 文件:Game.js、Player.js、Drawable.js。现在在 Game.js 中,我想创建一个对象 _player,它是 Drawable,然后是 Player。这意味着 _player 是一个播放器对象,它是一个扩展 Drawable 的类。

可绘制的.js

function Drawable(x, y, src)
{
  this.x = x;
  this.y = y;
  this.img = new Image();
  this.img.src = src;
  this.width = this.img.width;
  this.height = this.img.height;

  this.draw = function(canvas) 
  {   
    canvas.drawImage(this.img,this.x, this.y);
  }

  this.midpoint = function() 
  {
    return {
      x: this.x + this.width/2,
      y: this.y + this.height/2};
    }

  }
}

播放器.js

function Player()
{
  this.moveLeft = function()
  {
    this.x -= 3;
  }

  this.moveRight = function()
  {
    this.x += 3;
  }

  this.moveUp = function() 
  {
    this.y -= 3;
  }

  this.moveDown = function()
  {
    this.y += 3;
  }
}

游戏.js

var _player;

 _player = new Player();

 _player.draw(...);
 _player.moveLeft();
 ...
 ...

这就是我想做的。我试图把 Player.prototype = new Drawable; 但它不起作用。我能怎么做?

4

3 回答 3

1

如果您希望播放器对象的行为可以调用

player.draw(...);
player.moveLeft(...);

那么drawandmoveLeft函数需要作为属性存储在每个玩家对象(yikes)中或玩家对象原型链的某个位置。

这对您的实际代码提出了一条评论:这些函数应该在原型中,而不是实际对象中。

所以,要回答你的实际问题......

  • 您应该做的第一件事是将方法放在原型中。

  • 然后你需要让玩家原型的原型成为所有可绘制对象的原型。

这可能听起来令人困惑,但这里是金钱线:

Player.prototype = Object.create(Drawable.prototype);

在使用. _ new Player:)

附录

现场演示——它还向您展示了如何执行“构造函数”,以便您可以构建具有初始 x 和 y 的播放器。

于 2012-09-29T20:40:39.193 回答
1

Coffeescript 是一种具有基于类的对象模型的语言,该对象模型是在 javascript 的原型对象模型之上建模的。在他们的页面上,您可以看到一个示例,当它被编译为 javascript 时,extends 关键字在 coffeescript 中的工作方式。

于 2012-09-29T20:42:57.537 回答
1

这可能不是你的考虑因素。也许这不是您曾经考虑过的东西,但是为什么不制作一个Drawable组件,通过依赖注入在构建期间或之后不久将其提供给玩家。

var Drawable = function () { ... };
var Player = function () { ... };


var player = new Player(new Drawable(), new Controlable(), new Physical());
于 2012-09-29T20:49:09.553 回答