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

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

31

03.09.2010, 17:20

genau das war gemeint =)

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

32

03.09.2010, 17:22

genau das war gemeint =)

Dann müsste deine Schlange entweder länger als 20 px sein oder du müsstest eine komplizierte Tick Berechnung machen um ihn langsam um 20 px nacheinander zu bewegen. Was spricht dagegen, ihn halt etwas schneller (m_ftime + 0.5 vielleicht) um lediglich 5px zu bewegen?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

33

03.09.2010, 18:08

Ich würde dir empfehlen eine feste Framerate für die Spiellogik zu verwenden, das hat in diesem Fall viele Vorteile. Wenn du es so machst, kannst du folgende Tipps verwenden:

Bewege die Schlange pro Zeiteinheit um die geringste Größe, also ein Pixel pro Frame. Überprüfe immer, ob eine Richtungstaste gedrückt wurde und setze entsprechend eine Variable (z.B. bTurnLeft) auf true. Jetzt kannst du alle 20 Pixel überprüfen, ob eine Richtungsvariable true ist, wenn ja setzt du sie auf false und änderst die Richtung der Schlange. Außerdem kannst du das Spiel durch ändern der Geschwindigkeit der Spiellogik leichter und schwerer machen.

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

34

03.09.2010, 18:23

das mit diesen boolschen Variablen habe ich schon vorher eingeführt, aber diese Idee mit den 1Pixel/frame oder 5Pixel/frame/zeiteinheit kam mir noch gar nicht....Das könnte durchaus funktionieren!!!
Mache mich sofort an die Arbeit - Danke!

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

35

03.09.2010, 18:27

Aber um Missverständnisse zu vermeiden: Setze nicht die Framerate, mit der gerendert wird, sondern setze eine feste Framerate, für die Spiellogik (die evtl. auch in einem 2. Thread ablaufen kann).

EDIT:
Wenn du 2 Threads benutzt, denke daran, CriticalSections zu verwenden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BurningWave« (03.09.2010, 18:36)


Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

36

03.09.2010, 19:02

Es klappt!
Ich habs gelöst bekommen und sogar eine sehr simple (aber einigermaßen funktionierende) Kollisionsabfrage hinbekommen.
Eure Tipps waren Goldwert!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

37

03.09.2010, 19:17

richtungen gibt man i.d.r. mit einem vector an. mit bool variablen geht es zwar auch aber das ist viel zu umständlich.
in dem beispielcode den ich gepostet habe müsstest du dann die move-methode einfach durch Position += richtungsvektor; ersetzen anstatt nen zehn zeilen langes else if konstrukt zu schreiben.
zwei threads sind einfach überflüssig.
wenn du die schlange pro pixel und nicht pro feld bewegst geht das schachbrettgefühl verloren. ausserdem ist die logik mit dem schwanz der schlange um einiges komplizierter...(ungefähr der unterschied zwischen silvester- und mondrakete xD) ganz davon zu schweigen dass es bei eckigen elementen etwas komisch aussieht wenn sie um die ecke "schlängelt"...
hast du dir schon gedanken über den schwanz gemacht?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

38

03.09.2010, 20:45

In Hey,

Läuft jetzt eigentlich fast so wie es soll (Außer die Kollisionserkennung mit der Wand). Der Apfel kann gefangen werden und wird wieder zufällig woanders "hingebeamt".
Über den Schwanz hab ich mir noch keine soo großen Gedanken gemacht. Hatte gedacht ich realisiere den irgendwie mit einer verketteten Liste oder einem <vector>... weiß aber nicht so ganz.
Jeder Ratschlag ist willkommen!

In der Anlage noch die aktuelle exe (Sollte klar sein, dass man die restlichen Dateien braucht aus dem Link paar Posts zuvor)

Lg Sc4v
»Sc4v« hat folgende Datei angehängt:
  • JSnake.rar (12,07 kB - 41 mal heruntergeladen - zuletzt: 16.05.2024, 19:49)

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

39

03.09.2010, 21:28

Ich kann rar Archieve leider nicht öffnen, zip wäre besser.

Als Schwanz würde ich list<vector> nehmen. In der Liste würde ich die Schwanzsegmente speichern (wenn du die Schlange schachbrettartig bewegen würdest, könntest du beim Bewegen einfach das letzte Element löschen und vorne immer ein neues einfügen).

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

40

04.09.2010, 01:56

Ich kann rar Archieve leider nicht öffnen, zip wäre besser.

Als Schwanz würde ich list<vector> nehmen. In der Liste würde ich die Schwanzsegmente speichern (wenn du die Schlange schachbrettartig bewegen würdest, könntest du beim Bewegen einfach das letzte Element löschen und vorne immer ein neues einfügen).

Oder aber alle Elemente nacheinander bewegen ;) Liste durchgehen und Koordinaten erhöhen/erniedrigen. Vielleicht einfacher.
Wie hast du denn nun die Bewegung bewerkstelligt? Mit den 1 bzw. 5px. pro Step mit erhöhten Geschwindigkeits Faktor?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige