2016-06-23 9 views
0

Ich versuche, eine Textanzeige zu erstellen, aber aus irgendeinem Grund ist die Breite des Objekts Null, trotz der Tatsache, dass es Text hat. Hier ist mein Code:Corona SDK: Anzeige Textobjekt hat Text und ist sichtbar, aber Breite ist Null

File1.lua:

local myTextDisplay = display.newText("2", display.contentWidth/2, display.contentHeight/2, native.systemFontBold) 

File2.lua:

local myTextDisplay = File1:getTextDisplay() --function in File1.lua that returns myTextDisplay 
print("Displayed text: " .. myTextDisplay.text) 
if myTextDisplay.isVisible then print("Text display is visible") end 
print("Text display width: " .. myTextDisplay.width) 

Das erste Mal, dass ich die File2 Szene öffnen, das funktioniert gut, und druckt:

Displayed text: 2 
Text display is visible 
Text display width: 10.6599... 

Wenn ich jedoch die gleiche Szene ein zweites Mal öffne (es wird nicht recycelt), verursacht die letzte Druckanweisung eine Laufzeit er ror:

Displayed text: 2 
Text display is visible 
Runtime error 
C:\....myGame.lua:20: attempt to concatenate field 'width' (a nil value) 

Wie kann das sein? Wenn das Anzeigeobjekt Text enthält, wie kann es möglicherweise eine Nullbreite haben? Hat es etwas damit zu tun, dass ich jedes Mal dasselbe Anzeigeobjekt erhalte, wenn ich die nicht recycelte File2-Szene öffne? Jeder Rat geschätzt!

+0

Der Text eines Objekts ist nur eine Eigenschaft. Gleich mit der Breite. Sie können tatsächlich einen Text haben, während Sie eine Nullbreite haben. Die Frage ist warum ist die Breite Null. Ich denke, du solltest mehr Code bereitstellen. Vor allem die Abschnitte, wo Sie die Sachen von file1 zu file2 bekommen. – Piglet

Antwort

0

Ich konnte das ursprüngliche Problem nicht beheben, aber ich denke, dass einige Probleme beim Übergeben von Anzeigeobjekten zwischen Szenen auftreten können, besonders wenn eine Szene recycelt wird.

Stattdessen fand ich die beste Problemumgehung, einfach zwei Anzeigeobjekte zu haben, eins in jeder Szene. Dann gebe ich den Text und andere Eigenschaften des Objekts von der ersten Szene an die zweite Szene weiter und erstelle das zweite Anzeigeobjekt, das mit dem ersten identisch ist.

Das Übergeben von Daten zwischen Szenen scheint viel reibungsloser zu funktionieren als das Übergeben von Anzeigeobjekten.