Autor Beitrag
fcg
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 360

WinXP
D3 Prof, D6 Pers
BeitragVerfasst: Do 11.07.02 14:22 
Hi Leute

ich bin dabei ein simples 2d Autorennen zu proggen (mit Delphi X).

Die Strecke ist dabei ein Image, welches zur Laufzeit in die DXImageList geladen wird. Das Auto ist ebenfalls in Bildchen. Ich habe aber noch kein Plan, wie ich es schaffe, das das Auto nicht von der Strecke fahren kann? Es soll an den banden am Rande der Strecke abprallen.

oder wie kann man sowas sonst schaffen??

ich hoffe, ihr könnt mir nen paar tipps geben :)

mfg
flip
Scrat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Fr 12.07.02 12:36 
Mach das doch so wie in den früheren Spielekonsolen.

Laß einfach nur den Hintergrund bewegen. Und das Auto kannst du nur nach links oder rechts lenken. Sieht zwar nicht so toll aus, funktioniert aber.

_________________
Wenn ein Programm nutzlos ist, muß es dokumentiert werden.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 12.07.02 13:22 
Hallo,

vom Grundprinzieb müsste es doch so laufen:

1. Du teilst dein Spielfeld in Sektoren auf (unsichtbar für den Spieler).
2. Du definierst für jeden Sektor die ensprechende Eigenschaft (z.B. kann befahren werden/kann nicht befahren werden).
3. Immer wenn sich das Auto von einen Sektor in den nächsten bewegen soll, musst du überprüfen ob dies erlaubt ist oder nicht. Ensprechend reagierst du und lenkst das Auto gegebenenfalls ab.

Wie grob oder fein du dein Raster machst bleibt dir überlassen. Ich kann mir vorstellen, das es einfacher ist, wenn man die Feldgröße = Autogröße setzt. Am gläubwürdigsten wird es wahscheinlich sein wenn du Pixelgenau arbeitest.
Im letzeren Fall, kannst du wenn es nur um kann befahren werden/kann nicht befahren werden auch die Pixelfarbe des hintergrundbildes verwenden. Nach dem motto, mein Auto fährt nur auf schwarz. Das grundprinziep bleibt aber das selbe.

Zum schluß möchte ich noch bemerken, das ich mich noch nie mit Spieleprogrammierung auseinandergesetzt habe und es somit vieleicht wesentlich bessere Techniken gibt. Da du aber schon eine Weile auf Antwort wartest wollte ich dich nicht völlig im Regen stehen lassen.

Gruß
Klabautermann
fcg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 360

WinXP
D3 Prof, D6 Pers
BeitragVerfasst: Fr 12.07.02 17:27 
vielleicht ne doofe frage,

aber wie unterteile ich mein Spielfeld oder das Image in Sektoren, und wie frage ich das ganze dann ab??


mfg
flip
Thunderman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 26



BeitragVerfasst: Fr 12.07.02 22:49 
Hallo!

Eine Möglichkeit ist einfach ein 2 Dimensionales Array zu definieren. Wenn es nur um kann befahren werden/ kann nicht befahren werden geht, reicht so ein Array vom Typ Boolean. Ansonsten solltest Du dir einen eingenen Typ definieren, also ein record, dass alle benötigten Eigenschaften enthält. Die Größe dieses Arrays kannst Du jetzt frei wählen, wobei genauer als ein Pixel also größer als dein Level musst dun es nicht amchen. Du kannst jetzt aber auch immer 4 Pixel zusammenfassen, also Quadrate nehmen, dann hat jede Dimension deines Arrays nur noch die Hälfte, bei 16 Pixeln nur noch 1/4, etc

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
HaseKlopfer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 14.07.02 03:35 
TDrawGrid Compo + Array[0..maxfeldx,0..maxfeldy] -> gridlinewidth setz mal auf 0 -> im drawgrid "ondraw" erreignis mal mit drawgrid.canvas deine felder nach befahrbar, nicht befahrbar an -> abfrage mit cellrect (function vom drawgrid) -> 2 möglichkeiten

entweder du lässt auto ein bildchen maschieren - oder du malst jeweils die benötigten zellen...

damit bekommst du schöne sektoren

lg,
johannes
fcg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 360

WinXP
D3 Prof, D6 Pers
BeitragVerfasst: So 14.07.02 12:30 
danke das hat funktioniert!

noch ne frage, geht das mit den Arrays viellecht einfach, da ich verschiedenen Strecken habe. Und deswegen nochmla diese Frage: Wie unterteile mache ich das mit dem Array.

go: array [?..?] of boolean (da ich ja nur zwei möglichkeiten habe), aber weiter...???

mfg
flip
KeinePanik
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131



BeitragVerfasst: Fr 26.07.02 01:04 
Mal ne andere Frage :

Kann man mal irgendwo ein Spiel runterladen, dass mit Delphi geschrieben wurde ? Würde mich echt mal interessieren, was mit Delphi alles möglich ist ... Bei meinem Wissensstand kann ich mir überhaupt nicht vorstellen ein Spiel zu schreiben ...

_________________
Es gibt keine dummen Fragen ... Nur blöde Antworten !!!
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Fr 26.07.02 02:43 
Hier wäre zum Beispiel ein Projekt, welches die Q2 Engine nach Delphi portiert:
www.sulaco.co.za/quake2/
GPF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 85



BeitragVerfasst: Sa 27.07.02 23:11 
Es ist vielleicht nicht ganz was Du suchst, aber unter www.neobrothers.de/index.html findest Du RaceKing, ein in Delphi geschriebes Autorennen inklusive dem Quelltext. Es macht einen ziemlich guten Eindruck. An der zweiten Fassung tüfteln gerade die Programmierer.
Dort findest Du ebenfalls einige Tutorials zum Thema Direct X Programmierung unter Delphi.

Doch nun zu Deinem Problem.
An Deiner Stelle würde ich Regionen verwenden. Du solltest für die Autos und die Strecke jeweils eine Region definieren. Über verschiedenste Windows API Routinen kannst Du prüfen ob sich Regionen überlappen (indem Du z.B. eine Und-Verknüpfung zweier Regionen erstellst), Punkte innerhalb einer Region liegen, etc.
Kann man irgendwo den Inhalt des alten Forums ansehen? Dort habe ich einige Bemerkung zu Regionen gemacht und die wichtigsten Befehle erklärt.
Zum Verständnis: Regionen sind irgendwie geartete geometrische Formen - es müssen nicht zwangsweise Rechtecke sein, Polygonzüge oder Kreise/Ausschnitte inkl. deren Kombinationen sind möglich.
Auf Delphi3000.com kannst Du nachlesen wie Du aus Bitmapmasken Regionen für die Fahrzeuge erstellen kannst.

Für die Bewegung eines Fahrzeuges könnte man einen 2D Vektor nehmen. Der erste Skalar beschreibt die Beschleunigung bzw. Verzögerung in Fahrtrichtung und der zweite Skalar die Querbeschleunigung. Prallt ein Wagen nun von der Bande ab erhöhst Du die Skalare in Abhängigkeit von Aufprallwinkel und Geschwindigkeit. Solange nicht beschleunigt wird müssen dann die beiden Skalare abnehmen und dadurch das Fahrzeug zum Stillstand kommen.
Wie Du im Detail die Verzögerung vornimmst bleibt Dir überlassen und sollte angetestet werden, damit Du einigermaßen realistische Bewegungen animieren kannst.

MfG
GPF
fcg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 360

WinXP
D3 Prof, D6 Pers
BeitragVerfasst: So 28.07.02 11:22 
ich glaub das ist mir nen bissle kompliziert. ich werde es versuchen.

mal noch ne frage. wie kann ich unter delphiX den farbwert (oder wie heist das) eines Bildpunktes feststellen?

flip
Lord_Schubach
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 03.08.02 15:59 
Titel: 2D?
Hi!

Du programmierst ein 2D Auto Rennspiel?

Ich habe mal ein 3D Rennspiel programmiert.

Ich würde es per Pixelcheck machen:
Wenn die Strecke beispielsweise die Farbe Grau hat ($808080), dann musst du nur gucken, ob die Pixel unter dem Auto-Image die Farbe $808080 haben.
Das lässt sich auch sehr gut ohne DelphiX und DirectX erledigen.
Ich hätte es ohne DirectX gemacht, das wäre für so ein Spiel übertrieben.
Dann dauert das Starten und Initialisieren des Spiels auch deutlich länger als ohne DX.

_________________
mfg

Lord_Schubach
fcg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 360

WinXP
D3 Prof, D6 Pers
BeitragVerfasst: So 04.08.02 11:46 
pixelcheck dann in die domove oder in die create prozedur des Autos einfügen? (in DelphiX)

<thanks>
Gho
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 09.08.02 19:16 
Ähm...
Das obere hab ich schon verstanden, doch wie stelle ich fest welche farbe die pixel unter meinem sprite(auto) haben? Mit Hexdezimalen Farbwerten kenne ich mit soweit auch aus. Also fehlt mir nur die Abfrage
@fcg in die domove

_________________
42
fcg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 360

WinXP
D3 Prof, D6 Pers
BeitragVerfasst: Mi 14.08.02 14:45 
mit den x und y werten deines sprites
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
var dc,pixelcolor:tcolor;  i:integer;
begin
DC := GetDC(0); 
pixelcolor := GetPixel(DC, X, Y);
i:= ColorToRGB (pixelcolor);
label1.caption:= IntToStr (I);

das mußt du dann in deine domove procedure (zu mindest in delphiX) einbauen, oder in den Timer :!:

du mußt aber wahrscheinlich vorher die Variablen umwandeln (von double in integer)