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

11

05.12.2011, 14:13

Das Image wird in der Regel bei der Initialisierung übergeben. Aber es geht vorallem darum wie die Kugeln verwaltet werden.
Vielleicht schaust du dir mal genauer an wie Sprites und Images in der SFML zusammenarbeiten :D
"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?

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

12

05.12.2011, 14:15

Lassen wir mal die technischen Fragen kurz beseite und schau Dir mal so generell Deine Idee an.
Was haben wir?
Du hast ein Spiel (Game) mit einem Board(Grid was auch immer) und dieses Board kann 0-n Kugeln enthalten.
Damit ergeben sich für mich direkt 3 Klassen:
- Game
- Board
- Ball (kugel)

Damit hast Du doch Dein Design schon mal stehen.
Das Board kann dann eine Liste mit Kugeln haben, oder eine Map (also Key wäre vielleicht pos.x + pos.y * 10 möglich).
Aber Liste oder Map ist egal, da Du immer über alle Objekte iterieren mußt, wenn Du wissen willst, ob an einer Stelle im Board eine Kugel ist, oder die Kugel für eine bestimmte
Stelle laden willst.

Das mit dem ImageHandler solltest Du dann auch angehen. Hier würde ich aber von einer Map abraten. Das ist zwar bequem (man nimmt den Image Namen als Key und referenziert dann darüber das Image) aber sehr ineffizient.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

13

05.12.2011, 14:32

Naja zu behaupten eine Map sei ineffizient ist nicht richtig. Es kommt immer auf die Implementierung der Map an. Wie er die Kugeln verwaltet hängt in erster Linie mit der Spiellogik zusammen. Ist das Spielfeld wie ein Schachbrett, auf welchem pro Zelle eine Kugel liegen kann? Oder ist es vielleicht eher wie eine Art Backgammon Spielfeld aufgebaut? Je nachdem kann man dann die Datenstrukturen wählen. Da du aber noch am Anfang stehst, halte ich es für das beste, wenn du dich selbst einfach mal hinsetzt und guckst was für dich das beste ist. Dabei sammelst du deine eigenen Erfahrungen, was wichtig ist. Und da es ein kleineres Spiel ist, wird es relativ egal sein, wenn noch nicht alles optimal ist;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

14

05.12.2011, 14:48

Das mit dem ImageHandler solltest Du dann auch angehen. Hier würde ich aber von einer Map abraten. Das ist zwar bequem (man nimmt den Image Namen als Key und referenziert dann darüber das Image) aber sehr ineffizient.

Denkst du nicht, dass das Laden der Images Tausend mal länger dauert als der Verwaltungsaufwand der Map? Ähnlich siehts beim Speicherverbrauch aus.
Wie würdest du es den machen?
"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?

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

15

05.12.2011, 15:09

Ich meinte das die Map in diesem Fall etwas ineffizient ist.
Sagen wir mal der Imagehandler sieht intern so aus:

C-/C++-Quelltext

1
typedef std::map<std::string,Image> ImageMap;

Dann könnte man ja über den Namen ein Image referenzieren. Dazu muß die Map aber jedes Mal nach dem Eintrag suchen.
Vielleicht besser wäre:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct IHandle {
  unsigned int ID;
  unsigned int index;
}
typedef std::vector<Image> Images;

IHandle ImageHandler::addImage(const char* path) {
  IHandle handle;
  ++m_IDCounter;
  handle.ID = m_IDCounter;
  handle.index = m_Images.size();
  // also image laden
  m_Images.push_back(image);
  return handle;
}

Image& ImageHandler::getImage(IHandle handle) {
  return m_Images[handle.index];
}


So ähnlich habe ich das bei mir. Ist aber nur ein Vorschlag.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

05.12.2011, 15:10

Er muss das Image aber doch nur einmal zur Loadtime raussuchen!? Ich würd den Ansatz mit der map wählen...

Saik0

Treue Seele

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

17

05.12.2011, 16:22

Das Image wird in der Regel bei der Initialisierung übergeben. Aber es geht vorallem darum wie die Kugeln verwaltet werden.
Vielleicht schaust du dir mal genauer an wie Sprites und Images in der SFML zusammenarbeiten :D

Ich lade die Images bei der Initialisierung des Spiels und zeichne sie, wenn sie gebraucht werden^^ Naja ich arbeite zur Zeit mit Allegro. Es ist egal wie er es jetzt implementieren wird. Er wird dennoch seine Erfahrungen machen und die für sich und sein Spiel beste Methode auswählen ^^

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

18

05.12.2011, 17:33

Jetzt bin ich wirklich verwirrt einer sagt ich sollte lieber das machen und ein anderer meint wiederum es sei eine Schlechte Lösung.
Ich habe derzeit folgende Klassen: CKugel, CMap, CSpawner, CSpielfeld.^

CKugel sollte eigentlich für die Kugeln selber sein wie oben beschrieben.
CMap ist eigentlich nur für den Hintergrund und sonstige Einstellung.
CSpawner ist der eigentliche Spieler also woraus später die Kugeln spawnen sollen.
CSpielfeld ist das Spielgrid also mein Spielgitternetz.

Und ich hatte es mir eigentlich so gedacht das ich vielleicht die Kugeln in der klasse CSpawner erstellen lasse nur jetzt hat mir jemand anderes auch gesagt das es langsam ist in der Laufzeit speicher für neue Kugeln zu resavieren und ich sollte den Speicher vor dem Spiel resavieren.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

19

05.12.2011, 17:45

Und ich hatte es mir eigentlich so gedacht das ich vielleicht die Kugeln in der klasse CSpawner erstellen lasse nur jetzt hat mir jemand anderes auch gesagt das es langsam ist in der Laufzeit speicher für neue Kugeln zu resavieren und ich sollte den Speicher vor dem Spiel resavieren.

Weißt du überhaupt wieviele Kugeln maximal gespawnt werden? Ist es den mehraufwand und den größeren Speicherverbrauch wert? Nehm für die Kugeln einfach eine List falls du sehr oft neue Kugeln erstellst und alte löschst oder ein Vector wenn die Anzahl recht konstant ist.
Und ja es wäre logisch den "Spawner" die Kugeln spawnen zu lassen. Wenns doch nicht logisch ist hat er den Namen wohl nicht verdient. :thumbsup:

Es würde helfen wenn du etwas mehr zum Spiel sagen würdest.
"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?

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

20

05.12.2011, 17:49

Ziel des Spieles ist es immer drei gleiche Kugeln nebeneinander zu kriegen, ob Horizontal, Diagonal oder schräg.
Bei zutreffen der Bedingung werden die Kugeln zerstört und ihr Kriegt Punkte gut geschrieben.
Das hört sich noch einfach an, doch die Zeit ist euer feind!.
Alle [X] Sekunden Spawnen von unten neue Kugeln in den verschiedensten Farben, je länger ihr durchhaltet umso mehr Farben kommen.
Ihr selber schießt eure Kugeln von Oben nach Unten.
Es wird wahrscheinlich auch eine Highscoreliste geben dazu aber später mehr.

Ich werde es mit Vector versuchen ich denke mal das wird auch schneller sein anstatt immer Speicher zu resavieren und freizugeben mit Listen.

Werbeanzeige