|
Verfasser |
Nachricht |
Windows XD
Profi
Beiträge: 300
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 37
|
Lua- ein paar Anfängerfragen :)
Hallo
ich habe angefangen Lua zu programmieren.
Jetzt wollte mich mit meinenm ersten Spiel anfangen.
Es soll ein kleines Labyrinth für meinen 4 jährigen Cousin werden.
Es soll in etwa so aussehen:
a=Image.load("Boden.JPG")
b=Image.load("Wand.JPG")
c=Image.load("Ziel.JPG")
Spieler=Image.load("Spieler.JPG")
Spieler_x = 64
Spieler_y = 224
map={
{b,b,b,b,b,b,b,b,b,b,b,b,b,b,b},
{b,a,a,a,a,a,b,b,b,b,b,b,b,b,b},
{b,a,b,b,b,a,b,b,b,b,b,b,b,b,b},
{b,a,b,b,b,a,b,b,b,b,a,a,a,a,b},
{b,a,b,b,b,a,a,a,b,b,a,b,b,a,b},
{b,a,b,b,b,b,b,a,b,b,a,b,b,a,b},
{b,a,b,b,b,b,b,a,a,a,a,b,b,c,b},
{b,b,b,b,b,b,b,b,b,b,b,b,b,b,b}
}
while true do
for c=1,8 do
for d=1,15 do
screen:blit(d*32,c*32,map[c][d],false)
end
end
pad = Controls.read()
dx = pad:analogX()
dy = pad:analogY()
if dx > 30 then
Spieler_x = Spieler_x + (math.abs(pad:analogX())/64)
end
if dx < -30 then
Spieler_x = Spieler_x - (math.abs(pad:analogX())/64)
end
if dy > 30 then
Spieler_y = Spieler_y + (math.abs(pad:analogY())/64)
end
if dy < -30 then
Spieler_y = Spieler_y - (math.abs(pad:analogY())/64)
end
screen:blit(Spieler_x, Spieler_y, Spieler, true)
screen.flip()
screen.waitVblankStart()
end
Meine Fragen:
1. Wieso ist die Map leicht nach rechts unten versetzt?!
2. Wie bekomme ich die Kollison zwischen Spieler und Wand hin?
Danke im vorraus
Lukas
PS: Ziel des Spiels soll es werden, dass man wie in kinderzeitschriften den richtigen weg findne muss
Dieser Beitrag wurde zuletzt bearbeitet: 05.07.2011 14:11 von Windows XD.
|
|
04.07.2011 21:34 |
|
|
|
Windows XD
Profi
Beiträge: 300
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 37
|
RE: Lua- ein paar Anfängerfragen :)
Kann mir denn keiner Helfen?
LG Lukas
|
|
05.07.2011 14:15 |
|
|
|
Noob_Total
Banned
Beiträge: 74
Gruppe: Banned
Registriert seit: May 2011
Status:
Offline
Danke erhalten: 16
|
RE: Lua- ein paar Anfängerfragen :)
Die erste Frage weiß ich nicht, ist aber eigentl. auch egal, oder ?
Zu 2.
if x = 30 and y = 44 then --Wenn deine Variable (x) auf 30 (Koordinate) und y auf 44 "berührt", dann
dofile("labyrinth.lua") -- Startet deine z.B. "labyrinth.lua" (dein Spiel) von vorne .
end -- Ende ^^
Ich hoffe, du verstehst es .
Du kannst dir ja, mein Code, zu meinem Maze Game anschauen .
Ist das selbe Prinzip .
^^
|
|
05.07.2011 18:45 |
|
Folgende User bedanken sich: |
|
Windows XD
Profi
Beiträge: 300
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 37
|
RE: Lua- ein paar Anfängerfragen :)
Hallo
ich glaube du hast den sinn des Spiels nicht ganz verstanden(nicht böse gemeinst )
Sinn ist es den weg entlangzulaufen und zum Ziel(grün) zu kommen. Später gibt es dann auch abzeigungen, sackgassen,usw.
Das das Bild, nach rechts unten verschoben ist, stört mich schon :/
Zu dem anderen. Kann man es nicht einfach machen:
Wenn Bild a mit bild b kollidiert, dann blablabla ?
Weil so wie du es beschrieben hast, ist es sehr aufwendig :/
Danke im Vorraus
Lukas
|
|
05.07.2011 22:30 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: Lua- ein paar Anfängerfragen :)
setze c und d = 0 und nicht =1, dann ist das bild nicht verschoben
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
Dieser Beitrag wurde zuletzt bearbeitet: 05.07.2011 23:41 von Neutrosider.
|
|
05.07.2011 23:40 |
|
Folgende User bedanken sich: |
|
Windows XD
Profi
Beiträge: 300
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 37
|
RE: Lua- ein paar Anfängerfragen :)
Hallo
du meinst
while true do
for c=0,8 do
for d=0,15 do
screen:blit(d*32,c*32,map[c][d],false)
end
end
Wenn du es so meinst stürzt das Programm ab :/
c und d sind doch auch nur variable oder? weil evtl. könnte es probleme geben, da ich oben c schonmal für Ziel definiert habe :/
|
|
06.07.2011 08:30 |
|
|
|
fener98
Banned
Beiträge: 931
Gruppe: Banned
Registriert seit: May 2011
Status:
Offline
Danke erhalten: 333
|
RE: Lua- ein paar Anfängerfragen :)
Kannst du die Dateien irgendwo hochladen? Dann kann ich dir helfen.
|
|
06.07.2011 08:57 |
|
|
|
Windows XD
Profi
Beiträge: 300
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 37
|
RE: Lua- ein paar Anfängerfragen :)
Jop mach ich nachher
LG Lukas
|
|
06.07.2011 09:06 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: Lua- ein paar Anfängerfragen :)
Hallo
du meinst
while true do
for c=0,8 do
for d=0,15 do
screen:blit(d*32,c*32,map[c][d],false)
end
end
Wenn du es so meinst stürzt das Programm ab :/
c und d sind doch auch nur variable oder? weil evtl. könnte es probleme geben, da ich oben c schonmal für Ziel definiert habe :/
ja so meinte ich das eigentlich. wenn du mit c und d=1 anfängst, dann sieht das erste screen:blit so aus:
screen:blit(32,32,map[1][1],false)
denmach fängt er nicht bei den koordinaten 0 0 an, sondern bei 32 32.
aber ich denke ich habe den fehler gefunden, machs mal so:
for c=1,8 do
for d=1,15 do
screen:blit((d-1)*32,(c-1)*32,map[c][d],false)
end
end
dann sollte es weder nach rechts verschoben sein, noch abstürzen.
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
06.07.2011 10:26 |
|
Folgende User bedanken sich: |
|
Windows XD
Profi
Beiträge: 300
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 37
|
RE: Lua- ein paar Anfängerfragen :)
Hallo
1000dank es funktioniert. Das Bild ist nicht mehr verschoben!
Jetzt nochmal zu der Frage mit den Kollisionen.
Ich habe an 2 Möglichkeiten gedacht.
1. Möglichkeit
Wenn bild a mit Bild SPieler zusammenstößt gehts nicht weiter (gibt es wahrscheinlich nicht)
2. Möglichkeit (scheint mir aber sehr kompliziert, geht aber wahrscheinlich nicht anders.)
Ich mache mehrere modi.
Modus 1 Spieler kann in alle richtungen bewegt werden.
Modus 2 Spieler kann sich nur nach oben und unten bewegen
und dann eght das immer so weiter..
Oder gibt es noch eine 3. Möglichkeit?
LG Lukas
|
|
06.07.2011 13:04 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: Lua- ein paar Anfängerfragen :)
Es ist absolut ungestetstet (da ich auch dein programm grade nich da habe (kb es nachzuschreiben), aber rein theoretisch sollte es so klappen:
sposxa=Spieler_x
sposya=Spieler_y
if dx > 30 then
Spieler_x = Spieler_x + (math.abs(pad:analogX())/64)
end
if dx < -30 then
Spieler_x = Spieler_x - (math.abs(pad:analogX())/64)
end
if dy > 30 then
Spieler_y = Spieler_y + (math.abs(pad:analogY())/64)
end
if dy < -30 then
Spieler_y = Spieler_y - (math.abs(pad:analogY())/64)
end
color1 = screen:pixel(Spieler_x+31, spieler_y+31)
colors1 = color:colors()
color2 = screen:pixel(Spieler_x+31, spieler_y+31)
colors2 = color:colors()
if colors1.r~=0 or colors1.g~=0 or colors1.b~=0 or colors2.r~=0 or colors2.g~=0 or colors2.b~=0 then
Spieler_x=sposxa
Spieler_y=sposya
end
Es überprüft einfach ob der Spieler sich komplett auf einem schwarzen Feld befindet. Und wenn das nicht der fall ist wird die Spielerposition auf die vom vorherigen frame zurückgesetzt.
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
06.07.2011 16:52 |
|
Folgende User bedanken sich: |
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: Lua- ein paar Anfängerfragen :)
Es ist absolut ungestetstet (da ich auch dein programm grade nich da habe (kb es nachzuschreiben), aber rein theoretisch sollte es so klappen:
sposxa=Spieler_x
sposya=Spieler_y
if dx > 30 then
Spieler_x = Spieler_x + (math.abs(pad:analogX())/64)
end
if dx < -30 then
Spieler_x = Spieler_x - (math.abs(pad:analogX())/64)
end
if dy > 30 then
Spieler_y = Spieler_y + (math.abs(pad:analogY())/64)
end
if dy < -30 then
Spieler_y = Spieler_y - (math.abs(pad:analogY())/64)
end
color1 = screen:pixel(Spieler_x+31, spieler_y+31)
colors1 = color:colors()
color2 = screen:pixel(Spieler_x+31, spieler_y+31)
colors2 = color:colors()
if colors1.r~=0 or colors1.g~=0 or colors1.b~=0 or colors2.r~=0 or colors2.g~=0 or colors2.b~=0 then
Spieler_x=sposxa
Spieler_y=sposya
end
Es überprüft einfach ob der Spieler sich komplett auf einem schwarzen Feld befindet. Und wenn das nicht der fall ist wird die Spielerposition auf die vom vorherigen frame zurückgesetzt.
EDIT: du musst natürlich das > durch > und das < durch < ersetzen.
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
06.07.2011 16:54 |
|
Folgende User bedanken sich: |
|
Windows XD
Profi
Beiträge: 300
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 37
|
RE: Lua- ein paar Anfängerfragen :)
Vielen dank, für die Mühe, jedoch funktioniert es leider immer noch nicht.
Ich denke, dass es am Aufbau meines Programmms liegt.
Leider habe ich noch nicht genau verstanden, was es mit dem Color1, Colors1, usw auf sich hat.
außerdem verstehe ich folgende Zeilen nicht ganz :
color1 = screenixel(Spieler_x+31, Spieler_y+31)
colors1 = color:colors()
color2 = screenixel(Spieler_x+31, Spieler_y+31)
colors2 = color:colors()
if colors1.r~=0 or colors1.g~=0 or colors1.b~=0 or colors2.r~=0 or colors2.g~=0 or colors2.b~=0 then
ich habe nur verstanden, dass er in der letzten Zeile überprüft, ob der Spieler noch auf dem Schwarzen Feld ist. Wenn nicht wird er zurückgesetzt.
"Scannt" das Programm in dem Codblock davor, auf welcher farbe sich der Spieler befindet, oder wie muss ich mir das Vorstellen?
Hier der Komplette Code:
a=Image.load("Boden.JPG")
b=Image.load("Wand.JPG")
z=Image.load("Ziel.JPG")
Spieler=Image.load("Spieler.JPG")
Spieler_x = 32
Spieler_y = 192
map={
{b,b,b,b,b,b,b,b,b,b,b,b,b,b,b},
{b,a,a,a,a,a,b,b,b,b,b,b,b,b,b},
{b,a,b,b,b,a,b,b,b,b,b,b,b,b,b},
{b,a,b,b,b,a,b,b,b,b,a,a,a,a,b},
{b,a,b,b,b,a,a,a,b,b,a,b,b,a,b},
{b,a,b,b,b,b,b,a,b,b,a,b,b,a,b},
{b,a,b,b,b,b,b,a,a,a,a,b,b,z,b},
{b,b,b,b,b,b,b,b,b,b,b,b,b,b,b}
}
while true do
for c=1,8 do
for d=1,15 do
screen:blit((d-1)*32,(c-1)*32,map[c][d],false)
end
end
pad = Controls.read()
dx = pad:analogX()
dy = pad:analogY()
sposxa=Spieler_x
sposya=Spieler_y
if dx > 30 then
Spieler_x = Spieler_x + (math.abs(pad:analogX())/64)
end
if dx < -30 then
Spieler_x = Spieler_x - (math.abs(pad:analogX())/64)
end
if dy > 30 then
Spieler_y = Spieler_y + (math.abs(pad:analogY())/64)
end
if dy < -30 then
Spieler_y = Spieler_y - (math.abs(pad:analogY())/64)
end
color1 = screenixel(Spieler_x+31, Spieler_y+31)
colors1 = color:colors()
color2 = screenixel(Spieler_x+31, Spieler_y+31)
colors2 = color:colors()
if colors1.r~=0 or colors1.g~=0 or colors1.b~=0 or colors2.r~=0 or colors2.g~=0 or colors2.b~=0 then
Spieler_x=sposxa
Spieler_y=sposya
end
screen:blit(Spieler_x, Spieler_y, Spieler, true)
screen.flip()
screen.waitVblankStart()
end
Danke im Vorraus
Lukas
|
|
06.07.2011 21:37 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: Lua- ein paar Anfängerfragen :)
oh mist, da ist noch ein fehler. ich werde das ganze mal eben testen udn zum laufen bringen, ich schätze in ner viertel stunde oder so läufts.
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
06.07.2011 21:59 |
|
Folgende User bedanken sich: |
|
Windows XD
Profi
Beiträge: 300
Gruppe: User
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 37
|
RE: Lua- ein paar Anfängerfragen :)
Ok Danke!!
Sag mir dann noch pls wo der Fehler war.
Lass dir Zeit
Ich gehe jetzt eh schlafen und guck mir das ganze morgen ausgeschlafen an
Gute Nacht
Lukas
|
|
06.07.2011 22:03 |
|
|
|
|