KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: LUA:Mauer beschränken ?
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Wie sollte das dann richtig heißen ?

EditBig Grinen Ball und die Map sieht man schon, aber es gibt keine Bewegungen ...

der aktuelle code:

Code:
--Pics--
ball=Image.load("ball.png")
map1=Image.load("map1.png")
--Variable--
startx=118
starty=245
   endx=454
   --A--
while true do
   pad=Controls.read()
   screen:clear()
   screen:blit(0,0,map1,true)
   screen:blit(118,245,ball)

   if pad:right() then
startx =startx +1
end
if pad:left() then
starty=starty -1
end
if pad:up() then
   starty=starty -1
end
if pad:down() then
startx =startx +1
end

   screen.waitVblankStart()
   screen.flip()
   end

versuch so


ball=Image.load("ball.png")
map1=Image.load("map1.png")
startx=118
starty=245
endx=454
while true do
screen:blit(0,0,map1,false)
screen.flip()
screen.waitVblankStart()

pad=Controls.read()

if pad:right() then
starty = startx +1
screen:blit(startx,starty,ball,false)
end
if pad:left() then
starty = startx -1
screen:blit(startx,starty,ball,false)
end
if pad:up() then
starty = starty -1
screen:blit(startx,starty,ball,false)
end
if padBig Grinown() then
starty = starty +1
screen:blit(startx,starty,ball,false)
end
end


MFG. das sollte gehen ^^ PS: wieso lades du die map???
die musst du erstellen und dann die bewegung darunter also die pads
Jetzt ist der Ball nicht mehr da .
Wenn der Weg geht ist der einfacher .
Versuch so....




ball=Image.load("ball.png")
map1=Image.load("map1.png")
startx=118
starty=245
endx=454
while true do
screen:blit(0,0,map1,false)

pad=Controls.read()

screen:blit(startx,starty,ball,true)

if pad:right() then
starty = startx +1
screen:blit(startx,starty,ball,false)
end
if pad:left() then
starty = startx -1
screen:blit(startx,starty,ball,false)
end
if pad:up() then
starty = starty -1
screen:blit(startx,starty,ball,false)
end
if padown() then
starty = starty +1
screen:blit(startx,starty,ball,false)
end
screen.flip()
screen.waitVblankStart()
end
Jetzt kann man nach unten und nach oben gehen, aber nicht nach links oder rechts ...

EDIT// JA !!! ES GEHT JETZT ...Du hast bei startx = starty +1 starty geschrieben ...
Wie mach ich jetzt, dass ich bei einer bestimmten Wand nicht weiter kann ?


EDIT2// Wenn mien Ball z.B bei der Y-Achse bei 50 nicht weiter nach links soll, soll es dort halt nicht weiter "rollen" .
Kann mir einer den Code dafür geben ?

Variablen :
startx (soll bei 36 und bei 78 stoppen)
starty (soll bei 50 und bei 185 stoppen)
also ich habs nicht gechackt naja egal gehts jetzt Wink?


ach du willst das du nicht mehr weiter kannst okkkkeeyyy... das sind kollusionen da kenn ich mich nicht aus srry =,( hier:... ein kleines tut vom bumuckl Wink


Eine Kollision im echten Leben, das wäre zum Beispiel der Zusammenprall zweier Gegenstände. Auch beim Programmieren kann bzw. braucht man manchmal "Kollisionen". Was Kollisionen in Lua sind und wann man sie braucht, das erfahrt ihr in diesem kleinen Tutorial:

Nehmen wir einfach mal an, wir haben das Bild eines Balles geladen und geben den Ball mit den vorher definierten Variablen x und y aus. Im Mainloop vergrößern wir x ständig, das hat zur Folge, dass der Ball immer weiter nach rechts gelangt, solange, bis wir einschreiten und ihm einen Riegel vorschieben. Wir teilen dem Luaplayer mittels eines if-Blocks mit, dass der Wert von x ab einer bestimmten Position nicht mehr vergrößert wird bzw ihm sogar im Gegensatz wieder etwasabgezogen wird. Dadurch entsteht sozusagen eine unsichtbare Mauer, an der der Ball abprallt. Unsere erste kleine "Kollision"!

if x > 480 then
x=480
end
In diesem Fall nennt man das eine "Kollisionsabfrage". Wenn man nun will, dass sich x beim Erreichen des Grenzwertes wieder andauernd verkleinert, der muss sich eines Tricks bedienen. Wir bauen eine Variable für den "Modus" ein.

ball = Image.load("ball.png")
x = 100
y = 100

modus = 0

while true do
if modus == 0 then
x = x + 1
end
if x>480 then
modus = 1
end
if modus == 1 then
x = x - 1
end
if x < 0 then
modus = 0
end

screen.flip()
screen.waitVblankStart()
end

Der Trick ist ganz einfach: Am Anfang ist die Variable Modus gleich 0. Wenn der Modus gleich 0 ist, dann wird x ständig vergrößert. Wenn der Modus gleich 1 ist, dann wird x ständig verkleinert. Wenn x nun größer als 480 wird, dann wechselt auch der Modus, was zur Folge hat, dass sich der Wert ständig verkleinert, bis zur Kollisionsabfrage für x kleiner 0. Dann wechselt der Modus wieder zu 0 und der Wert von x wird wieder vergrößert.

Hier sieht das alles noch recht einfach aus, was es zweifellos auch ist. Die Kollisionsabfrage wird erst bei verschiedenen Flächenformen wie Kreise, Ellipsen oder Dreiecken relativ schwer
Komisch...
Ich habe das hier eingfeügt :
if y > 50 then
y=50
end
Doch Fehler:attempt to compare nil with number .
Ich will das es bei Y nur bis 50 geht (rechts von 50 ist normal) .
Wie mach ich das ?
Kennt sich damit einer aus ?

Danke.

Code:
--PICS--
ball=Image.load("ball.png")
map1=Image.load("map1.png")
--VARIABLE--
startx=118
starty=245
endx=454
--A--
while true do
screen:blit(0,0,map1,false)
pad=Controls.read()
screen:blit(startx,starty,ball,true)
--IF--
if pad:right() then
startx = startx +3
screen:blit(startx,starty,ball,false)
end
if pad:left() then
startx = startx -3
screen:blit(startx,starty,ball,false)
end
if pad:up() then
starty = starty -3
screen:blit(startx,starty,ball,false)
end
if pad:down() then
starty = starty +3
screen:blit(startx,starty,ball,false)
end


screen.flip()
screen.waitVblankStart()
end


EDIT // Ich habs jetzt geschafft, nur, wie kann man machen, dass an einer bestimmten Stelle wieder normal ist ,bzw. wie kann man die Mauer beschränken ?

danke.

Weiß das keiner ?
doch frag james cutter der kennt das alles bschtimmt
das ist doch nicht so schwer, die fehlermeldung sagt doch schon was der fehler ist:
attempt to compare nil with number .
auf deutsch: versuche nil (hier: eine nicht initialisierte variable) mit einer zahl zu vergleichen
da die zahl (50) nicht wirklich falsch sein kann, liegts an der variable, hier: y

im grunde steht da nur dass y nicht initialisiert wurde, also keinen inhalt hat. y muss vorher definiert sein, um es mit etwas anderem zu vergleichen ...
wassssssss??? xD um erhlich zu sein hab ich kein wort getchekt aber ich glaube du meinst die zahl 50 braucht eine veriable oder ein wert oder so xD KP
nein ich meine einfach dass y als variable nicht exisitert, da er vorher y nicht definiert hat. und da y nicht exisitert ist das programm nicht in der lage zu gucken ob y==50 ist, denn wie gesagt, y exisitert nicht
achsooo ^^ sag doch gleich dan muss er schreiben ypos wäre besser??
Seiten: 1 2 3 4
Referenz-URLs