就我而言,我使用的是Phaser框架。
所以在这个例子中,我扩展了Group类的移相器。每个演员都是' class(Sprite,Group,...)每隔几毫秒调用update()
原型。
我的想法是仅在应用程序在桌面上运行时扩展此功能(而不是在手机上运行)。
例如:
var MousePointer = function (game, parent, name) {
Phaser.Group.call(this, game, parent, name);
this.init();
};
MousePointer.prototype = Object.create(Phaser.Group.prototype);
MousePointer.prototype.constructor = MousePointer;
MousePointer.prototype.init = function () {
// ... init
};
MousePointer.prototype.update = function () {
// Do something when on desktop
};
我无法在update()
函数中使用if clausule检查播放器是否在dekstop / tablet / phone上。那么有没有办法在初始化时实际覆盖原型?
例如(伪代码):
if(onPhone)
MousePointer.prototype.update = parent.prototype.update;
else
MousePointer.prototype.update = this.update;
答案 0 :(得分:2)
嗯,你已经为自己写过答案了,还没有?此代码(不在init
方法内)。
if(onPhone) {
MousePointer.prototype.update = function(){//Phone implementation};
} else {
MousePointer.prototype.update = function(){//Other implementation};
}
我建议不要开始使用"常规"功能,然后潜在地覆盖它,因为你只是声明它什么都没有。
答案 1 :(得分:2)
我认为更好的方法是编写两个共享相同父级的不同类,然后为它们编写不同的update()
实现。然后你可以做类似的事情:
if(phone) {
var obj = new PhoneMousePointerObject();
} else {
var obj = new DesktopMousePointerObject();
}
// ... later
obj.update()