次のコード行があります
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を未定義として出力します!!!!!!
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}
}
self.spriteData
そのjson配列をループして、次のように値を割り当てます。
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
したがって、高度なコンパイルでは、をとして印刷しても問題はありません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
のメンバーを次のように宣言しました
/**
* @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に感謝します。しかし今、私は誰の答えが正しいものをマークするべきか疑問に思いますか?