Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.09.2008, 13:36

Suche sehr simple Wegfindung

Hi,
ich programmiere seit einigen Wochen mein erstes Spiel in C++. Es ist ein kleines 2D-Shootergame, in dem man Gegner einfach abschießen muss.
Bisher haben sich die Gegner immer etwa so bewegt:

C-/C++-Quelltext

1
2
3
4
5
if (Enemy->X<Player->X)
Enemy->X+=10;
if (Enemy->X>Player->X)
Enemy->X-=10;
//Und das selbe nochmal für Y...

So etwa haben sich die Gegner bisher bewegt. Ich hab jetzt hier ein paar Dinge wie Multiplizierung mit der Zeit nicht hinzugefügt...
Nun möchte ich aber, dass die Gegner wenigstens einen geraden Weg zum Spieler nehmen. Also bisher sind alle Einheiten so gelaufen:

Der rote Punkt ist der Gegner, der Grüne der Spieler.
So sind die Einheiten bisher gelaufen:
http://img515.imageshack.us/my.php?image=vorherls2.png
Und so sollen sie laufen:
http://img174.imageshack.us/my.php?image=nachhertu0.png

So ich hoffe jetzt is klar was ich möchte^^

Ich hab auch Gegooglet und SuFu benutzt aber nix gefunden...

Wär nett wenn mir jemand helfen würde, ich brauch auch keinen Quellcode, eine Formel oder ein Ansatz genügt.

3

28.09.2008, 13:47

ohne garantie, aber vektorrechnung müsste helfen.
zB simples beispiel

punkt A = (5,5)
punkt B = (1,1)

dann ist der vektor von a nach b
b-a = (1-5,1-5) = (-4,-4). (die gerade zwischen den punkten mit richtungs angabe)

das musste dann noch normalisieren und auf die bewegungsgeschwindigkeit bringen..

http://de.wikipedia.org/wiki/Vektorrechnung
http://de.wikipedia.org/wiki/Normalisierung_(Mathematik)

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

4

28.09.2008, 13:48

Hallo,
warum machst du x += 10?
Machst doch mal mit ++x :)
Dann sollte es schon sauberer gehen.
Den soweit ist alles okay.

Hab eine alte DirectX Demo bei mir, die aus dem Buch Game Development für Dummies ist.
Da wird das Thema KI angeschnitten und Verfolgung und Flucht anhand einer Demo gezeigt.
Drt wird es auch so gemacht.

MFG T-Virus
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

5

28.09.2008, 14:01

Erstmal danke für die Antworten, das ging ja echt schnell^^

Zitat von »"Das Gurke"«

A* mag ich ganz gerne. Bin mir aber nicht zu 100% sicher ob es das ist was du suchst.

Ich möchte ja nur, dass Einheiten einen geraden Weg zum Ziel gehen, mit Ausweichen etc. möchte ich garnicht arbeiten^^


Zitat von »"T-VIRUS"«


Warum machst du x += 10?
Machst doch mal mit ++x :)
Dann sollte es schon sauberer gehen.

Das kenn ich garnicht^^ Wie sieht dann so eine Addition aus?


Zitat von »"thoniel"«

ohne garantie, aber vektorrechnung müsste helfen.
zB simples beispiel
punkt A = (5,5)
punkt B = (1,1)
dann ist der vektor von a nach b
b-a = (1-5,1-5) = (-4,-4). (die gerade zwischen den punkten mit richtungs angabe)
das musste dann noch normalisieren und auf die bewegungsgeschwindigkeit bringen..

Wie kann man das in C++ realisieren?

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

6

28.09.2008, 14:05

Hallo,
du machst es wie in deinem Code:

Quellcode

1
2
3
4
5
if (Enemy->X<Player->X)
Enemy->X = ++Enemy->X;
if (Enemy->X>Player->X)
Enemy->X -= --Enemy->X;
//Und das selbe nochmal für Y...


Weiß aber nicht, ob dies klappt :)
Man kanns ja testen ;)
Mehr als eine Fehlermeldung kann man nicht bekommen.
Wird mal wieder Zeit, dass ich wieder kleiner C++ Experimente mache.

MFG T-Virus
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

7

28.09.2008, 14:16

du wolltest doch nur eine anregung haben ;)
im grunde ist ein vektor nur eine kombination aus x und y. ob du das als einziges nimmst oder beide operationen getrennt vornimmst ist egal.

also ob du VektorB - VektorA oder B.X - A.X und B.Y-A.Y nimmst ist egal.

8

28.09.2008, 14:16

der Inkrementoperator ++ erhöht doch nur um 1 und nicht um 10. Ubnd man kann auch

C-/C++-Quelltext

1
2
3
4
//statt

x = ++x
//kürzer

x++

T-VIRUS

Alter Hase

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

9

28.09.2008, 14:24

Stimmt schon, aber genau so wird es auch bei der Demo gemacht ;)
Aber ist es nciht so, dass ++x schneller als x++ ist?
Bei Klassen o.ä. müsste bei x++ immer eine Kopie angelegt werden oder?
Mein Kollege hatte mir dies mal so erklärt.
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

28.09.2008, 14:25

Zitat von »"PCShadow"«

der Inkrementoperator ++ erhöht doch nur um 1 und nicht um 10


Das ist doch kein Hindernis, schreib einfach:

C-/C++-Quelltext

1
++++++++++++++++++++x;


:p
@D13_Dreinig

Werbeanzeige