2

こんにちは私は3つのjavascriptファイルを持っています:Game.js、Player.js、Drawable.js。Game.jsで、オブジェクト_playerを作成します。これは、Drawableであり、それよりもPlayerです。これは、_playerがPlayerオブジェクト、つまりDrawableを拡張するクラスであることを意味します。

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};
    }

  }
}

Player.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;
  }
}

Game.js

var _player;

 _player = new Player();

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

これが私がやりたいことです。Player.prototype =newDrawable;を配置しようとしました。しかし、それは機能しません。どのようにできるのか?

4

3 に答える 3

1

プレーヤーオブジェクトを呼び出すことができるように動作させたい場合

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

次に、drawandmoveLeft関数は、すべてのプレーヤーオブジェクト(yikes)またはプレーヤーオブジェクトのプロトタイプチェーンのどこかにプロパティとして格納する必要があります。

これにより、実際のコードについて1つのコメントが表示されます。これらの関数は、実際のオブジェクトではなく、プロトタイプに含まれている必要があります。

だから、あなたの実際の問題に答えるために...

  • 最初にすべきことは、メソッドをプロトタイプに配置することです。

  • 次に、プレイヤーのプロトタイプのプロトタイプをすべてのドローアブルのプロトタイプにする必要があります。

それは紛らわしいように聞こえるかもしれませんが、ここにお金のラインがあります:

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

でプレーヤーを作成する前にこれを行ってくださいnew Player。:)

補遺

ライブデモ-「コンストラクター」を実行する方法も示しているため、最初のxとyを使用してプレーヤーを作成できます。

于 2012-09-29T20:40:39.193 に答える
1

Coffeescriptは、javascriptのプロトタイプオブジェクトモデルの上にモデル化されたクラスベースのオブジェクトモデルを持つ言語です。彼らのページでは、extendsキーワードがjavascriptにコンパイルされたときに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 に答える