我有以下代码行
frame = self.spriteData['backgroundps.png'];
self.bgBoard = new gg.casino.game.sprite(self.spriteSheet, frame, 0, 0, frame.w, frame.h);
console.log(frame);
console.log(self.bgBoard.x + ' ' + self.bgBoard.y + ' ' + self.bgBoard.w + ' ' + self.bgBoard.h);
和 gg.casino.game.sprite 被定义为
gg.casino.game.sprite = function(sheet, frame, x, y, twidth, theight) {
this.sheetRef = sheet;
this.frame = frame;
this.x = x;
this.y = y;
this.w = twidth;
this.h = theight;
console.log(this.x + ' ' + this.y + ' ' + this.w + ' ' + this.h);
}
使用 simpleoptimization 编译时,一切正常,我得到以下日志:
0 0 800 480
(frame object)
0 0 800 480
但是当我使用高级优化编译时,日志显示
0 0 undefined undefined
(frame object) - with correct values
0 0 undefined undefined
这段代码可能出了什么问题?
编辑:
之后添加了一个日志frame = self.spriteData['backgroundps.png'];
console.log('ps ' + frame.w + ' ' + frame.h);
并将 w 和 h 打印为 undefined !!!!!!
ps undefined undefined
console.log(frame)
在下一行打印具有正确值的对象
编辑2:
有关 self.spriteData 的更多信息:我有一个从 texturepacker 导出的 json 文件。它有一个对象数组,其中每个对象表示为
{
"filename": "backgroundps.png",
"frame": {"x":105,"y":304,"w":800,"h":480},
"rotated": false,
"trimmed": false,
"spriteSourceSize": {"x":0,"y":0,"w":800,"h":480},
"sourceSize": {"w":800,"h":480}
}
我遍历该 json 数组并将值分配给self.spriteData
如下:
var respData = xhr.getResponseJson();
self.spriteData = {};
for(var i = 0, len = respData.frames.length; i < len; i++) {
self.spriteData[respData.frames[i].filename] = respData.frames[i].frame;
}
因此frame
将具有以下结构,该结构将打印在控制台上:
Object
h: 480
w: 800
x: 105
y: 304
frame
所以在高级编译中,如果我打印as没有问题console.log(frame)
。但是当我尝试访问其成员console.log(frame.h)
时,它会打印为undefined
. 刚刚尝试添加@expose 评论var frame = {};
,希望它不会被重命名,但没有帮助。
编辑:
将frame
分配更改为 frame.x = self.spriteData['backgroundps.png'].x; frame.y = self.spriteData['backgroundps.png'].y; frame.w = self.spriteData['backgroundps.png'].w; frame.h = self.spriteData['backgroundps.png'].h;
并声明frame.w
并frame.h
带有注释 `@type {number} (没有为 x 和 y 做,因为它们已经正常工作了)。
现在 console.log(frame) 显示
Object
a: undefined
b: undefined
x: 105
y: 304
但为什么?
编辑(已解决) :D :-) 我明确声明frame
's 成员为
/**
* @type {number}
* @expose
*/
frame.w = 0;
/**
* @type {number}
* @expose
*/
frame.h = 0;
/**
* @type {number}
* @expose
*/
frame.x = 0;
/**
* @type {number}
* @expose
*/
frame.y = 0;
现在它可以工作了:-)
感谢 Kayhr、Ross 和 Chad 的帮助。但现在我想知道我应该标记谁的答案是正确的?