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

41

03.10.2010, 20:51

achso sah wie aus vllt einen deiner spiele(fallst du welche geprogt hast) aus wegen des ladens einer bitmap die asteorid.tga heißt
edit: oh void_init(); hab ich ganz übersehen sry ^^

42

03.10.2010, 21:14

also jetzt klappt es ziemlich gut also das heißt der limiter klappt jetzt aber leider ist der bildschiorm nicht meine gewählten 800 mal 800 pixel groß sondern eher 1024 mal 600 und drinn ist nur ein ganz kleiner bereich sichtbar.

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
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
#include <allegro.h>
#include <string>


using std::string;

volatile int timerCounter = 0;

static void timerCounterUpdater() {
    timerCounter++;
} END_OF_STATIC_FUNCTION(timerCounterUpdater);




void init() {
    allegro_init();
    install_keyboard();


    LOCK_FUNCTION(timerCounterUpdater);
    LOCK_VARIABLE(timerCounter);

    install_int_ex(timerCounterUpdater, BPS_TO_TIMER(60));
}


int main(int argc, char **argv) {
    init();

    set_color_depth(32);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 800, 0, 0);

    BITMAP * logo       = load_bitmap("allegro.tga", NULL);
    BITMAP * doublebuffer = create_bitmap(800, 800);

    int x  = 0;
    int y  = 0;
    int dx = 1;
    int dy = 1;

    int maxSkip = 4;
    int curSkip = 0;

    bool needRefresh = false;

    while (!keypressed()) {
            curSkip = 0;

        if (timerCounter > 0) {
            do {
                if ((x + dx) < 0) {
                    dx *= -1;
                } else if ((x + dx + logo->w) >= SCREEN_W) {
                    dx *= -1;
                }

                if ((y + dy) < 0) {
                    dy *= -1;
                } else if ((y + dy + logo->h) >= SCREEN_H) {
                    dy *= -1;
                }

                x += dx;
                y += dy;

                timerCounter--;
                curSkip++;

                if (curSkip >= maxSkip) {
                    timerCounter = 0;

                    break;
                }
            } while(timerCounter > 0);

            needRefresh = true;
        }

        if (needRefresh) {
            acquire_bitmap(doublebuffer);
            clear(doublebuffer);

            blit(
                logo, doublebuffer,
                x, y,
                (SCREEN_W - logo->w) / 2,
                (SCREEN_H - logo->h) / 2,
                logo->w,
                logo->h
            );

            release_bitmap(doublebuffer);

            blit(
                doublebuffer, screen,
                0, 0, 0, 0,
                SCREEN_W, SCREEN_H
            );

            needRefresh = false;
        }
    }
} END_OF_MAIN();

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

43

03.10.2010, 21:19

Hab nicht lange mit Allegro programmiert, da ich gehört hatte, das es nicht mehr weiterentwickelt wird. Zudem hab ich mich schnell von C++ zurückgezogen ;)

Ich sehe spontan nur, dass du SCREEN_W und SCREEN_H noch verwendest, diese aber nicht deklariert sind:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
blit(
    logo, doublebuffer,
    x, y,
    (SCREEN_W - logo->w) / 2,
    (SCREEN_H - logo->h) / 2,
    logo->w,
    logo->h
);

release_bitmap(doublebuffer);

blit(
    doublebuffer, screen,
    0, 0, 0, 0,
    SCREEN_W, SCREEN_H
);
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

44

03.10.2010, 21:22

muss man auch nicht. 800 und 800 sind ja SCREEN_W und SCREEN_H im Buch wirds auch nicht deklariert.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

45

03.10.2010, 21:25

Ah, dann sind diese wohl in der allegro.h deklariert oder einer anderen Header Datei, erinnere mich aber nicht daran. Damit hätte sich das wohl auch geklärt.
Poste mal einen Screenshot deines Fensters.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

46

03.10.2010, 21:28

werde ich tun :
»crunchip« hat folgendes Bild angehängt:
  • Unbenannt.png

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

47

03.10.2010, 21:39

Sieht mir nach 800 x 800 aus. Das einzige Problem ist, dass das Bild nicht richtig geblittet, wird, da du wohl die Größen des Bildes nicht korrekt angibst.

C-/C++-Quelltext

1
2
3
4
5
6
7
blit(
    logo, doublebuffer,
    0, 0,
    0, 0,
    logo->w,
    logo->h
);

Wenn du diesen Code mal ausprobierst, wirst du auch sehen, dass das Bild korrekt dargestellt werden kann.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

48

04.10.2010, 18:11

ähm ich krieg heute neurdings einen syntax error bei true bool und anderen variablen scheinbar istetwas mit string weiß jemand was?

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

49

04.10.2010, 18:14

Wenn es ein syntax error ist, wird der sich leicht zu finden sein, zeig mal ein wenig Code...

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

50

04.10.2010, 19:05

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
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
#include <allegro.h>
#include <string>


using std::string;

volatile int timerCounter = 0;

static void timerCounterUpdater() {
    timerCounter++;
} END_OF_STATIC_FUNCTION(timerCounterUpdater);




void init() {
    allegro_init();
    install_keyboard();


    LOCK_FUNCTION(timerCounterUpdater);
    LOCK_VARIABLE(timerCounter);

    install_int_ex(timerCounterUpdater, BPS_TO_TIMER(60));
}


int main(int argc, char **argv) {
    init();

    set_color_depth(32);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 800, 0, 0);

    BITMAP * logo       = load_bitmap("allegro.tga", NULL);
    BITMAP * doublebuffer = create_bitmap(800, 800);

    int x  = 0;
    int y  = 0;
    int dx = 1;
    int dy = 1;

    int maxSkip = 4;
    int curSkip = 0;

    bool needRefresh = false;

    while (!keypressed()) {
            curSkip = 0;

        if (timerCounter > 0) {
            do {
                if ((x + dx) < 0) {
                    dx *= -1;
                } else if ((x + dx + logo->w) >= SCREEN_W) {
                    dx *= -1;
                }

                if ((y + dy) < 0) {
                    dy *= -1;
                } else if ((y + dy + logo->h) >= SCREEN_H) {
                    dy *= -1;
                }

                x += dx;
                y += dy;

                timerCounter--;
                curSkip++;

                if (curSkip >= maxSkip) {
                    timerCounter = 0;

                    break;
                }
            } while(timerCounter > 0);

            needRefresh = true;
        }

        if (needRefresh) {
            acquire_bitmap(doublebuffer);
            clear(doublebuffer);

            blit(
                logo, doublebuffer,
                x, y,
                (SCREEN_W - logo->w) / 2,
                (SCREEN_H - logo->h) / 2,
                logo->w,
                logo->h
            );

            release_bitmap(doublebuffer);

            blit(
                doublebuffer, screen,
                0, 0, 0, 0,
                SCREEN_W, SCREEN_H
            );

            needRefresh = false;
        }
    }
} END_OF_MAIN();

bitte sollte aber richtig sein.

Werbeanzeige