我正在创建一个melonJS游戏。
在我的播放器实体 - game.PlayerEntity = me.ObjectEntity.extend({
中,其更新功能会检查碰撞:
game.PlayerEntity = me.ObjectEntity.extend({
var collision = me.game.collide(this);
if (collision) {
if (collision.obj.type == me.game.ACTION_OBJECT) {
console.log("NPCname: " + game.NPCEntity.init); //get settings from NPCEntity
}
}
然后在我的NPC实体对象game.NPCEntity = me.ObjectEntity.extend ({
中,我想将settings.name
返回到上面的PlayerEntity。为此,我创建了一个闭包returnSettings()
。
1)console.log(settings.name)
按预期输出“Lee”
2)return settings.name
输出“undefined”
为什么会这样?
game.NPCEntity = me.ObjectEntity.extend ({
init : function(x, y, settings) {
settings.image = "wheelie_right";
settings.spritewidth = 64;
settings.name = "Lee";
this.parent(x, y, settings);
this.collidable = true;
this.type = me.game.ACTION_OBJECT;
console.log(settings.name); //works
console.log("returning... " + returnSettings()); //works
//closure to return settings values externally
function returnSettings () {
return settings.name; //returns undefined when called by PlayerEntity above.
}
},
谢谢!
答案 0 :(得分:1)
game.NPCEnity
不引用实例,而是构造函数。如果在构造函数中设置this.settings = …
,则在实例上创建属性。您可以使用处理冲突的update
函数中的this
keyword访问实例,其中它指向player
。
引用教程:
// call by the engine when colliding with another object // obj parameter corresponds to the other object (typically the player) touching this one onCollision: function(res, obj) {…}
这意味着您可以通过该事件处理程序中的obj.settings
访问敌人设置。
如果你没有使用那个处理程序而是调用collide
method,从我看到的那个函数的返回值有一个.obj
属性,可能是碰撞目标:
if (collision) {
if (collision.obj.type == me.game.ACTION_OBJECT) {
console.log("NPCname: " + collision.obj.settings.name); //get settings from NPCEntity
}
}
答案 1 :(得分:0)
显然,您可以在定义之前调用该函数,因为它是以函数名称(){} 方式而不是表达式定义的:https://stackoverflow.com/a/261682/880114
但是,我不知道你从哪里返回该函数从其他地方调用它。