javascriptでカスタムゲームオブジェクトを作成する方法を理解しようとしています。キャンバス上で作業しています。オブジェクトに関する情報を含む一般的なゲームオブジェクトを作成できると思った位置、形状など、「移動」、「火」、「表示」などの機能を持っています。キャンバスゲームアーキテクチャ:JavaScriptオブジェクトの親機能へのアクセス
"create(canvas)"という関数を作成しました。キャンバスを取得し、ローカル変数を初期化してから、 "onload"関数でdisplay関数を呼び出します。 しかし、オブジェクトの表示機能にアクセスすることはできません。 さらに、私はいつもローカル変数または関数にアクセスするために "this"構文を使用します。それは何かが間違っていると感じさせる。
あなたは
<script>
var gameObject = {
x: 0,
y: 0,
velocity: 5,
width: 40,
height: 40,
triggerObject:null,
imgUrl: "/assets/minionframe/1.png",
img:null,
canvas:null,
context:null,
display:function(){
this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
this.context.drawImage(this.img,this.x,this.y,this.width,this.height);
},
move: function (direction) {
if (direction == "right")
x += this.velocity;
else if (direction == "left")
x -= this.velocity;
else if (direction == "up")
y -= this.velocity;
else if (direction == "down")
y += this.velocity;
this.display();
},
fire: function() {
},
create: function (canvas) {
this.canvas = canvas;
this.context = canvas.getContext('2d');
img = new Image();
img.src = this.imgUrl;
img.onload = function() {
this.display()//i cant doing this :(
}
return this;
}
}
</script>
<canvas id="scene" width="800" height="600"></canvas>
<script>
var scene = document.getElementById('scene');
var obj = gameObject.create(scene);
</script>
おかげでたくさん以下のコードを見ることができます。
ありがとうございました。それは私にゲーム開発アプローチのもう一つの視点を与えてくれます。私はJavaScriptのオブジェクトはC#やJavaのような他のオブジェクト指向プログラミング言語のように動作しますが。だから、私はJava Objectのような構造を構築しようとしていました。 –
"img"はオブジェクトの外観です。私はそれが私のゲームオブジェクトの一部であるかもしれませんが。 –
あなたは大歓迎です!私はJSの開発において、 "古典的な" OOスタイルよりも優れた機能スタイルを見つけました。上記のデザインは、より機能的なスタイルからインスピレーションを受けています。 'img'に関するあなたのコメントは、私の答えを更新しました(最後のコメントを参照) –