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

11

21.09.2006, 20:38

Ja das würde mich schon interresieren wie man das macht

Anonymous

unregistriert

12

21.09.2006, 23:09

Schreiben:

C-/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
    unsigned char map[42][30] = {
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 1, 2, 3, 4, 5, 4, 3, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 7, 8, 9, 10, 11, 10, 9, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 7, 8, 9, 10, 11, 10, 9, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                { 7, 8, 9, 10, 11, 10, 9, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                                };

    file map_file;
    map_file.open (L"level1.swp");

    map_file.write (map, sizeof (map));

    map_file.close ();


Lesen:

C-/C++-Quelltext

1
2
3
4
5
6
7
    map_file.open (L"Maps/level1.swp");

    for (int x = 0; x < map_width; ++x)
    for (int y = 0; y < map_height; ++y)
        map[x][y] = 0;

    map_file.read (map, sizeof (map));


Zeichnen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
    void game::draw_map (void)
    {
        for (int x = 0; x < map_width; ++x)
        for (int y = 0; y < map_height; ++y)
        for (int id = 1; id < 14; ++id)
            if (map[y][x] == id)
                map_one_tiles.draw (x * tile_x + map_offset_x, y * tile_y + map_offset_y, id*16, 0, tile_x, tile_y);
    }


Wie du siehst super einfach. Zum Verständnis nochmal die Variablen
Werte und dann ist aber auch gut:

C-/C++-Quelltext

1
2
3
4
5
6
map_width    = 30;
map_height   = 42;
tile_x       = 16;
tile_y       = 16;
map_offset_x = 0;
map_offset_y = 0;


tile_x und tile_y könnte man noch zusammenfassen, aber ich stehe mehr
auf Flexibilität. ;) Und wenn du z.B. map_offset_x erhöhst, dann scrollt
die Map langsam aber sicher aus dem Bildschirmrand. Hier gibt es noch
einiges zu optimieren, aber vorerst reicht das zu Testzwecken. Wird dann
optimiert, wenn es an das Finetuning, Debuggen, usw geht.

13

21.09.2006, 23:17

Sieht recht interresant aus dank dir Riddick über sowas könnte man mal ein tut machen oder hat man das schon

Anonymous

unregistriert

14

21.09.2006, 23:20

Das ist nicht Tutorial würdig, das ist viel zu einfach für ein Tutorial. ;)
Höchstens über ein etwas ausgereifteres Levelformat mit Level Editor.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

21.09.2006, 23:29

Zitat von »"Riddick"«

C-/C++-Quelltext

1
2
3
4
5
6
7
8
    void game::draw_map (void)
    {
        for (int x = 0; x < map_width; ++x)
        for (int y = 0; y < map_height; ++y)
        for (int id = 1; id < 14; ++id)
            if (map[y][x] == id)
                map_one_tiles.draw (x * tile_x + map_offset_x, y * tile_y + map_offset_y, id*16, 0, tile_x, tile_y);
    }

Was soll denn die Schleife für die id-Variable?

16

21.09.2006, 23:30

Mir würde sowas schon als tut für den Einstieg reichen da ich ja jetzt eine Spielfigur habe sollte sie sich auch irgendwo bewegen.
Gibt es leveleditoren für 2D maps und kann man die einfach einlesen.
Deshalb wäre so ein tut bestimmt nicht schlecht.
Wo hast du gelernt wie man sowas macht mir ist der Aufbau noch nicht so klar.
Ich denke mal die Zahlen im Array stehen für Grafiken die dann an diesen stellen sind also müsste man die Sprites zahlen zuweisen oder irre ich mich da.

Anonymous

unregistriert

17

21.09.2006, 23:39

Die Zahlen stehen für das jeweilige Tile aus eine Bitmap, ja. Durch
die Multiplikation der Tile Größe, wird immer das richtige Tile aus der
Bitmap geblitted.

Level Editoren gibt es bereits, aber die sind alle für'n Arsch, es gibt
höchstens einen mittelmäßigen, da sollte man sich lieber selber einen
schreiben, soo schwer ist das auch nicht.

Mh gut ich könnte noch einmal drüber nachdenken ein Tutorial dazu zu
schreiben inklusive Leveleditor, aber ich habe echt viel zu tun.
Einfach mal abwarten. ;)

18

21.09.2006, 23:45

das wäre nicht schlecht aber irgendwo müsste es ja auch so etwas in der art geben wie man ein 2D Level gerade für jump and run Spiele erstellt gerade eben als einführung ist doch noch etwas kompliziert am Anfang.
Naja morgen werde ich erstmal die jump funktion weiter ausprobieren das hat bisher noch nicht so geklappt.

babelfish

Alter Hase

Beiträge: 1 222

Wohnort: Schweiz

Beruf: Informatiker

  • Private Nachricht senden

19

22.09.2006, 18:12

zum Springen:
- Eine Variable mit der Gravitation deklarieren(int Gravitation = 20;)
- der Spielfigur eine Variable für die yGeschwindigkeit zuweisen
- beim Sprung yGeschwindigkeit - eine Zahl rechnen (yGeschwindigkeit -= 500;)
- beim Schleifendurchlauf die Geschwindigkeit + die Gravitation rechnen (yGeschwindigkeit += Gravitation;)
- und dann y += yGeschwindigkeit;
- abfragen einbauen

Die überlegung:
Wenn yGeschwindigkeit im minus ist, verschiebt sich der Spieler nach oben,
da yGeschwindigkeit sich immer erhöht, ist diese verschiebung immer geringer.
Wenn yGeschwindigkeit einmal im + Bereich ist fällt der Spieler, und das immer schneller.
Dann eben noch die Abfragen einbauen damit er auch irgendwo landet ;)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

20

29.09.2006, 13:52

Zu beiden Themen hab ich mal Tutorials gesehen. Waren aber für Blitz Basic;)
Vom Sinn her wäre es aber 1zu1 in C++ umzusetzen. Allerdings ging es bei den Leveldateien nur um den Aufbau des Levels + Scrolling und Bewegung des Spielers etc. und nicht um einen Leveleditor.
Dann muss man halt alles von Hand eingeben.
Die Tutorials gibts da:
http://www.robsite.de/tutorials.php?tut=blitzbasic
Aber wie gesagt alles Blitz Basic. Kann aber trotzdem mal interessant sein und der Code ist selbsterklärend;)
„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