Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » I'm confused

This thread is locked; no one can reply to it. rss feed Print
I'm confused
neil dwyer
Member #7,237
May 2006

I want player1 to move at its rotation angle when pressing forward(w). When I implement the trigonometry, which I am fairly new to, the player doesn't rotate.

1#include <allegro.h>
2#include <stdlib.h>
3#include <iostream.h>
4 
5#define speed 2
6 
7int player1_x = 320;
8int player1_y = 240;
9int player2_x;
10int player2_y;
11int player1_rotate;
12int player2_rotate;
13int mickeyx;
14int mickeyy;
15int player1_vy;
16 
17int player1_movement()
18{
19if(key[KEY_A])
20{
21player1_x -= speed;
22}
23if(key[KEY_D])
24{
25player1_x += speed;
26}
27if(key[KEY_W])
28{
29player1_y -= speed * fsin(player1_rotate);
30}
31if(key[KEY_S])
32{
33player1_y += speed * fsin(player1_rotate - 255/2);
34}
35get_mouse_mickeys(&mickeyx, &mickeyy);
36 
37player1_rotate += mickeyx;
38}
39 
40int main(int argc, char *argv[])
41{
42allegro_init();
43install_keyboard();
44install_mouse();
45set_color_depth(16);
46set_gfx_mode(GFX_AUTODETECT,640,480,0,0);
47 
48 
49BITMAP *buffer = create_bitmap(640,480);
50 
51BITMAP *player1 = load_bitmap("player.bmp", NULL);
52
53BITMAP *player2 = load_bitmap("player.bmp", NULL);
54
55while(!key[KEY_ESC])
56{
57player1_movement();
58rotate_sprite(buffer, player1, player1_x, player1_y,player1_rotate);
59blit(buffer, screen,0,0,0,0,640,480);
60clear_bitmap(buffer);
61}
62 
63destroy_bitmap(player1);
64destroy_bitmap(player2);
65destroy_bitmap(buffer);
66 
67return 0;
68 
69}
70END_OF_MAIN()

_Dante
Member #7,398
June 2006
avatar

You're using a number of fixed point math routines, but not converting your ints to fixed point. (Also, player1_movement() is defined as returning int, so you should either return something or change it to void). Like so:

1#include <allegro.h>
2#include <stdlib.h>
3#include <iostream.h>
4 
5#define speed 2
6 
7int player1_x = 320;
8int player1_y = 240;
9int player2_x;
10int player2_y;
11int player1_rotate;
12int player2_rotate;
13int mickeyx;
14int mickeyy;
15int player1_vy;
16 
17int player1_movement()
18{
19 if(key[KEY_A])
20 {
21 player1_x -= speed;
22 }
23 if(key[KEY_D])
24 {
25 player1_x += speed;
26 }
27 if(key[KEY_W])
28 {
29 player1_y -= speed * fixtoi(fsin(itofix(player1_rotate)));
30 }
31 if(key[KEY_S])
32 {
33 player1_y += speed * fixtoi(fsin(itofix(player1_rotate - 255/2)));
34 }
35 get_mouse_mickeys(&mickeyx, &mickeyy);
36 
37 player1_rotate += mickeyx;
38 
39 return 0;
40}
41 
42int main(int argc, char *argv[])
43{
44 allegro_init();
45 install_keyboard();
46 install_mouse();
47 set_color_depth(16);
48 set_gfx_mode(GFX_AUTODETECT,640,480,0,0);
49 
50 
51 BITMAP *buffer = create_bitmap(640,480);
52 
53 BITMAP *player1 = load_bitmap("player.bmp", NULL);
54
55 BITMAP *player2 = load_bitmap("player.bmp", NULL);
56
57 while(!key[KEY_ESC])
58 {
59 player1_movement();
60 rotate_sprite(buffer, player1, player1_x, player1_y, itofix(player1_rotate));
61 blit(buffer, screen,0,0,0,0,640,480);
62 clear_bitmap(buffer);
63 }
64 
65 destroy_bitmap(player1);
66 destroy_bitmap(player2);
67 destroy_bitmap(buffer);
68 
69 return 0;
70}
71END_OF_MAIN()

Rotates as nice as you please. 8-)

-----------------------------
Anatidaephobia: The fear that somehow, somewhere, a duck is watching you

Evert
Member #794
November 2000
avatar

Quote:

#include <iostream.h>

It's #include <iostream>, iostream.h is obsolete.

neil dwyer
Member #7,237
May 2006

Ok, its rotating right now, thank you for that, but it still isn't going in the direction it is facing when I press forward.

Edit: Nevermind, stupid me forgot to do the trig for the x value.:P

Go to: