我目前正致力于基于javascript的游戏引擎,并且在克隆游戏对象时遇到了问题。我的gameObject类包含一个Sprite字段,我的Sprite类包含一个Image类字段。我设置了一个复制功能,除了Image字段外,所有内容都被正确复制。以下是使用的三个函数:
function Sprite(x, y, width, height, src, tag)
{
this.X = x;
this.Y = y;
this.image = new Image();
this.image.width = width;
this.image.height = height;
this.image.src = src;
this.tag = tag;
}
//GameObject Class
function GameObject(sprite, hidden, tag)
{
this.sprite = sprite;
this.hidden = hidden;
if (tag == null) {
this.tag == "default";
}
}
function cloneObject(gameObject)
{
var clone = Object.create(Object.getPrototypeOf(gameObject));
var i, descriptor, keys = Object.getOwnPropertyNames(gameObject);
for (i = 0; i < keys.length; i++) {
descriptor = Object.getOwnPropertyDescriptor(gameObject, keys[i]);
if (descriptor.value && typeof descriptor.value === 'object') {
descriptor.value = cloneObject(descriptor.value);
}
Object.defineProperty(clone, keys[i], descriptor);
}
return clone;
}
在原始gameObject中,向上层次结构显示图像字段包含值(或类型)img。
image:img
这将打开所有正确的图像属性(例如身高:30)。
在copy gameObject中,图像字段包含值(或类型)HTMLImageElement {}。
image:HTMLImageElement {}
这会打开图像属性,其中没有一个是正确的(例如height:Exception:TypeError:Illegal Invocation ...)。
我做错了什么?