2017-04-11 46 views
0

我试图做出一种构造函数,以便将来创建实体时更容易。现在我已经完成了第一对夫妻的事情,但是它并没有看到实体函数中的函数。画布实体构造函数

我的错误:无法未定义

我的代码读取属性“更新”:

(function() { 
var canvas = document.getElementById('canvas'); 
var ctx = canvas.getContext('2d'); 

var entity = function(type,x,y,vx,vy,life) { 
    var self = { 
     x : canvas.width/2, 
     y : canvas.height/2, 
     vx : 5, 
     vy : 5, 
     life : 100, 
     pressingDown : false, 
     pressingUp : false, 
     pressingLeft : false, 
     pressingRight : false 
    }; 

    if(self.type == 'player') { 
     alert('we got a player'); 
    }; 

    self.update = function(){ 
     self.updatePosition(); 
     self.draw(); 
    }; 
    self.updatePosition = function(){ 
     console.log('position'); 
    }; 
    self.draw = function(){ 
     console.log('drawing'); 
    }; 
}; 

var actor = function(type,x,y,vx,vy,life) { 
    var self = entity(type, 25, 25, 5, 5, 100); 
    return self; 
}; 

var Player = function() { 
    var p = actor('player', 25, 25, 5, 5, 100); 
    p.pressingDown = false; 
    p.pressingUp = false; 
    p.pressingLeft = false; 
    p.pressingRight = false; 
}; 

var update = function(){ 
    player.update(); 
}; 

var player = new Player(); 

setInterval(function(){ 
    update(); 
},30) 


})(); 

任何人能发现我在做什么错在这里?非常感谢!

+0

通过添加返回自我来实现它的工作;在实体功能的底部,感谢所有人! – Wesleyvans

回答

0

玩家没有update方法

var Player = function() { 
    var p = actor('player', 25, 25, 5, 5, 100); 
    p.pressingDown = false; 
    p.pressingUp = false; 
    p.pressingLeft = false; 
    p.pressingRight = false; 

    this.update = p.update; //<<<<< here 
}; 

var update = function(){ 
    player.update(); 
}; 

var player = new Player(); 

我也想加入你应该坚持一个方法创建对象的请注意您在触变环境中使用new

var Entity = function(x, y, z) { 
    this.x = x; 
    this.y = y;  
    this.z = z; 
} 
var e = new Entity(1,2,3); 

var entity = function(x, y, z) { 
    var obj { 
     x: x, 
     y: y, 
     z: z 
    } 
    return obj; 
} 
var e = entity(1,2,3); 

否则你的代码将会越来越难读,你会以更频繁的问题结束

+0

是的,但它将东西发送给实体的演员,这应该被认可吧?或者我是迟到 – Wesleyvans

+0

@Wesleyvans请注意,您只在一个地方使用'new' https://jsfiddle.net/7xsrg50v/。你正在混合很多东西,为了回答你的问题,我将不得不解释所有的javascript基础知识 – Peter