Was ist eine Variable?
Nun ja, bertachten wir eine Variable mal als Wort welches für uns Zahlenwerte oder gar Sätze speichern kann.
Eigentlich sollten wir Variablen kennen oder?!

Kleiner Tipp... Mathe ist doch nicht ganz um sonst Das hab ich bei Programmiern dazu gelernt, bzw. als die Leherin gefragt hat was ne Variable ist, wusste ich das schon^^
Also in Mathe verwendet man Variablen, für Formeln... Also wo man später nur noch die Zahlen statt den Buchstaben einsetzt!
Und genau so ist es auch in
LUA bzw. in jeder anderen Programmiersprache!
Wir kennen das bestimmt schon, und zwar von den Farb-definationen^^
also von dem hier:
Code:
blau = Color.new(0,0,255)
Hier wird "blau" als Variable verwendet!
Wenn ich jetzt also was ausgeben will zum Beispiel "Hallo" dann schriebe ich das so:
Code:
screen:print(x,y,"Hallo",blau)
Wenn ich keine Variable verwenden will kann ich das auch so machen:
Code:
screen:print(x,y,"Hallo",Color.new(0,0,255))
Das ist zwar mehr arbeit zum schrieben aber es spart resourcen...
Resourcen die die PSP sowieso nicht hat^^
Also bei Variablen die nur ne Farbe speichern is das eigentlich egal^^ Aber wenn man z.B. viele Bilder hat, dann macht das schon was aus, bzw. Programmierer die sich schon an C oder C++ versucht haben wissen wie schnell die resourcen aufgebraucht sind

10 Variablen die nur von 0 bis 5 gehn mit Integer initilalisiern und schon ruckelt alles...
Naja aber darüber braucht man sich in
LUA keine Sorgen machen!

In
LUA kann man natürlich mehr als nur 10 Variabeln benutzen, da der
LUA Player sie nach der größe ihres wertes unterschiedlich initialisiert
Also wenn wir nun ein Bild ausgeben und nur eine Zeile und keine Variable verwenden wollen, machen wir das so:
Code:
screen:blit(x,y,Image.load("ms0:/PSP/PHOTO/kA.png"))
Im gegensatz mit variable wäre das dann so:
Code:
bild = Image.laod("ms0:/PSP/PHOTO/kA.png")
screen:blit(x,y,bild)
Bei den Tasten also bei IF Abfragen geht das auch^^
Wir kennen es ja bis jetzt nur so:
Code:
while true do
pad = Controls.read()
if pad:cross() then
...
end
end
Es geht aber auch so also wie oben ohne Variable, weil "pad" ist ja nichts anderes als eine Variable wo "Controls.read()" drinnen gespeichert ist!
Code:
while ture do
if Controls.read():cross() then
...
end
end
Also das kann man sich jetz aussuchen wie man es lieber hätte^^
Jetzt können wir mal versuchen Text oder zahlen in Variablen zu speichern... Das geht ganz einfach in
LUA!
einfach am anfang der Datei, also vor dem mainloop, den namen der variable schreiben.
Dann ein "=" und das was er in die Variable speichern soll
Also z.B. so:
Also speicher der
LUA Player die Zahl 1234 als Variable "zahl" im RAM Speicher ab.
erst jetzt kann ich den Wert unserer Zahl 1234 abfragen!
Also z.B. mal so:
Code:
if zahl == 1234 then
System.Quit()
end
Also guckt der
LUA Player jetzt ob in der Variable zahl das hier gespeichert ist: 1234
Wenn das übereinstimmt, dann macht der
LUA Player das Tor zu dem code in der IF Abfrage auf und spielt ihn ab...
In userem fall wäre das jetzt System.Quit() also beendet er das Programm und geht ins
XMB zurück
Jetzt können wir den Spieß noch umdrehn und sagen, wenn die Variable "zahl" nicht 1234 ist dann mach dies und das^^
Also:
Code:
if not zahl == 1234 then
System.Quit()
end
Also wenn die Variable nicht 1234 enthält soll er das Programm beenden!
Aber wir können das auch noch schöner machen... weil ich finde das sieht irgendwie doof aus wenn da steht
Zitat:
if not zahl == 1234 then...
|
Sieht ja aus wie wenn ich mich auf Englisch mit meiner PSP unterhalte^^


Nunja,
LUA ist eine Scriptsprache also wird das auch so bleiben aber wir können uns 4 Zeichen mit volgender Methoe sparen
Und zwar mit dem Operator ungleich! Weißt du noch wie der Ging?!
Also Gleich war so ==
Und ungleich geht nun so !=
Also schrieben wir mal:
Code:
if zahl != 1234 then
System.Quit()
end
Ob da jetz vor der abzufragenden Variable not oder beim Operator != steht ist egal^^
Sollten wir aber versehendlich
Code:
if not zahl != 1234 then
System.Quit()
end
schreiben, dann heißt das so viel wie
Zitat:
Wenn zahl nicht ungleich 1234 ist dann
System.Quit()
end
|
Also ich muss zugeben ich habe es nicht ausprobiert aber ich denke das es der
LUA Player als == oder ähnliches wertet, also kann das zu fehlern füren....
Sollte der
LUA Player diese merkwürdige abfrage übrhaupt zulassen

Das ist wie im Deutschen, wenn ich sage: Der Vogel sitzt nicht nicht am Baum, heißt das, das der Vogel am Baum sitzt^^
(Im gegensatz zum Englischen wo man doppelverneinung durchaus kennt... Im Deutsch hebt sie sich einfach auf!)
Nun kommen wir mal viel mehr zum Speichern von Texten
Wer es jetzt mit
Zitat:
text = Hallo wie gehts denn so auf PS-Evo?!
|
versucht wird nur einen Fehler entgegen kommen!
Den für Text braucht man zwei ""
Also so:
Code:
text = "Hallo wie gehts denn so auf PS-Evo?!"
Programmierer die in C/C++ oder C# bzw. angewante Programmiersprachen geübt sind, wissen das Buchstaben auch bloß Zahlen sind bzw. nur sehr wenige, oder viel mehr nur ganz bestimmte Buchstaben verwendet werden

Da wäre z.B. F oder C usw. Also die nennt man Hexanische Ziffern
Also die PSP speicher im RAM keine Buchstaben sondern Zahlen.
Das ganze System ist also auf Zahlen aufgebaut!
Deshalb ist die PSP auch nichts weiter als ein leistungs starker Taschenrechner mit geilen Bildschirm^^

Umgewandelt in den Binär Code Würde unser Satz so aussehn:
Code:
48616C6C6F207769652067656874732064656E6E20736F206175662050532D45766F3F21
Das haben manche vlt. schon mal im Hex Editor gesehn wenn sie eine Codeirte bzw. in den Binärcode umgewandelte (kompilierte) Datei geöffnet haben
Aber schluss mit dem ganzen!

Ich will hier niemanden verwirren!
Also wir haben eine Variable namens "text" in der volgendes gespeichert ist, und zwar "Hallo wie gehts denn so auf PS-Evo?!"
Jetz bringt uns das ja eig. nix wenn wir sie nicht ausgeben können^^
Das geht so:
Code:
screen:print(x,y,text)
Jetz haben wir das hier am Bildschirm der PSP stehn:
Zitat:
Hallo wie gehts denn so auf PS-Evo?!
|
Wollen wir noch einen Satz davor hinschreiben ist das kein Problem
Code:
screen:print(x,y,"-DaRealXecon- sagt:" ..text)
so... was bedeuten denn jetzt diese zwei Punkte vor der text Variable?!
nun ja die macht man immer in richtung "" also hätte ich jetz nach unserer variable noch etwas geschriebn müsste das so aussehn:
Code:
screen:print(x,y,"-DaRealXecon- sagt:" ..text.. "Gut oder?")
Logischer weiße muss ich wenn ich vor der Variable wenn kein text unter den "" steht keine Punkte machen
Jetzt wollen wir mal etwas versuchen...
Und zwar, wie kann ich wenn ich X drücke Text zueiner Variable hinzufügen und wie kann ich die Variable formatiern und neu bespielen?!
Ganz leicht!
Code:
text = "Hallo"
while true do
pad = Controls.read()
if pad:cross() then
text = " Omegavirus :D"
end
if pad:square() then
text = ""
text = "Blub blub Fischiii :p"
end
screen:print(x,y,text)
screen.flip()
end
Also mit X fügen wir " Omegavirus

" zu "Hallo" dazu

Also erhalten wir am Bildschirm "Hallo Omegavirus

"
Mit [] formatieren wir die variable "text" und speichern "Blub blub Fischiii

" in sie^^
Noch etwas wichtiges!
Weißt du warum die Textausgabe ganz unten steht...?! Sie könnt auch oben stehn, und es würde auch funktioniern
ABER, wenn z.B. in der Variable text etwas geändert wird, und die Text Ausgabe steht ganz oben im Mainloop, dann wird das erst bei der nächsten durchlauf der schleife übernommen...
Steht die ausgabe ganz unten, werden die änderungen der Schleife sofort noch in dem selben durchlauf übernommen!
Zitat:
Waurm soll ich das unten schrieben?! die paar milli sekunden sin mir i-wie egal 
|
Nein, derzeit ist es vlt. noch egal^^ Aber dein Programm läuft nicht mehr in echt zeit wenn die Textausgabe oben in der mitte oder sonst wo im code steht...
Also feststellen können wir das z.B. so, und Probiert es bei gelegenheit doch auch mal bitte aus!
Code:
weiss = Color.new(255,255,255)
while true do
System.sleep(100) -- Wartet eine Sekunde!
screen:clear()
pad = Controls.read()
if pad:cross() then
screen:print(1,1,"Echt Zeit Programm!",weiss)
end
screen.flip()
end
Machen wir es jedoch falsch kommt die Meldung nicht sofort sondern erst nach einer Sekunde
Code:
weiss = Color.new(255,255,255)
while true do
screen:clear()
pad = Controls.read()
if pad:cross() then
screen:print(1,1,"Echt Zeit Programm!",weiss)
end
System.sleep(100) -- Wartet eine Sekunde!
screen.flip()
end
Also immer dran Denken wie man was wo im Code platziert
Ich hoffe ich habe die Rechtschreibung nicht zu sehr Missbraucht

Und hoffe das ich einigen Helfen konnte und richtige Inhalte gegeben habe!
Mfg xecon
EDIT:
!= gibts nit in LUA^^ 
In LUA heißt das ~= 
Also ~= statt != nehmen! 