KINGx - Das inoffizielle PlayStation Forum & News Portal
[LUA TUT]Multi Hallo Welt - Druckversion

+- KINGx - Das inoffizielle PlayStation Forum & News Portal (http://www.kingx.de/forum)
+-- Forum:    PS Vita / PSP (/forumdisplay.php?fid=1)
+--- Forum: Homebrew (/forumdisplay.php?fid=8)
+---- Forum: Development (/forumdisplay.php?fid=34)
+----- Forum: Dev-Tutorials (/forumdisplay.php?fid=59)
+----- Thema: [LUA TUT]Multi Hallo Welt (/showthread.php?tid=26142)


[LUA TUT]Multi Hallo Welt - WinterFrost - 05.11.2010 14:02

In diesem Tutorial zeige ich euch, wie ihr ein "Multi Hallo Welt" Programm in LUA erstellt.
Es wäre nicht schlecht, wenn ihr bereits ein "normales" Hallo Welt Programm erstellt habt, es ist aber nicht nötig.
Um den Code richtig zu verstehen, müsst ihr euch dieses Tutorial allerdings aufmerksam durch lesen.

Was wir benötigen:
  • Eine PSP mit CFW
  • Etwas Gedult
Das "Homebrew" wird so aussehen:



Aber schreiten wir endlich zur Tat.
Zuerst erstellen wir eine script.lua Datei.
Öffnet diese jetzt mit einem Text Editor und gebt ganz oben schon mal die Farben ein.

Code:
--Legende
--Farben
white = Color.new(255,255,255)
black = Color.new(0,0,0)
red = Color.new(255, 0, 0)
green = Color.new(0, 255, 0)
blue = Color.new(0,0,255)
orange = Color.new(235,115,0)
yellow = Color.new(255,255,0)
gray = Color.new(160,160,160)

Ich denke das sollte klar sein, für die jenigen von euch die nicht wissen was es damit aus sich hat, erkläre ich es nochmal.
--Legende und --Farben habe keine Bedeutung, sie sind sozusagen Notizen, die ihr anfertigen könnt.

Code:
Color.new(Zahl,Zahl,Zahl)

definiert eine Farbe, es müssen alle Farben in Zahlenwerten angeben werden.

Denn ersten Teil des Codes hätten wir also schonmal, also machen wir doch direkt weiter.

Unter die Farbdefinitionen, gebt ihr jetzt folgendes ein.

Code:
while true do
screen:print(150,120,"Druecke X um einen Text einzublenden.", red)
screen:print(150,130,"Druecke O um zu beenden", red)

Mit

Code:
while true do

setzen wir alles in eine Schleife, sodass der Text, der angezeigt werden soll, durchgehend angezeigt wird und in userem Falle die Tasten durchgehend abgefragt werden.

Code:
screen:print

gibt an wo und in welcher Farbe ein beliebiger Text angezeigt werden soll.
Die Zahlen dort hinter sind die X und Y Achsen auf dem PSP Bildshirm.
Danach folgt der Text der angezeigt werden soll, diesen könnt ihr beliebig verändern.
Hinter dem Text steht die Farbe in dem der Text angezeigt werden soll.
Direkt unter dem Codestück kommt

Code:
pad =Controls.read()

Dieser Befehl ermöglicht es, dass man die Tasten in LUA überhaupt erst verwenden kann.
Näturlich braucht man zu diesem Befehl auch Tasten.
Kommen wir zum nächsten Teil des Codes

Code:
if pad:cross() then
screen:print(167,1,"Multi Hallo Welt by WinterFrost", green)
else
if pad:circle() then
System.Quit()
end
end

Ich "übersetze" das jetzt mal auf Deutsch, dann ist es verständlicher.
Wenn du X drückst, dann blende Multi Hallo Welt by WinterFrost ein.
Aber, wenn du Kreis drückst, dann verlasse das Programm.
if ist immer wenn, pad:cross ist die X Taste, aber die Tasten führe ich hier nicht weiter aus.
then ist dann und

Code:
screen:print

kennen wir bereits.
Machen wir weiter.
else ist aber und

Code:
System.Quit

ist ein Befehl, der das Programm beendet und in die XMB zurückkehrt.

Code:
end
end

beendet die beiden if Befehle.

Der Größe und schwierigste Teil des Codes ist nun geschafft, jetzt bringen wir das ganze noch auf den Bildshirm und beenden das Script mit

Code:
screen.flip()
screen.waitVblankStart()
end

Code:
screen.flip()

bringt nun alles auf den Bildshirm, ohne diesen Befehl, würde das ganze Script nicht funktionieren.

Code:
screen.waitVblankStart()

würde angeben wie lange der Text angezeigt werden soll, man würde die LUA Sekundenzählzeit einfach in die Klammer schreiben, da wir das ganze aber vorher in eine while Schleife gesetzt haben, bleibt die Klammer einfach leer.

Code:
end

schließt das ganze Script , ab hier ist Schluss.

Hier ist noch einmal der ganze Code.

Code:
white = Color.new(255,255,255)
black = Color.new(0,0,0)
red = Color.new(255, 0, 0)
green = Color.new(0, 255, 0)
blue = Color.new(0,0,255)
orange = Color.new(235,115,0)
yellow = Color.new(255,255,0)
gray = Color.new(160,160,160)

while true do
screen:print(150,120,"Druecke X um einen Text einzublenden.", red)
screen:print(150,130,"Druecke O um zu beenden", red)
pad =Controls.read()
if pad:cross() then
screen:print(167,1,"Multi Hallo Welt by WinterFrost", green)
else
if pad:circle() then
System.Quit()
end
end
screen.flip()
screen.waitVblankStart()
end


DownloadDownload (script + eboot.pbp)

Ich hoffe das Tutorial hat euch gefallen.

MfG


RE: [LUA TUT]Multi Hallo Welt - The Z - 05.11.2010 14:35

Cool, kann man sie mittels exploit auch auf ner ofw angezeigt bekommen?!


RE: [LUA TUT]Multi Hallo Welt - WinterFrost - 05.11.2010 14:44

Eventuell über den HBL, ich habe es aber nicht versucht.

MfG


RE: [LUA TUT]Multi Hallo Welt - Namenloser - 05.11.2010 15:12

if pad:cross() then
screen:print(167,1,"Multi Hallo Welt by WinterFrost", green)
else
if pad:circle() then
System.Quit()
end
end

Ich finde das else unnötig :P Denn es ist ja klar falls nicht X Gedrückt wird das er eine andere taste einließt. Könnte man auch einfach schließen:
if pad:cross() then
screen:print(167,1,"Multi Hallo Welt by WinterFrost", green)
end
if pad:circle() then
System.Quit()
end

Kürzer wird der Code deswegen auch nicht aber ok :D

PS, gehört das :
screen:print(150,120,"Druecke X um einen Text einzublenden.", red)
screen:print(150,130,"Druecke O um zu beenden", red)

nicht auch in die While ( vor dem pad ) ? Sonst wird der Text ja nur für eine Millionstel Sekunde angezeigt


RE: [LUA TUT]Multi Hallo Welt - WinterFrost - 05.11.2010 15:13

Namenloser :
PS, gehört das :
screenTonguerint(150,120,"Druecke X um einen Text einzublenden.", red)
screenTonguerint(150,130,"Druecke O um zu beenden", red)

nicht auch in die While ? Sonst wird der Text ja nur für eine Millionstel Sekunde angezeigt


Ja, habe ich doch geschrieben oder nicht?

MfG

EDIT: else hab ich mit rein genommen, um die Bedeutung nochmal zu erläutern.


RE: [LUA TUT]Multi Hallo Welt - m33 - 05.11.2010 15:18

Ne per Exploit auf dem HBL kann mans nicht abspielen Sad
Der HBL hat keinen Lua HM Support, nur PGE Lua Wink


RE: [LUA TUT]Multi Hallo Welt - Namenloser - 05.11.2010 15:25

Ich meine so:

Zitat:
white = Color.new(255,255,255)
black = Color.new(0,0,0)
red = Color.new(255, 0, 0)
green = Color.new(0, 255, 0)
blue = Color.new(0,0,255)
orange = Color.new(235,115,0)
yellow = Color.new(255,255,0)
gray = Color.new(160,160,160)

while true do
pad =Controls.read()
screenTonguerint(150,120,"Druecke X um einen Text einzublenden.", red)
screenTonguerint(150,130,"Druecke O um zu beenden", red)
if pad:cross() then
screenTonguerint(167,1,"Multi Hallo Welt by WinterFrost", green)
else
if pad:circle() then
System.Quit()
end
end
screen.flip()
screen.waitVblankStart()
end


Du hast den Text auserhalb der While und nur den Text bei dem Pad drinnen.


RE: [LUA TUT]Multi Hallo Welt - WinterFrost - 05.11.2010 15:31

Tut mir Leid aber ich verstehe immernoch nicht richtig was du meinst.
Der Text muss in einer while schleife stehen, denn er wird dauerhaft angezeigt.

MfG


RE: [LUA TUT]Multi Hallo Welt - Camaro8000 - 05.11.2010 15:36

Ich glaube das meint Namenloser:


So hast du es...

Code:
[...]
yellow = Color.new(255,255,0)
gray = Color.new(160,160,160)

screen:print(150,120,"Druecke X um einen Text einzublenden.", red)
screen:print(150,130,"Druecke O um zu beenden", red)
while true do
pad =Controls.read()
if pad:cross() then
[...]


...und so muss es sein:

Code:
[...]
yellow = Color.new(255,255,0)
gray = Color.new(160,160,160)

while true do
screen:print(150,120,"Druecke X um einen Text einzublenden.", red)
screen:print(150,130,"Druecke O um zu beenden", red)
pad =Controls.read()
if pad:cross() then
[...]


thumb


RE: [LUA TUT]Multi Hallo Welt - WinterFrost - 05.11.2010 15:40

Ich meine das ist egal, solange ich das screen.flip() in einer Schleife habe.

MfG

EDIT: Zumindest habe ich es jetzt verstanden xD
EDIT2: es geht beides, so wie Namenloser es meint läuft es aber stabiler, also werde ich es ändern.
Danke.
EDIT3: Fertig.
MfG


RE: [LUA TUT]Multi Hallo Welt - Dark_Monkey - 05.11.2010 16:46

Code:
//Farben definieren
white = Color.new(255,255,255)
black = Color.new(0,0,0)
red = Color.new(255, 0, 0)
green = Color.new(0, 255, 0)
blue = Color.new(0,0,255)
orange = Color.new(235,115,0)
yellow = Color.new(255,255,0)
gray = Color.new(160,160,160)
color = {white,red,green,blue,orange,yellow,gray}

//Allgemeine Variablen definieren
i = 1
pad = Controls.read()



//Main
while true do

    screen:print(150,120,"Druecke X um die Textfarbe zu ändern.", red)
    screen:print(150,130,"Druecke O um zu beenden", red)
    screen:print(167,1,"Hello World", color[i])

    if pad:cross() then

        color = color +1

        if (color < 6) then

            color = 0

        end

    end

    if pad:circle() then

        System.Quit()

    end

    screen.flip()
    screen.waitVblankStart()

end


Das wäre ein neutrales Hello World.
Hab schon lange kein Lua mehr geschrieben aber trotzdem.

Wir definieren einen tabel Namens "color" in den setzen wir die vorherigen Farben werte ein.

Dann definieren wir noch einen zähler. da wir nacher die variablen position im table angeben müssen.

d.h.:

color = {white,red,green,blue,orange,yellow,gray}

ist gleich

color[0] = white
color[1] = red
color[2] = green
color[3] = blue
color[4] = orange
color[5] = yellow
color[6] = gray

der zähler steht auf 1 also color[i] wäre dann das gleiche wie color [1] also red. Der test wird in Rot angezeigt.

mit einem druck auf die X wird der zähler um 1 erhöht, also ist i gleich 2, das wiederum bedeutet das color[i] leich color[2] also green.

das geht weiter bis 6.

Falls jetzt nochmal X gedrückt wird müssen wir angebe das i wieder auf 0 gesetzt wird, da color[7] keine definitioin also keinen wert hat.

von 0 kann dann wider bis zu 6 hochgezählt werden.

Für fragen stehe ich offen


RE: [LUA TUT]Multi Hallo Welt - m33 - 05.11.2010 16:49

Dark_Monkey :

Code:
//Farben definieren
white = Color.new(255,255,255)
black = Color.new(0,0,0)
red = Color.new(255, 0, 0)
green = Color.new(0, 255, 0)
blue = Color.new(0,0,255)
orange = Color.new(235,115,0)
yellow = Color.new(255,255,0)
gray = Color.new(160,160,160)
color = {white,red,green,blue,orange,yellow,gray}

//Allgemeine Variablen definieren
i = 1
pad = Controls.read()



//Main
while true do

    screen:print(150,120,"Druecke X um die Textfarbe zu ändern.", red)
    screen:print(150,130,"Druecke O um zu beenden", red)
    screen:print(167,1,"Hello World", color[i])

    if pad:cross() then

        color = color +1

        if (color < 6) then

            color = 0

        end

    end

    if pad:circle() then

        System.Quit()

    end

    screen.flip()
    screen.waitVblankStart()

end


Das wäre ein neutrales Hello World.
Hab schon lange kein Lua mehr geschrieben aber trotzdem.

Wir definieren einen tabel Namens "color" in den setzen wir die vorherigen Farben werte ein.

Dann definieren wir noch einen zähler. da wir nacher die variablen position im table angeben müssen.

d.h.:

color = {white,red,green,blue,orange,yellow,gray}

ist gleich

color[0] = white
color[1] = red
color[2] = green
color[3] = blue
color[4] = orange
color[5] = yellow
color[6] = gray

der zähler steht auf 1 also color[i] wäre dann das gleiche wie color [1] also red. Der test wird in Rot angezeigt.

mit einem druck auf die X wird der zähler um 1 erhöht, also ist i gleich 2, das wiederum bedeutet das color[i] leich color[2] also green.

das geht weiter bis 6.

Falls jetzt nochmal X gedrückt wird müssen wir angebe das i wieder auf 0 gesetzt wird, da color[7] keine definitioin also keinen wert hat.

von 0 kann dann wider bis zu 6 hochgezählt werden.

Für fragen stehe ich offen


Das ist aber für Einsteiger zu schwer...


RE: [LUA TUT]Multi Hallo Welt - WinterFrost - 05.11.2010 16:51

Aha... und warum postest du das, wenn ich fragen darf?

MfG


RE: [LUA TUT]Multi Hallo Welt - Dark_Monkey - 05.11.2010 16:53

Fände ich ein alternatives beispiel und ist für einsteiger auch geeignet

Will damit aber auch keine kretik an deinem Hello World ausüben


RE: [LUA TUT]Multi Hallo Welt - WinterFrost - 05.11.2010 16:56

Achsoo... ich hatte mich schon gewundert, warum du das in meinen Thread postest und nicht einen eigenen aufmachst.

MfG


RE: [LUA TUT]Multi Hallo Welt - Dark_Monkey - 05.11.2010 16:58

ich mach doch kein eigenes threat auf wenn du schon eins aufmachst xD

Hab gedacht du könntest 2 arten reinpacken

eins TotalNoob freundlich und das ander Noob freundlich


RE: [LUA TUT]Multi Hallo Welt - m33 - 05.11.2010 16:59

Bezeichnest du jetzt Total_Noob als Total_Noob? Big Grin


RE: [LUA TUT]Multi Hallo Welt - Dark_Monkey - 05.11.2010 17:01

m33 :
Bezeichnest du jetzt Total_Noob als Total_Noob? Big Grin


Falls es dir aufgefallen ist fehlt dort ein unterstrich in meiner Wortwahl.


RE: [LUA TUT]Multi Hallo Welt - m33 - 05.11.2010 17:03

War ja auch nur ein Witz Big Grin
Aber ich glaube, dass das TUT schon gut so ist, wie es ist.
Das hilft den Einsteigern beim reinkommen Wink


RE: [LUA TUT]Multi Hallo Welt - WinterFrost - 05.11.2010 19:14

m33 :
Aber ich glaube, dass das TUT schon gut so ist, wie es ist.
Das hilft den Einsteigern beim reinkommen Wink

Ich habe ja auch alles sorgfältig erklärt. Wink
Wie findet die anderen das Tut?

MfG


RE: [LUA TUT]Multi Hallo Welt - Namenloser - 05.11.2010 20:04

Also das TuT ist sicher mal Anfänger gerecht Wink

Nur können womöglich ein paar User abgeschrecked werden weil du so viele Farben definierst die du nciht verwendest. Im Code benötigst du nur red und green. Da könnte man die andere Farben löschen, so wird der Code auch erstmal kleiner Wink

Also anstatt das:
white = Color.new(255,255,255)
black = Color.new(0,0,0)
red = Color.new(255, 0, 0)
green = Color.new(0, 255, 0)
blue = Color.new(0,0,255)
orange = Color.new(235,115,0)
yellow = Color.new(255,255,0)
gray = Color.new(160,160,160)

das:
red = Color.new(255, 0, 0)
green = Color.new(0, 255, 0)

Denn mehr Farben zu laden als benötigt könnte Anfänger sicher leicht aus der fassung bringen Tongue Du kannst ja extra dazuschreiben welche Farben es gibt ( also wie man sie bildet von den Zahlen her ). So kann jeder Afänger noch gleich dazu manuell die Farben ändern Wink

lg


RE: [LUA TUT]Multi Hallo Welt - WinterFrost - 05.11.2010 20:10

Ich wollte den Änfangern die Möglichkeit geben, die Farben selbst zu bestimmen.

MfG


RE: [LUA TUT]Multi Hallo Welt - -blue7 - 05.11.2010 20:15

@Winterfrost
Schönes Tutorial, vor allem anfängerfreundlich & sehr gut erklärt. Wäre schön, wenn du mehrere solcher Tutorials schreiben könntest, eventuell wäre eine neue Kategorie im Development-Bereich nicht schlecht.
PS: Deine Art erinnert mich an meine Anfänge hier ;D
Mach' weiter so, fällst positiv auf ;-)


RE: [LUA TUT]Multi Hallo Welt - Unbekannt - 27.11.2010 22:42

Gutes Tutorial.
Ist es nicht egal wo die Var. "pad" steht, hägt ja nicht vom Algolrithmus ab Wink.