我正在尝试使用套接字创建一个javascript游戏,但我陷入了对象的OOP。我在从对象的函数内部引用对象的变量时遇到了问题。
这里可能有几个问题。我从对象内部调用绘制函数而不是渲染函数。我也不确定对象文字设计是否正确完成。
使用Require.js和class.js,我们有User.js:
define(['entity'],function(Entity){
var User = Entity.extend({
init: function(){
this.health= 10;
},
draw: function(ctx){
img = new Image(); // Create new img element
img.onload = function(){
// execute drawImage statements here
ctx.drawImage(img, this.posx, this.posy);
};
img.src = '/images/object.PNG'; // Set source path
}
})
return User;})
从Entity.js扩展
define(function(){
var Entity= Class.extend({
init: function(){
//object image
this.img.src = '/images/Blue-soldier.PNG';
//location
this.posx=50;
this.posy=50;
//gameplay values
this.health=1;
this.speed=0;
},
在game.js中调用User.draw(ctx):
var entity = new User;
this.users.push(entityid);
entity.draw(ctx);
},
在user.draw()中无法识别This.posx和this.posy。当它们被硬值替换时,它可以正常工作。我错过了什么?
我的完整代码更令人困惑,但您可以在https://github.com/mtbarta/canvas/blob/master/public/javascripts/client.js
找到它谢谢!
答案 0 :(得分:1)
问题是你试图在“加载”处理程序中使用this
,其中的值不是“draw”函数中的值。试试这个:
var entity = this;
img.onload = function(){
// execute drawImage statements here
ctx.drawImage(img, entity.posx, entity.posy);
};
通过在局部变量“entity”中保留this
的副本,处理程序可以访问它。