Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 14, 2025 05:08

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Labyrinth-Spiel
BeitragVerfasst: Fr Jan 28, 2005 15:46 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Also, ich programmiere gerade mein erstes Spiel, und des laden eines Levels funktioniert schon (WOW :lol:)
Jetzt hab ich 2 Probleme:

1. Wenn ich mit den Pfeiltasten darin navigiere dann bewege ich mich nicht AUF dem Punkt, sondern immer UM den Punkt herum (ich sehe also dann immer in die Richtung des Punktes.

Code:
  1. glTranslatef(0, 0, -Pos.z);
  2. glRotatef(ax, 0, 1, 0);


das rufe ich vor dem Zeichnen auf, und so berechne ich wie er sich bewegen soll:

Code:
  1. if Key = VK_UP then
  2.   pos.z:= pos.z - cos(ay);
  3. if Key = VK_DOWN then
  4.   pos.z := pos.z + cos(ay);
  5. if Key = VK_LEFT then
  6.   ax := ax - 1;
  7. if Key = VK_RIGHT then
  8.   ax := ax + 1;


2. Wenn ich mich drehe kann ich "durch" die Wände (also Würfel) schauen, wie kann ich des abstellen bzw. verhindern!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 16:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
1.Hier dürften ein paar Tip's stehen :
http://www.delphigl.com/script/do_show.php?name=camera&action=2
2. Du solltest nicht nur den z-Wert der Position verändern, sondern auch den x-Wert, sonst bewegst du dich nur entlang der z-Achse.
Ich vermute die Drehung in deinem Fall kommt dadurch zustande, dass du erst Translierst und dann Rotierst. Aufgrund der natur von Matrizen (mit der ich mich nicht auskenn) muss man es aber soweit ich weiß genau andersherum machen.
Bei der aktuellen Methode dürftest du dich immer um einen Punkt drehen(mit links und rechts), wobei du die Distanz mit vorwärts und rückwärts ändern kannst.
3. Vieleicht hilft dir ja dieser Codeabschnitt von meiner Kameraklasse weiter (ich habe mal meine Überlegungen drinstehen lassen, vieleicht nützen sie ja was):
Code:
  1.  
  2. type
  3.   PCamera = ^TCamera;
  4.  
  5.   TCamera = packed record
  6.     pos : TVec3F;
  7.     angle : TXY;
  8.   end;
  9. {...}
  10. const
  11.   AnglechangeFac = 180/pi;
  12.  
  13. procedure TCam_MoveForward(var Camera : TCamera;const Distance : Float);
  14. begin
  15.   //     /|     sin(alpha)= x/D  <>sin(alpha)*D =x
  16.   // D /  |  x  cos(alpha)= z/D
  17.   // /____|
  18.   //    z
  19.   with camera do
  20.     begin
  21.       with pos do
  22.         begin
  23.           x := x - sin(angle.y)*Distance;
  24.           z := z - cos(angle.y)*Distance;
  25.         end;
  26.     end;
  27. end;
  28.  
  29. procedure TCam_Activate(Camera : TCamera);
  30. begin
  31.    With Camera do
  32.      begin
  33.        //sicherstellen, dass der Winkel zwischen 0 und 2*pi liegt [wenn nicht, ist zwar erstmal egal, aber bei größeren Werten sinkt irgendwann die Genauigkeit und noch später könnte es zu fehlern führen)
  34.        if angle.x >= 2*pi then angle.x := angle.x-2*pi
  35.          else if angle.x< -2*pi then angle.x := 2*pi-angle.x;
  36.        if angle.y >= 2*pi then angle.y := angle.y-2*pi
  37.          else if angle.y< -2*pi then angle.y := 2*pi-angle.y;
  38.        //erst Rotieren, dann Verschieben
  39.        GLRotatef(-Angle.x * AngleChangeFac, 1, 0, 0);
  40.        GLRotatef(-Angle.y * AngleChangeFac, 0, 1, 0);
  41.        GLTranslatef(-Pos.x, -Pos.y, -Pos.z);
  42.      end;
  43. end;
  44.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 17:30 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Danke, des werde ich probieren!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 18:55 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Was ist bitte TXY?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 19:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Sieht aus wie nen TPoint.
Probiers mal mit TPoint, sollte klappen.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 19:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 16, 2003 15:20
Beiträge: 198
Code:
  1.  
  2. type
  3.   TXY = packed record
  4.     x,y : single;
  5.   end;
  6.  

Also wie TPoint, nur mit Fließkommazahlen anstatt ganzen Zahlen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 19:45 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
ah danke!

juhu, dann fehlt nur noch die Kollision!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 21:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
die ist ja bei nem labyrind net ganz so schwer ;)
Ich würde es rießig machen und so das man bissl hochspringen kann und ganz wenig von oben sehen kann

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 28, 2005 21:26 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
yo, des ist net so schwer.
Deswegen mach ich des ja auch, damit ich ein bisschen lerne.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 15, 2005 19:29 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Adler hat geschrieben:
die ist ja bei nem labyrind net ganz so schwer ;)
Ich würde es rießig machen und so das man bissl hochspringen kann und ganz wenig von oben sehen kann


*heul* Und wie geht die Kollision?
Ich berechne meine Vertices ja, und bewege mich dann ja darin!
Vielleicht irgendwelche Tips ;)?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 15, 2005 19:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
weände (oder was auch immer) sind ja net schräg dort oder?
wenn sie nach ner reihe sind, dann prüfst du einfach ob do die seite der wand gewechselt hast, wenn ja dann x ODER Z wert zurücksetzen, net beides, sonst kannste net so an der wand dran lang rutschen.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 15, 2005 19:40 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Aha, aber ändern sich die Vertexpositionen der Wände nicht, wenn ich mich mit glTranslate bewege????


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 15, 2005 19:48 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
die bleiben gleich. denn wenn du jeden renderpass um (0,-5,0) verschiebst, bewegt sich doch nichts.

wenn du aber bei jedem tastendruck auf die pfeil-unten taste ein var y:integer um eins erhöhst und das im renderpass als gltranslatef(0,y,0) umsetzt, bewegst du dich jedesmal ein stück rückwärts. das heisst gltranslate setzt nur einen "globalen vektor", der in deinem renderpass zu den vertexpositionen nur dazugerechnet wird.

hoffe du konntest mir folgen.

wenn nicht: nein, gltranslate verändert nicht deine irgendwo gespeicherten vertexdaten(wie sollte es auch, hat es ja gar keinen zugriff und ausserdem keine ahnung, in welchem format und vor allem wo du deine vertexes speicherst).

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 15, 2005 20:03 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 19, 2004 00:27
Beiträge: 454
Wohnort: Nürnberg
Keine Ahnung wie ich darauf komm, aber okay.

Das heißt, ich speichere die Anzah meiner Würfel, und frag dann für jeden Würfel ab, ob ich ihn berühre, oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 15, 2005 20:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
ja

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 16 Queries | GZIP : On ]