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

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

21

08.04.2010, 21:25

pSkill = new Skill; pSkill = Skills[ID];

das hast du ja immernoch. damit produzierst du dir ein speicherleak.

wird das ganze ein rundenbasierendes oder ein echtzeit spiel?
in echtzeit brauch deine spielerklasse eine liste mit den ID´s von allen benutzbaren skills aus denen der spieler auswählen kann. bei benutzung rufst du die funktion von dem skillmanagerauf der alle benötigten daten an nimmt. (level des skills, position, richtung/ziel usw.) diese funktion schiebt den skill in eine weitere liste die dann in jedem frame durchlaufen wird(updaten und rendern) sobald der skill vorbei ist wird er wieder raus geworfen.

mir scheint es so als wärst du noch nicht bereit für ein echtzeit rpg.

in der konsole sieht es allerdings etwas anders aus.
da hast du eigentlich nur funktionen die dann damage und spezielle effekte(verwirrt-/blindheit beim gegner oder sowas) ausrechnen. da brauchst du aber keine vererbung.(es sei denn die skills laufen über mehrere runden...)
"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?

22

08.04.2010, 21:39

Zitat von »Proggi«
pSkill = new Skill; pSkill = Skills[ID];


das hast du ja immernoch. damit produzierst du dir ein speicherleak.
Ich würde es ja später noch mit delete irgendwo löschen, ist nur ein ganz grobes Testprogramm im Moment. Oder meintest du etwas anderes?

Das soll nur ein kleines Konsolen RPG sein, wobei RPG schon übertrieben ist, eher so eine Art Duel Arena (rundenbasiert). Im Buch von Kalista steht ja nicht soviel über Rollenspiele speziell und ich hab da auch noch nicht viele Tutorials gesehen, deshalb wollte ich mal gucken wie man da vorgehen muss. ;)

Sind die Funktionen denn in den richtigen Klassen, oder sollten die besser beim Spieler rein? Dann könnte ich ja sowas machen:

pSpieler->UseSkill(...);

und muss es nicht so umständlich machen:

pSpieler->SkillManager->UseSkill(...);

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

23

08.04.2010, 21:48

das ist abhängig von der art des skills.
um einen schlag zu berechnen der 150% schaden macht brauchst du keine große funktion.
wenn du allerdings einen heilzauber hast der über 3 runden wirkt brauchst du den skillmanager denn eine funktion kann nicht speichern wie lang der skill dauert.
du kannst das ganze auch mit statuseigenschaften machen. jeder kämpfer, egal ob spieler oder gegner bekommt eine liste mit statuseigenschaften die dann die einheit schwächen(debuffs), stärken(buffs), hp abziehen(z.b. vergiftungen) oder hinzufügen(heilung).
die haben eine laufzeit und eine stärke.
das wär wahrscheinlich die bessere lösung. skillmanager sind eher für echtzeit spiele geeignet.
"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?

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

24

09.04.2010, 23:23

Zitat von »Proggi«
pSkill = new Skill; pSkill = Skills[ID];


das hast du ja immernoch. damit produzierst du dir ein speicherleak.
Ich würde es ja später noch mit delete irgendwo löschen, ist nur ein ganz grobes Testprogramm im Moment. Oder meintest du etwas anderes?


Das ist egal. Ich habe selber gemerkt, wie viel arbeit es ist, ein spiel nachträglich zu ent-leaken :whistling:

Nutze std::auto_ptr; dann kannst du mit auto_ptr::reset() ein neues Objekt erstellen und dabei das Alte löschen. Gewöhne dich jetzt schon daran, du wirst ganz anders programmieren ;)

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

25

09.04.2010, 23:37

das war nen edit...
du kannst es später nicht löschen weil der zeiger für immer verloren ist.
lösch einfach die zeile mit dem new. die bringt sowieso nichts.
"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?

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

26

10.04.2010, 12:40

um einen schlag zu berechnen der 150% schaden macht brauchst du keine große funktion.
wenn du allerdings einen heilzauber hast der über 3 runden wirkt brauchst du den skillmanager denn eine funktion kann nicht speichern wie lang der skill dauert.
Ich möchte nicht kleinlich rüberkommen, aber möglich wäre es mit static Variablen 8)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

27

10.04.2010, 12:46

es kann ja sein, dass der zauber auf mehrere einheiten gleichzeitig wirkt. was machst du dann?
"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?

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

28

11.04.2010, 22:33

Bei erstellung des Skills auf jede Einheit einzeln anwenden, sofern das geht (kommt natürlich auf die Art von Skill an...)
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

29

11.04.2010, 22:51

es kann ja sein, dass der zauber auf mehrere einheiten gleichzeitig wirkt. was machst du dann?
In der Funktion eine statische Liste speichern...
Gut, jetzt kommen wir in einen Bereich des "Was kann man machen, sollte es aber sein lassen" ;)

Werbeanzeige