hey, for animation im gonna store seperate sprite bitmaps into a vector, so then when a user presses a key, it prints out the first vector, or another key, it prints out another element in the vector..i don't really know how to implement this though. here is my code
1 | #include <allegro.h> |
2 | |
3 | |
4 | int main() { |
5 | allegro_init(); |
6 | install_keyboard(); |
7 | set_color_conversion(COLORCONV_TOTAL); /* this is the new line */ |
8 | set_color_depth(16); |
9 | set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0); |
10 | |
11 | |
12 | |
13 | |
14 | // Pass NULL to use default pallete |
15 | BITMAP *goku = load_bitmap("1.bmp", NULL); |
16 | BITMAP *gokus = load_bitmap("2.bmp", NULL); |
17 | vector<BITMAP> fighter; |
18 | fighter.push_back(goku); |
19 | fighter.push_back(gokus); |
20 | int index = 0; |
21 | |
22 | while( !key[KEY_ESC] ) |
23 | { |
24 | |
25 | acquire_screen(); |
26 | //print out the firstelement of the vector here, which is a static image of |
27 | //a sprite |
28 | |
29 | |
30 | |
31 | |
32 | release_screen(); |
33 | |
34 | } |
35 | |
36 | |
37 | |
38 | return 0; |
39 | } |
40 | END_OF_MAIN() |
do i do,
blit( //element from vector here, screen....
or what, i don't know how i would be printint out bitmaps from a vector to the screen
i love this stuff, it really has me thinking
[edit]
could
blit( fighter.front or begin // would that work?
Err, that shouldn't compile. You have a vector of BITMAP structs, but your pushing BITMAP*'s to the vector.
The proper method would be this:
1 | // Pass NULL to use default pallete |
2 | BITMAP *goku = load_bitmap("1.bmp", NULL); |
3 | if ( !goku ) |
4 | { |
5 | // Error out here |
6 | return 0; |
7 | } |
8 | BITMAP *gokus = load_bitmap("2.bmp", NULL); |
9 | if ( !gokus ) |
10 | { |
11 | // Error out here |
12 | return 0; |
13 | } |
14 | vector<BITMAP*> fighter; |
15 | fighter.push_back(goku); |
16 | fighter.push_back(gokus); |
17 | // int index = 0; // I'd use iterators instead |
18 | |
19 | vector<BITMAP*>::iterator iter = fighter.begin(); |
20 | |
21 | |
22 | bool keyIsPressed = false; // Use this to prevent "bouncing" of the images |
23 | while( !key[KEY_ESC] ) |
24 | { |
25 | if ( key[KEY_M] && !keyIsPressed ) // go up vector |
26 | { |
27 | if ( iter != fighter.end() - 1 ) // DON'T RUN PAST THE END OF THE VECTOR |
28 | ++iter; |
29 | keyIsPressed = true; |
30 | } |
31 | else if ( key[KEY_N] && !keyIsPressed ) // go down vector |
32 | { |
33 | if ( iter != fighter.start() ) |
34 | --iter; |
35 | keyIsPressed = true; |
36 | } |
37 | else |
38 | { |
39 | keyIsPressed = false; |
40 | } |
41 | acquire_screen(); |
42 | blit ( *iter, screen, 0, 0, 0, 0, (*iter)->w, (*iter)->h ); |
43 | |
44 | release_screen(); |
45 | |
46 | } |
47 | |
48 | // ALWAYS clean up your memory when your done |
49 | destroy_bitmap ( goku ); |
50 | destroy_bitmap ( gokus ); |
51 | |
52 | // Or this would work as well |
53 | /* |
54 | for ( iter = fighter.begin(); iter != fighter.end(); ++iter ) |
55 | destroy_bitmap ( *iter ); |
56 | */ |
57 | |
58 | return 0; |
That should work. You'll need to add error checking to your liking in the two "NULL" checking loops
ahh, ok
thanks carus85!
On a side and completely unrelated note, you should check the return values of allegro_init() and set_gfx_mode() (the latter being more important to check).