KINGx - Das inoffizielle PlayStation Forum & News Portal
Lua, warten und springen - 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)
+---- Thema: Lua, warten und springen (/showthread.php?tid=65190)


Lua, warten und springen - luaprogrammer - 07.07.2012 08:51

Hi, heute hab ich gleich 2 Fragen:

1: Gibt es in Lua eine möglichkeit zu warten also "tue das, dann warte
2 sekunden, dann tue das" <-- jaaaa... so ungefähr halt Big Grin

2: Wie könnte mann in einem kleinem 2d spiel (super-mario sicht) einem charackter das springen beibringen? also das der typ sich hoch und wieder runter bewegt. wenn ich dass so ungefähr mache:

Code:
if pad:up() then
Player.y = Player.y - 1
Player.y = Player.y - 1
Player.y = Player.y - 1
Player.y = Player.y - 1
Player.y = Player.y - 1
Player.y = Player.y + 1
Player.y = Player.y + 1
Player.y = Player.y + 1
Player.y = Player.y + 1
Player.y = Player.y + 1
end


hab auch andere sachcen durchprobiert, nix hat geklappt Sad

und jetzt bitte ich um hilfe xD

~Manu


RE: Lua, warten und springen - SIM sk - 07.07.2012 09:45

zum erstem: Was hatte er gemacht und wann soll er denn warten?

Zum zweitem: probiere ich später wenn ich Zeit haben sollte


RE: Lua, warten und springen - luaprogrammer - 07.07.2012 10:22

Zum ersten:
für alle möglichen sachen z.b diese hier:

Code:
function ccz(object)
if (Player.x + 16 &gt; object.x) and (Player.x &lt; object.x + 16) and (Player.y + 16 &gt; object.y) and (Player.y &lt; object.y + 16) then
screen:fontPrint(fonta,210,136,"Sieg",white)
--warte 5 sekunden--
--starte das spiel neu--
end
end


also wenn der spieler so einigermaßen "im block drinne ist" soll das programm das spiel neustarten.

zum zweiten: ok danke Big Grin


RE: Lua, warten und springen - dark-awesome - 07.07.2012 10:40

Code:
if pad:up() then
Player.y = Player.y - 1
Player.y = Player.y - 1
Player.y = Player.y - 1
Player.y = Player.y - 1
Player.y = Player.y - 1
Player.y = Player.y + 1
Player.y = Player.y + 1
Player.y = Player.y + 1
Player.y = Player.y + 1
Player.y = Player.y + 1
end


Wenn Sie das so machen wird das nie was, Sie verniedrigst und erhöhen den Wert ja nur im selben moment, bevor es der Player überhaupt auffassen kann.
Versuchen Sie vielleicht einen Umweg zu machen zum Beispiel:

(ich kann kein Lua also wird wahrscheinlich auch was falsch geschrieben sein ^^)

Code:
if pad:up() and playerJump &lt; 1 then
   playerJump = 1
end

if playerJump == 1 then
   Player.y = Player.y - 1
   if Player.y == 10 then
      playerJump = 2
   end
end
if playerJump == 2 then
   Player.y = Player.y + 1
   if Player.y == 20 then
      playerJump = 0
   end
end

Bild ausgabe...

(&lt; ist gleich < wird nur von der Codebox anders dargestellt)

Also so ungefähr, denken Sie sich einfach einen Umweg

Spoiler: (anzeigen)



RE: Lua, warten und springen - duLouser - 07.07.2012 11:01

wie dark-awesome schon schön sagt, darfst du nicht alle rechenschritte in einer sekunde ausführen lassen:

dark-awesome :
Code:
if pad:up() then
playerJump = 1
end

if playerJump == 1 then
Player.y = Player.y - 1
if Player.y == 10 then
playerJump = 2
end
end
if playerJump == 2 then
Player.y = Player.y + 1
if Player.y == 20 then
playerJump = 0
end
end

Bild ausgabe...


ich persöhnlich würde aber, wenns wie bei mario sein soll, auch nur einmal abspringen:


if pad:up() and Player.y == 272 then
Player.yspeed = Player.yspeed + 5
end
Player.y = Player.y - Player.yspeed
if Player.y > 272 then
Player.y = 272
end
if Player.y < 272 then
Player.yspeed = Player.yspeed - 0.03
end




Ich hab einfach mal 272 als unterste grenze genommen, kannst du ja abwandeln. Außerdem hab ich eine weitere Variable hinzugefügt, die für die Geschwindigkeit auf der y-achse zuständig ist.


Und wenn du den Bildschirm warten lassen willst, benutz

screen.waitVblankStart()

die zahl in der Klammer gibt die anzahl der miisekunden, die gewartet werden soll, an. Bei 5 sekunden wären das 5000 milisekunden:

screen.waitVblankStart(5000)


RE: Lua, warten und springen - dark-awesome - 07.07.2012 11:06

duLouser :
ich persöhnlich würde aber, wenns wie bei mario sein soll, auch nur einmal abspringen:


if pad:up() and Player.y == 272 then
Player.yspeed = Player.yspeed + 5
end
Player.y = Player.y - Player.yspeed
if Player.y > 272 then
Player.y = 272
end
if Player.y < 272 then
Player.yspeed = Player.yspeed - 0.03
end


Am besten nehmen Sie diese Methode, meine sollte eher als Denkanstoß wirken und war eher schnell getipp, weil ich essen musste ^^

Edit:
Mein Lösungsvorschlag ist eher zum genauen Springen. Der sprung wird immer die selbe höhe haben und immer die selbe Dauer.


RE: Lua, warten und springen - luaprogrammer - 07.07.2012 11:11

Jo, danke, klingt gut, ich werde es gleich ausprobieren.

aber eine frage, wenn mann den befehl "scren.waitVblankStart()"
benutzt müsste ja der bildschrim warten, also dass in der zeit überhaupt garnichts mehr passiert/gemachtwerden kann. oder irre ich mich.

aber trotzdem danke, ich werde es probieren, wen ishc probleme ergeben melde ich mich nocheinemal.


RE: Lua, warten und springen - luaprogrammer - 07.07.2012 12:21

Ok, habs mit beidem mal ausprobiert, mit dem ersten hats wie gesagt zwar funktioniert, aber wenn der spieler mal auf einer anderen höhe seien solte funktioniert dies natürlich nicht mehr.
aber trotzdem danke Big Grin

zum zweiten, gibt es wenig zu sagen: er funkitoniert nicht.

ich habe ihn ein bisschen abgeändert dass er dann so aussah:

Code:
Player.yspeed = 0
if pad:up() and Player.y == 235 then
Player.yspeed = Player.yspeed + 5
end
Player.y = Player.y - Player.yspeed
if Player.y &gt; 235 then
Player.y = 235
end
if Player.y &lt; 235 then
Player.yspeed = Player.yspeed - 0.03
end
end


ich habe nur die zahlen etwas geändert also, die ganzen 272'iger in 235'iger umgewandelt und oben den string

Code:
Player.yspeed = 0


hingesetzt, ohne den startete das spiel garnicht. aber nun bewegt sich wenn ich oben drücke der spieler nur um 5y hoch und bleibt dort stehen?!?! ich kapier es nicht mehr, und für mich sieht der code ja auch richtig aus!

habst du/ihr noch ideen? Noidea


RE: Lua, warten und springen - dark-awesome - 07.07.2012 12:44

luaprogrammer :
Ok, habs mit beidem mal ausprobiert, mit dem ersten hats wie gesagt zwar funktioniert, aber wenn der spieler mal auf einer anderen höhe seien solte funktioniert dies natürlich nicht mehr.
aber trotzdem danke Big Grin


Höhen können Sie ja nach belieben ändern.
Einfacher Denkanstoß: Man macht eine Grundhöhe die ist immer die höhe des Spielers somit sollte man immer gleich hoch springen. Der rest hängt von den gemachten Colisionen ab.

Beispiel:
grundhoehe = player.y

Wenn Sie es damit nicht hinbekommen werde ich nachher mal ein Beispiel machen. Ich muss jetzt aber noch sehr viel erledigen.

Edit:
Sie sollten auch noch eine allgemeine Gravitation machen.
Beispiel:
gravitation = 5
player.y = player.y - gravitation


Dies ist dafür da, falls der Player mal von einer hohen Position zu einer niedrigeren springen soll. Der Rest wird wie gesagt durch die Kollisionen geregelt.


RE: Lua, warten und springen - luaprogrammer - 07.07.2012 16:20

ok, danke Big Grin


RE: Lua, warten und springen - secret - 07.07.2012 17:50

Ich bin mir nicht sicher aber für springen brauchst du glaube ich die gravitation Formel....

oder so ähnlich ich hab davon nicht viel Ahnung Big Grin


Quelle: http://de.wikipedia.org/wiki/Gravitationskonstante


RE: Lua, warten und springen - luaprogrammer - 07.07.2012 19:49

:D klaaar =)

verlange aber kein danke von mir Tongue

Big Grin


RE: Lua, warten und springen - SIM sk - 08.07.2012 08:13

sieh dir mal diesen Code auf Evilmana an.
Versuche ihn zu verstehen und ihn so umzuändern, dass er zu deinem Code passt Smile


RE: Lua, warten und springen - Neutrosider - 08.07.2012 11:40

secret :
Ich bin mir nicht sicher aber für springen brauchst du glaube ich die gravitation Formel....

oder so ähnlich ich hab davon nicht viel Ahnung Big Grin


Quelle: http://de.wikipedia.org/wiki/Gravitationskonstante


Die Gravitationskonstate wird benutzt um die anziehungskraft zwischen zwei Punktförmigen massen zu berechnen (z.b. die zwischen 2 planeten)

Wenn er Physikalisch korrekt da ran gehen will, sollte we viel mehr nur mit der Erdgravitation (etwa 9,81 m/s²) arbeiten. nenn wir sie mal sinngemäß a (a für acceleration -> Beschleunigung)

jetzt brauch er nurnoch beim sprung einmal den vy-wert auf z.b. -3 m/s setzten (hier muss er testen bei welchem wert die sprunghöhe am besten fürs gameplay ist)

und jetzt in der hauptschleife einfach immer diesen code ausführen:

Code:
Player.y = Player.y + Player.vy
Player.vy = Player.vy + g



im gesamten sähe das dann so aus:

Code:
a = 2 //Das ist die stärke der gravitation im spiel, 9,81 dürfte dafürs gameplay zu stark sein, musste ausprobieren welcher wert gut ist
vs = -4 //das ist die Geschwindigkeit auf die der player beim sprung gesetzt wird. je weiter die zahl ins negative geht, desto höher der Sprung

while true do //halt die normale haupt-schleife

... //hier halt irgend ein code von dir

if pad:up() then //hier wird der sprung gestartet
Player.vy = vs //indem die y-geschwindigkeit auf dei vorher festgelegte "sprungstärke" gesetzt wird
end


if Player.y &lt; 235 or Player.y == 235 and Player.vy ~= 0 Then //überprüfen ob der player grade springt
Player.y = Player.y + Player.vy //spieler bewegt sich nach oben bzw. ab der sprunghälfte nach unten
Player.vy = Player.vy + a //hier passiert die magie, denn die geschwindigkeit wird mit der gravitationsbeschleunigung angepasst, so dass es aussieht wie ein echter sprung
else //wenn der spieler nicht im sprung ist, dann ...
Player.y = 235 //... soll er auf der höhe 235 sein
Player.vy = 0 //und nicht beschleunigt sein
end

... //hier weiterer code von dir, inklusive dem code fürs anzeigen vom player

end //ende der hauptschleife


und für die lesbarkeit nochmal, aber ohne kommentare:

Code:
a = 2
vs = -4

while true do

...

if pad:up() then
Player.vy = vs
end

if Player.y &lt; 235 or Player.y == 235 and Player.vy ~= 0 Then
Player.y = Player.y + Player.vy
Player.vy = Player.vy + a
else
Player.y = 235
Player.vy = 0
end

...

end


der code ist komplett ungetestet, aber mit etwas glück habe ich keine fehler reingebaut, wenn doch, ist er am ehesten in der if bedingung zu suchen, in der geprüft wird ob der player grade springt


RE: Lua, warten und springen - luaprogrammer - 08.07.2012 13:16

o.O ok danke! und eismal wirklich Big Grin

mal gucken ob der funktioniert, der von evilmana hat nur halb funktioniert, er hatte ein paar... bugs Big Grin


RE: Lua, warten und springen - SIM sk - 08.07.2012 16:00

Neutrosider :
Wenn er Physikalisch korrekt da ran gehen will, sollte we viel mehr nur mit der Erdgravitation (etwa 9,81 m/s-²) arbeiten. nenn wir sie mal sinngemäß a (a für acceleration -> Beschleunigung)

So viel ich weiß gehört da noch ein Hoch-Minus dazu Big Grin


RE: Lua, warten und springen - Neutrosider - 08.07.2012 16:20

SIM sk :

Neutrosider :
Wenn er Physikalisch korrekt da ran gehen will, sollte we viel mehr nur mit der Erdgravitation (etwa 9,81 m/s-²) arbeiten. nenn wir sie mal sinngemäß a (a für acceleration -> Beschleunigung)

So viel ich weiß gehört da noch ein Hoch-Minus dazu Big Grin


wenn dir das so beigebracht wurde wurde es dir falsch beigebracht. beschleunigung hat die einheit meter pro sekunde quadrat (also m/s²).

man könnte es auch als multiplikation schreiben, dann wäre dein - dabei, aber dann sähe die einheit so aus: m*s^-2
denn wie man weiss ist x^n = 1 / x^-n bzw x^-n = 1/x^n


RE: Lua, warten und springen - SIM sk - 08.07.2012 17:03

Neutrosider :

SIM sk :

Neutrosider :
Wenn er Physikalisch korrekt da ran gehen will, sollte we viel mehr nur mit der Erdgravitation (etwa 9,81 m/s-²) arbeiten. nenn wir sie mal sinngemäß a (a für acceleration -> Beschleunigung)

So viel ich weiß gehört da noch ein Hoch-Minus dazu Big Grin


wenn dir das so beigebracht wurde wurde es dir falsch beigebracht. beschleunigung hat die einheit meter pro sekunde quadrat (also m/s²).

man könnte es auch als multiplikation schreiben, dann wäre dein - dabei, aber dann sähe die einheit so aus: m*s^-2
denn wie man weiss ist x^n = 1 / x^-n bzw x^-n = 1/x^n


ist schon richtig was du sagst ^^
wir hatten es so gelernt 9,81ms-² = 9,81m*s-²


RE: Lua, warten und springen - dark-awesome - 09.07.2012 21:44

Ich bin baff was Neutrosider hier abliefert Big Grin
Ich denke mal ich hätte mir das einfach alles so angepasst das es gut rüber kommt.

Ich hätte das höchsten so gemacht:

collision = 0

....

if irgendeine_player_collision_zum_boden_block_usw then
collision = 1
end

if pad:up() and playerJump < 1 then
playerJump = 1
end

if playerJump == 1 then
Player.y = Player.y - 1

if Player.y == 10 then
playerJump = 2
end

end

if playerJump == 2 then
Player.y = Player.y + 1

if Player.y == 20 then
playerJump = 3
end

end

if playerJump == 3 and collision == 0 then
Player.y = Player.y + 1
if collision == 1 then
playerJump = 0
end
else //weis nicht mehr ob man so else und if in Lua macht ich weis gar nicht ob man so einen Kommentar macht :/
playerJump = 0
end

Bild ausgabe...


----------

Dann hätte ich die Variablen noch so angepasst das es gut im Spiel passt und fertig Smile
Ich hätte ihn dann noch so angepasst das man je nach dem wie lange man Hoch drückt höher und niedriger springen kann.


RE: Lua, warten und springen - luaprogrammer - 10.07.2012 14:05

oh gott.... ihr redet hier von zueg dass ich noch nicht einmal verstehe o.O
ich mein ja nur... Big Grin

aber ich hatte eigentlich schon eine lösung von evilmana, allerdings hat die ein paar bugs, ich schau mal ob diehier besser ist Tongue