Hallo, also ich habe ein Frage:
Wenn ich meine Figur springen lassen will, habe ich 2 Probleme.
1. Sobald ich den Lua Player starte, sinkt meine Figur bis zur hälfte unter den Bildschirm rand. Wenn ich dann 1 mal nach oben drücke, sinkt sie wieder, aber auch wieder unter den Bildschirm rand
weiß jemand, wie ich das ändern kann ?
white = Color.new(255,255,255)
normal = Image.load("normal.png")
x=0
y=0
while true do
pad = Controls.read()
screen:clear(white)
if pad:up() then
y = y - 5
end
if y < 250 then
y = y + 0.500
end
screen:blit(x,y,normal)
screen.flip()
oldpad = pad
end
Ich hab den Wert 250 auch schon verändert, es hat nunmal nichts gebracht :/
y = 0 ist jetzt irgendwie an Falsche stelle, normal steht dort immer 220.
Gelöst!
2. Meine Frage: Wenn ich beim springen eine Animation machen will (mit zähler) dann würde es sich doch überlappen oder ?
Denn wenn die Figur springt, dann geht der zähler hoch, und wenn sie Sinkt, dann geht doch der zähler auch wieder runter oder irre ich mich dort ? Geht es auch, das wenn meine Figur sinkt, das der zähler steigt ?
Ich hoffe ihr versteht mein Problem !
Soweit ich das verstehe startest du bei y=0. Dabei ist y < 250 und deshalb sinkt die Figur bei jedem Durchlauf des Loops um einen halben Pixel nach unten. Am Ende bleibt sie bei Y=250 stehen, das entspricht dem unteren Bildschirmrand (272px), sodass sie da unten hängt. Wenn du nach oben drückst geht die schleife, die die Figur normal nach unten schickt nicht aus.
Zu der Sprunganimation: Ich würde einen Zähler nehmen, auf den du ddann mit s=1/2at^2 aufbauen kannst. Damit kriegst du realistische Beschleunigungs- und Bremsvorgänge hin. S ist die Position, a ist die Beschleunigung (negativer Wert für einen Bremsvorgang) und t die Zeit, die du mit einem Timer definierst.
Ok, also das Problem, das meine Figur weiter unten ist, habe ich gelöst bekommen (danke DuLouser
)
Kann ich bei dem Animation Timer auch
if zaehler = zaehler < 20 then
screen:blit:(x,y,bild)
elseif zaehler = zaehler < 40 then
blablabla...
Natürlich anders geschrieben, aber ich meine, das bei jedem Tick ein neues Bild geladen wird ?
oder überlappt sich da was ?
modus = "steht"
normal = Image.load("normal.png")
springen = Image.load("springen.png")
x=220
y=272 - normal:height()
while true do
pad = Controls.read()
screen:clear()
if pad:up() and oldpad:up() ~= pad:up() and y ==272 - normal:height() then
y = y - 10
mode= "springt"
else
mode = "steht"
end
if y < 272 - normal:height() then
y = y + 0.10
elseif y > 272 - normal:height() then
272
end
if mode == "steht" then
screen:blit(x,y,normal)
elseif mode == "springt" then
screen:blit(x,y,springen)
end
screen.flip()
oldpad = pad
end
*EDIT* Fehler korrigiert
Oke, also ich hab das jetzt 2 mal gemacht:
1 mal habe ich einen Zeiger gesetzt und dann bei jedem Tick ein neues Bild zu machen. Es ging, allerdings ist meine Figur kein Meter hoch, danach habe ich noch den Zähler weggemacht, aber Meine Figur ist kein Meter gesprungen
ohh, da ist ein fehler drin. sry
wenn du einen realistischen sprung haben willst, der wirklich parabelform hat, musste der figur ne y-geschwindigkeit geben. dann noch ne variable die die gravitation beinhalttet, kannste z.b. gravity nennen.
gravity würde ich einfach vor der while schleife zum testen erstmal auf 1 setzen (entspricht einer Beschleunigung von 1 pixel/frame^2)
dann in der while schleife machste dann, damit die gravitation auch eine wirkung hat, was in der art:
if y+vy+gravity<220 then
vy=vy+gravity
y=y+vy
else
y=220
vy=0
end
und dann halt um nen sprung zu machen:
if oldpad:up() and not pad:up() then
vy=-10
end
ist zwar nicht getestet, aber so sollte man einen recht realistischen sprung hinbekommen.
je höher du die variable gravity setzt, dest stärker ist die gravitation. je weiter unter 0 man vy beim sprung setzt, desto stärker ist der sprung.
@ DuLouser, jetzt fällt meine Figur nach unten wenn ich nach oben drücke
@Neutrosider: Sorry, aber ich habe kein Wort verstanden, soweit bin ich noch lange nicht :o
Edit: DuLouser, ausnahmsweise hab ich den Code copy&paste, und selbst kommt ein Fehler. Die Figur springt ganz kurz, sinkt und dann ist sie weg O.o
ich habs nicht getestet, aber so könntest klappen, vorausgesetzt ich hab keinen fehler reingemacht:
normal = Image.load("normal.png")
springen = Image.load("springen.png")
bild=normal
x=220
y=272 - normal:height()
while true do
pad = Controls.read()
screen:clear()
if oldpad:up() and not pad:up() then
vy=-10
bild=springen
end
if y < 272 - normal:height() or vy~=0 then
if y+vy+gravity < 272-normal:height() and then
vy=vy+gravity
y=y+vy
else
y=220
vy=0
bild=normal
end
end
screen:blit(x,y,bild)
screen.flip()
oldpad = pad
end
Neutrosider, hat nicht geklappt, er meldet mir einen Fehler in zeile 11 das irgendwas mit oldpad sei, aber das versteh ich jetzt nicht.
ja wie gesagt. war nicht getestet. der fehler ist, dass die variable oldpad an der stelle noch nicht existiert. probiers mal damit:
normal = Image.load("normal.png")
springen = Image.load("springen.png")
bild=normal
x=220
y=272 - normal:height()
vy=0
gravity=1
oldpad = Controls.read()
while true do
pad = Controls.read()
screen:clear()
if oldpad:up() and not pad:up() then
vy=-10
bild=springen
end
if y < 272 - normal:height() or vy~=0 then
if y+vy+gravity < 272-normal:height() and then
vy=vy+gravity
y=y+vy
else
y=220
vy=0
bild=normal
end
end
screen:blit(x,y,bild)
screen.flip()
oldpad = pad
end
btw, die beiden Bilder normal.png und springen.png sind aber im HB-Ordner, oder?
Also ich habe jetzt die Animation bekommen, allerdings nur wenn er hochgespringt, wenn er sinkt, dann ist er wieder normal, da muss ich nochmal einen modus machen :/
modus = "steht"
white = Color.new(255,255,255)
normal = Image.load("normal.png")
springen = Image.load("springen3.png")
x=0
y=220
while true do
pad = Controls.read()
screen:clear(white)
if pad:up() then
y = y - 1
end
if pad:up() then
mode = "springt"
else
mode = "steht"
end
if mode == "steht" then
screen:blit(x,y,normal)
elseif mode == "springt" then
screen:blit(x,y,springen)
end
if y < 250 then
y = y + 0.750
end
if y > 220 then
y = 220
end
screen.flip()
oldpad = pad
end
mit dem code erreichst du keinen realistischen sprung. was du damit erreichst ist, dass die figur solange nach oben schwebt, bis du die oben taste loslässt...
mit dem code erreichst du keinen realistischen sprung. was du damit erreichst ist, dass die figur solange nach oben schwebt, bis du die oben taste loslässt...
das reicht mir auch fürs erste. Ich habe noch Zeit bis ich ein Homebrew mache
Allerdings muss ich noch herausfinden, wie ich meine Figur landen lassen kann, also das dass bild wieder ändert.