• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Bildname zusammensetzen in LUA

Ich habe mal wieder ein kleines Problem, ich möchte Bildnamen in LUA zusammensetzen, aber das klappt nicht so ganz...

Ohne zusammensetzen funktioniert die Bildzuweisung zu einer Zone. Testeshalber habe ich mal das gemacht um ZoneA das Bild 0 zuzuweisen:
Code:
objZoneA.Media = obj0

Nun habe ich aber etwa 30 Bilder (weshalb if - else eher ungeeignet ist...), die Abhängig von den Werten in einer Table angezeigt werden sollen. Wie stelle ich mir das vor? Es gibt eine TableA, die z.B. die Werte 1,2,4 enthalten kann. Dann soll der ZoneA das Bild obj124 zugewiesen werden.

Versucht habe ich das so (am Ende soll natürlich die Zahlenkombination über eine Schleife zusammengebaut werden, das ist aber kein Problem, das schaffe):
Code:
imageName = imageName.."124"
objStapelA.Media = imageName

Das scheint aber nicht zu funktionieren, denn im Emulator hat die Zone dann einfach gar kein Bild mehr. Allerdings crasht dieser interessanterweise auch nicht.

Für Tips und Tricks wäre ich euch sehr dankbar.


Es grüsst
whiterussian_ch
 

goetzman

Geocacher
Hallo whiterussian_ch,

ganz so trivial ist das nicht.
Leider ist Dein Codeschnipsel etwas sehr kurz, also kann ich nur vermuten.

objZoneA.Media = obj0

objZone ist eine Zone
obj0 ist ein Mediaobject

Was Du da machst:
imageName = imageName.."124"
objStapelA.Media = imageName


Du setzt einen Objektnamen per Stringkonkatenation zusammen, so was geht definitionsgemaß nicht,
Objektnamen sind nur zur Compilezeit bekannt.
Es gibt zwar einen LUA-Call, der zur Laufzeit dynamisch LUA-SourceCode interpretiert,
aber das ist sehr kritisch und außerdem bin ich mir da nicht sicher, oder der in jedem Player implementiert ist.

Schau Dir im Zweifelsfall mal den LUA-Code von der PenguinEscape an.
Da gibst es z.B. Folgendes
zmediaPinkBackGorilla = Wherigo.ZMedia(cartZooventurePenguinEscape)
zmediaPinkBackGorilla.Name="PinkBackGorilla"
zmediaPinkBackGorilla.Description=""
zmediaPinkBackGorilla.AltText=""
zmediaPinkBackGorilla.Id="097a07d1-5d1b-4bf4-9a55-d5a1af30f794"
zmediaPinkBackGorilla.Resources = {
{ Type = "jpg", Filename = "pinkbackgorilla_ppc.jpg", Directives = {},},
{ Type = "jpg", Filename = "pinkbackgorilla_garmin.jpg", Directives = {},},
}
zmediaSilverBackGorilla = Wherigo.ZMedia(cartZooventurePenguinEscape)
zmediaSilverBackGorilla.Name="SilverBackGorilla"
zmediaSilverBackGorilla.Description=""
zmediaSilverBackGorilla.AltText=""
zmediaSilverBackGorilla.Id="61165e65-4ad5-4130-98b1-c31dbeccece4"
zmediaSilverBackGorilla.Resources = {
{ Type = "jpg", Filename = "silverbackgorilla_ppc.jpg", Directives = {},},
{ Type = "jpg", Filename = "silverbackgorilla_garmin.jpg", Directives = {},},
}

Da werden zwei Objekte angelegt "zmediaPinkBackGorilla" und "zmediaSilverBackGorilla".
Am Beginn des Spiels kommt Folgendes:
zcharacterSilverbackGorilla.Media = zmediaPinkBackGorilla
Später im Spielverlauf
zcharacterSilverbackGorilla.Media = zmediaSilverBackGorilla
Das heißt dem Media-Attribute wird dynamisch ein Media-Objekt zugewiesen.

Ich sehe jetzt folgende Möglichkeiten:
1) Die einfache Version, Du änderst das Mediaobjekt (nur eine Idee, ich habs noch nicht getestet, weiß also nicht ob's funktioniert)
var BildPrefix = "Image_";
var BildPostfix = ".jpg";
var nr = <Die Nummer, die Du anzheigen willst>
zmediaSilverBackGorilla.Resources = {
{ Type = "jpg", Filename = BildPrefix..nr..BildPostfix, Directives = {},}

Du mußt nur sicherstellen, daß sämtliche Images auch in der Cartridge sind.

2) Du legst für jedes Image ein MediaObjekt an und legst sie anschließend in einem Array ab z.B.:
var imagearray = {};

imageobj1 = Wherigo.ZMedia(cartZooventurePenguinEscape)
... (siehe oben)
imageobj1.Resources = {
{ Type = "jpg", Filename = "image_1.jpg", Directives = {},}
}

imageobj2 = Wherigo.ZMedia(cartZooventurePenguinEscape)
... (siehe oben)
imageobj2.Resources = {
{ Type = "jpg", Filename = "image_2.jpg", Directives = {},}
}
usw.
imagearray [1] = imageobj1;
imagearray [2] = imageobj1;
usw.

Später dann
objectIrgendwas.media = imagearray[nr];

Schöne Grüße
Goetzman
 
OP
W

whiterussian_ch

Geocacher
Besten Dank schon mal.

Ich habe sogar schon für jedes Image ein Medienobjekt angelegt. Ich werde wohl mal mit der zweiten Idee rumexperimentieren.
 
Oben