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

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

11

13.06.2013, 12:08

Es geht doch darum, dass hier die Datenstruktur nicht sehr sinnvoll gewählt wurde. Diese muss jetzt eben sinnvoll ausgetauscht werden. Dass man aus einem 2D Array auch ein normales Array machen kann merkt man spätestens wenn man sich damit beschäftigt was ein Array überhaupt ist. Zumindest solche Arrays wie bei C++. Wenn man dann verstanden hat wie mehrdimensionale Arrays umgesetzt werden und wie das ganze im Speicher aussieht, dann ist es auch kein Problem mehr aus mehrdimensionalen Arrays normale zu machen.
„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.“

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

12

13.06.2013, 12:22

Ich habe für meinen Bomberman-Klon ein Eindimensionales Array von Tile-Objekten. Das sogar auf 2 Schichten (Leveldaten, Explosionen). Zusätzlich habe ich eine Methode, die mir zu einer XY-Position auf dem Screen das entsprechende Tile-Objekt liefert. Damit kann man alles machen, und ist sehr schnell ;)

De_Struktor

unregistriert

13

13.06.2013, 15:30

wie löscht du sie dann? Also die Blöcke Trommelbommel??

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

14

13.06.2013, 16:19

Ich muss mich korrigieren: ICh habe drei Schichten:

1. Solid (Gras und Felsen)
2. Boxen
3. Flammenoverlays

Jede schicht ist ein Eindimensionales Array in der größe des Levels. WEnn ich eine Kiste lösche, dann ist das IsActive-Property des entsprechenden Tileobjekts auf false gesetzt und es wird nicht gerendert und bei der Kollision bedacht.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

15

13.06.2013, 16:26

Alternativ könnte man ein Nullobjekt erstellen welches dort gespeichert wird. Natürlich könnte man auch einfach Null an die Stelle setzen.
„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.“

De_Struktor

unregistriert

16

13.06.2013, 16:30

Hier ein Quellabschnitt, wie ich das gelöst habe: 1 Reihe in Y-Richtung:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
public void LoadBombableBlocks()
        {
            for (int j = 0; j < 225; j++)
            {
                fire_rects.Add(new Rectangle(fire_rect_x, fire_rect_y, 30, 30));

                if (j < 8)
                {
                    fire_rect_y += 60;
                }
                else if (j > 8 && j < 24)
                {
                    fire_rect_x = 90;
                    fire_rect_y -= 60;
                }
                if (j > 24 && j < 32)
                {
                    fire_rect_x = 150;
                    fire_rect_y = 90;
                }
                else if (j >= 32 && j < 48)
                {
                    fire_rect_y += 60;
                }
                if (j > 48 && j < 54)
                {
                    fire_rect_y = 30;
                    fire_rect_x = 210;
                }
                else if (j >= 54 && j < 62)
                {
                    fire_rect_y += 60;
                }
                if (j > 62 && j < 70)
                {
                    fire_rect_y = winHeight - 60;
                    fire_rect_x = 270;
                }
                else if (j > 70 && j < 79)
                {
                    fire_rect_y -= 60;
                }
                if (j > 79 && j < 88)
                {
                    fire_rect_y = 30;
                    fire_rect_x = 330;
                }
                else if (j > 88 && j < 97)
                {
                    fire_rect_y += 60;
                }
                if (j > 97 && j < 105)
                {// 11 reihe
                    fire_rect_x = 390;
                    fire_rect_y = winHeight - 60;
                }
                else if (j > 105 && j < 114)
                {
                    fire_rect_y -= 60;
                }
                if (j > 114 && j < 123)
                {
                    fire_rect_x = 450;
                    fire_rect_y = 30;
                }
                else if (j > 123 && j < 132)
                {
                    fire_rect_y += 60;
                }
                if (j > 132 && j < 141)
                {
                    fire_rect_y = winHeight - 60;
                    fire_rect_x = 510;
                }
                else if (j > 141 && j < 150)
                {
                    fire_rect_y -= 60;
                }
                if (j > 150 && j < 159)
                {
                    fire_rect_y = 30;
                    fire_rect_x = 570;
                }
                else if (j > 159 && j < 168)
                {
                    fire_rect_y += 60;
                }
                if (j > 168 && j < 177)
                {
                    fire_rect_y = winHeight - 60;
                    fire_rect_x = 630;
                }
                else if (j > 177 && j < 186)
                {
                    fire_rect_y -= 60;
                }
                if (j > 186 && j < 195)
                {
                    fire_rect_x = 690;
                    fire_rect_y = 30;
                }
                else if (j > 195 && j < 204)
                {
                    fire_rect_y += 60;
                }
                if (j > 204 && j < 213)
                {
                    fire_rect_x = 750;
                    fire_rect_y = winHeight - 120;
                }
                else if (j > 213 && j < 221)
                {
                    fire_rect_y -= 60;
                }
            }
        }


Das meine ich mit Mühevoll aufgelistet und das sind KEINE Tiles.

Deswegen wird es für mich etwas schwieriger an dieser Stelle!

Das hier sind die grauen Blöcke.

Und ich will, immer da wo die Bombe sich gerade befindet, soll(z.B) in xY - Richtung 3 Blöcke verschwinden. Und meine Frage hier wäre, da ich es mit der richtigen Datenstruktur versuchen muss, welche sich hier anbieten würde.

Das Dictionary<TKey, T> würde sich glaube ich anbieten oder?

Denn ich kann ihn sagen, Ich gebe dir Koordinaten der Bombe und den Typ der entfernt werden soll und dann entfernt er immer in Abhängigkeit des Schlüsselwertpaares das Objekt an dieser Koordinate. vielleicht rede ich Quatsch, dennoch möglich wie ich finde.
»De_Struktor« hat folgendes Bild angehängt:
  • Debug_Photo.PNG

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »De_Struktor« (13.06.2013, 16:36)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

17

13.06.2013, 16:32


(Link)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

18

13.06.2013, 16:39

Was auch immer dein Code da machen soll. Ganz ehrlich ich finds ziemlich unübersichtlich und möchte da vermutlich auch gar nicht genauer verstehen. Aber pass auf. Du merkst doch dass du an einem Punkt bist an welchem du nicht mehr weiter kommst. Du ärgerst dich jetzt grad dass es so nicht weiter geht. Ist ja auch ok. Nur kannst du das Problem dadurch nicht lösen. Wenn es so wie du es gemacht hast nicht geht, dann funktioniert dein System nicht. Also wirds geändert. Einerseits wurden dir hier Vorschläge zur Datenstruktur gemacht. Damit kannst du das ganze dann neu umsetzen. Wenn du vorher schön gekapselt hast musst du jetzt nicht mal so viel ändern. Wenn du das nicht gemacht hast, dann versuch deine Map doch ein wenig besser zu Kapseln. Heißt bestimmte Details zu verschleiern. Dann ist eine Änderung beim nächsten mal halb so wild. Das was du da jetzt insgesamt machen muss nennt sich Refactoring und ist ein ganz normaler Prozess beim entwickeln. Man kann ja nicht alles vorplanen. Mit der Zeit kannst du bestimmte Probleme zwar voraussehen, aber einige Dinge ändern sich bei der Entwicklung trotzdem meist noch.
„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.“

Werbeanzeige