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

Aktuelle Zeit: Mi Jul 16, 2025 11:59

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 2D "Object mit Maus bewegen"
BeitragVerfasst: Sa Jan 29, 2011 21:53 
Offline
DGL Member

Registriert: Fr Jan 28, 2011 12:24
Beiträge: 18
Programmiersprache: Delphi,AS3,C++,VB
Hallo DGL Community,

jeder fängt klein an und für mein erstes project hatt ich mir vorgenommen ein kleines 2D spiel zu programieren allein schon vom lernefect her nur bin ich jetzt an einer hürde gestoßen habe hier im Forum schon alles abgesucht und nix für 2d gefunden die wiki toturials bin ich jetzt bis zur Toturial 2D gekommen habe bei den anderen schon mal reingeschnuppert aber auch da nix gefunden.

ich habe ein feld fenstergröße "1024 x 765" meine object ist "32x32" kugel.
Die kugel möchte ich nun per mausklick in die richtung bewegen wo ich die maus klicke.

Hintergurnd = LoadTexture('data\bg.jpg', Backround, False);
Kugel = LoadTexture('data\kugel.tga', Player1, False);

Nur fehlt mir hier der ansatz wie ich das nun umsetze bzw. wie ich die position berechne und die bewegung steuere. eine erklärung dazu habe ich hier leider nicht gefunden. kann mir bitte jemand helfen.

Ich benutze delphi 7

_________________
Es gibt zwei Dinge die unendlich sind - das Universum und die menschliche Dummheit...................beim Universum bin ich mir nicht so sicher.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: So Jan 30, 2011 01:06 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wie ist dein Spiel aufgebaut? Schaust du senkrecht von Oben auf deine Karte?

Wenn ja, dann kannst du bei einem Mausklick leicht herausfinden was unter der Maus lag bzw. die Koordinaten auf der Karte bestimmen.
Dann musst du nur noch deine Kugel bewegen. Das machst du, indem du die Kugel in jedem Renderdurchlauf um ein Stück verschiebst.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: So Jan 30, 2011 17:22 
Offline
DGL Member

Registriert: Fr Jan 28, 2011 12:24
Beiträge: 18
Programmiersprache: Delphi,AS3,C++,VB
ja ich schaue senkrecht von Oben auf deine Karte!!

Ich lade mal mein versuch hoch.
der code sollte noch sehr unordendlich sein bitte rückicht nehmen bin erst seit 2 tagen dabei und es ist mein erster versuch.

Dort kann ich zwar schon den player per gedrückter taste bewegen aber das war nicht mein ziel.. habe schon mehreres versucht aber ohne erfolg.

Die bewegung sollte wie bei Planeto gesteuert werden.

wie mache ich das mit der Position.

Source + exe hier http://www.megaupload.com/?d=CP5T64RE

MFG Petros

_________________
Es gibt zwei Dinge die unendlich sind - das Universum und die menschliche Dummheit...................beim Universum bin ich mir nicht so sicher.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: Mo Jan 31, 2011 15:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Die bewegung sollte wie bei Planeto gesteuert werden.

"Planeto" sagt mir leider gar nichts. Versuche mal genauer zu beschreiben was du haben möchtest.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: Di Feb 01, 2011 14:31 
Offline
DGL Member

Registriert: Fr Jan 28, 2011 12:24
Beiträge: 18
Programmiersprache: Delphi,AS3,C++,VB
Kennst du das Online Browser game Dark Orbit... http://www.darkorbit.de/ | oder command and conquer von der Maus steuerung her.

z.b der Ball ist links unten und ich klicke oben rechts dann soll der ball dort hin gehen, oder da da wo ich hin klicke.

Das game planeto wird hier bei euch im Forum angeboten siehe viewtopic.php?f=13&t=8686&p=73996&hilit=Planeto#p73996

_________________
Es gibt zwei Dinge die unendlich sind - das Universum und die menschliche Dummheit...................beim Universum bin ich mir nicht so sicher.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: Di Feb 01, 2011 14:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ich kenne zwar auch Dark Orbit nicht, aber unter C&C kann ich mir was vorstellen. Trotzdem ist mir noch nicht 100%ig klar was du möchtest:
1. Der Ball soll sich auf gerader Linie auf die vom Benutzer angeklickte Position bewegen? Das wäre recht einfach zu realisieren.
2. Du möchtest das sich der Ball auf die geklickte Position bewegt, dabei aber eventuelle Hindernisse im Weg berücksichtigt? Hier brauchst du "Pathfinding". Im Wiki finden sich dazu zwei Tutorials.


zu 1.:
Der Ball bekommt eine Zielposition. Immer wenn der Nutzer irgendwo hin klickt setzt du diese Position neu. Die Bewegung in jedem Frame wird dann wie folgt realisiert:
Code:
direction := positionZiel - positionBall;
distance := length(direction);
direction := (1/distance) * direction;
if (speed * timeElapsed >= distance) then begin
   // Ziel wird in diesem Frame erreicht bzw. der Ball ist schon da
   positionBall := positionZiel;
end
else begin
   // mit Geschwindigkeit speed auf das Ziel zu bewegen
   positionBall := positionBall + (speed * timeElapsed) * direction;
end;

Anmerkungen:
positionZiel, positionBall und direction sind 2D-Vektoren. Sie haben also jeweils eine X- und eine Y-Komponente
Die Funktion length berechnet die Länge eines Vektors: sqrt(x*x + y*y)
speed ist die Geschwindigkeit in "Einheiten pro Sekunde"
timeElapsed ist die Zeit in Sekunden die seit dem letzten Frame vergangen ist.
Ich programmiere in C++/Java....ich hoffe ich habe die Delphi-Syntax halbwegs getroffen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: Mi Feb 02, 2011 09:51 
Offline
DGL Member

Registriert: Fr Jan 28, 2011 12:24
Beiträge: 18
Programmiersprache: Delphi,AS3,C++,VB
also hindernisse muss er nicht ausweichen es geht mir nur um die bewegung dort hin. Den syntax ist richtig werde es mal ausprobieren. gebe dann bescheit ob ich es hinbekomme. wo muss ich den von dir genanten code eintragen. bei Render oder neue Prozedure anlegen und diese dann abrufen

_________________
Es gibt zwei Dinge die unendlich sind - das Universum und die menschliche Dummheit...................beim Universum bin ich mir nicht so sicher.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: Mi Feb 02, 2011 10:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
wo muss ich den von dir genanten code eintragen. bei Render oder neue Prozedure anlegen und diese dann abrufen

Ähm, soweit ich weiß kann Delphi nicht mit Vektoren umgehen. Also quasi sämtliche Aufrufe bei denen 2D-Vektoren vorkommen musst du einmal für X und einmal für Y machen. Jedenfalls kannst du den Code nicht 1:1 übernehmen ;)

Da das ganze eigentlich nichts mit dem rendern zu tun hat würde ich es nicht in die render-Methode packen. Ich mache das üblicherweise so das ich eine Methode mainloop() habe die in jedem Frame aufgerufen wird. Diese nimmt die Zeitmessung vor und ruft dann update() und render() auf.

Edit: Übrigens sehe ich beim Blick auf deinen Code das deine Zeitmessung falsch ist. Du misst nur die Zeit die du zum rendern benötigst. Der Computer verbringt aber auch eine Menge Zeit in bei der Verarbeitung von Events (z.B. Maus/Keyboard) oder gar in anderen Anwendungen. Du solltest die Zeit messen die vom Anfang der Render-Methode bis zum nächsten Anfang der Render-Methode vergeht.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: Mi Feb 02, 2011 13:41 
Offline
DGL Member

Registriert: Fr Jan 28, 2011 12:24
Beiträge: 18
Programmiersprache: Delphi,AS3,C++,VB
danke für den hinweis ist mir nicht aufgefallen werde es gleich mal ändern wegen der zeitmessung. das der code nicht 1:1 übernommen werden kann da du ja schon sagtest du machst ja nur Java und C++, ich hätte jetzt mehrere varianten durch versucht irgendwann komm ich dann drauf aber ein anfang ist es schon mal..

_________________
Es gibt zwei Dinge die unendlich sind - das Universum und die menschliche Dummheit...................beim Universum bin ich mir nicht so sicher.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: Mi Feb 02, 2011 14:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Da es ja nur ein paar Zeilen sind hab ich das nochmal fix ausgeschrieben. So müsste es auch in Delphi gehen:
Code:
directionX := positionZielX - positionBallX;
directionY := positionZielY - positionBallY;
distance := sqrt(directionX*directionX + directionY*directionY);
directionX := directionX / distance;
directionY := directionY / distance;
if (speed * timeElapsed >= distance) then begin
   // Ziel wird in diesem Frame erreicht bzw. der Ball ist schon da
   positionBallX := positionZielX;
   positionBallY := positionZielY;
end
else begin
   // mit Geschwindigkeit speed auf das Ziel zu bewegen
   positionBallX := positionBallX + (speed * timeElapsed) * directionX;
   positionBallY := positionBallY + (speed * timeElapsed) * directionY;
end;



Übrigens definiert die dglOpenGL.pas auch Typen wie
Code:
TGLVectorf2  = array[0..1] of TGLfloat;

Diese kannst du statt dem X und Y natürlich auch benutzen. In C++ würde man sich etwas ähnliches definieren und dann die Operatoren +-*/ usw. dafür definieren. Dann kann man die Vektoren in C++ tatsächlich so intuitiv benutzen wie in meinem ersten Post beschrieben. Delphi hat dafür andere Dinge die ich in C++ vermisse ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: Mo Feb 07, 2011 14:28 
Offline
DGL Member

Registriert: Fr Jan 28, 2011 12:24
Beiträge: 18
Programmiersprache: Delphi,AS3,C++,VB
ich werde mal mein glück versuchen.. und schauen ob ich es hin bekomme.

_________________
Es gibt zwei Dinge die unendlich sind - das Universum und die menschliche Dummheit...................beim Universum bin ich mir nicht so sicher.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: 2D "Object mit Maus bewegen"
BeitragVerfasst: Mo Feb 07, 2011 14:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
ich werde mal mein glück versuchen.. und schauen ob ich es hin bekomme.

Einfach solange dumme Fragen stellen bis es "klick" macht :)

(Wobei du immer versuchen solltest die Frage so genau wie möglich zu stellen, um so genauer ist dann auch die Antwort....)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.013s | 17 Queries | GZIP : On ]