[Allegro] Mam gotowe strzelanie lecz problem..
A więc tak.
Z strzelaniem męczę się kilka godzin, żaden sposób nie działa więc znalazłem jakiś obiecujący i nadal błędy.
Tym razem to
error: 'ix' was not declared in this scope
error: 'iy' was not declared in this scope
Tu jest kod gry
[spoiler]
#include <allegro.h>
#include <cmath>
class Cpostac
{
public:
int x,y;
short int kierunek, klatka;
};
// Zmienna naszej klasy
Cpostac ludek;
// Inicjowanie timera
volatile long speed = 0;
void increment_speed()
{
speed++;
}
END_OF_FUNCTION(increment_speed);
LOCK_VARIABLE(speed);
LOCK_FUNCTION(increment_speed);
// Zmienna
int mapa_x = 0, mapa_y = 0;
BITMAP *bufor = NULL;
BITMAP *ludekb = NULL;
BITMAP *teren = NULL;
FONT * font_pcx = NULL;
BITMAP *kursor = NULL;
BITMAP *x = NULL;
// DEFINICJA MAPY
short int map[15][20] =
{
};
//kursor
int mx = 0, my = 0, mb = 0;
void myszka()
{
if( mx != mouse_x || my != mouse_y || mb != mouse_b )
{
mx = mouse_x;
my = mouse_y;
mb = mouse_b;
}
};
//WYsiwetalnie mapy
void wys_mape()
{
int licznik_x, licznik_y;
for (licznik_x = 0; licznik_x < 100 ; licznik_x++)
{
for (licznik_y = 0; licznik_y < 100 ; licznik_y++)
{
blit(teren,bufor,
(map[licznik_y + mapa_y][licznik_x + mapa_x]%4) * 32,
(map[licznik_y + mapa_y][licznik_x + mapa_x]/4) * 32,
licznik_x * 32,licznik_y * 32,32,32);
}
}
};
// Funkcja G³ówna
int main()
{
allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,640,480,0,0);
install_timer();
install_int_ex(increment_speed, BPS_TO_TIMER(80));
// Tworzenie bufora
bufor = create_bitmap(640,480);
// £adowanie grafiki
ludekb = load_bmp("ludek1.bmp",default_palette);
teren = load_bmp("teren.bmp",default_palette);
font_pcx = load_font("arial_16.pcx",default_palette, NULL);
x = load_bmp( "strzal.bmp", default_palette );
//opcje myszki
install_mouse();
set_mouse_sprite( kursor );
unscare_mouse();
// Ustalanie pocz¹tkowej pozycji ludzika
int frame = 0;
ludek.x = 100;
ludek.y = 100;
ludek.klatka = 0;
ludek.kierunek = 0;
bool strzalv = false;
double predkosc = 0.5;
double kat;
int celx = ix, cely = iy;
double deltaX, deltaY;
double ix = ludek.x, iy = ludek.y;
while( !key[KEY_ESC])
{
clear_to_color( bufor, makecol( 150, 150, 150 ) );
myszka();
masked_blit( x, bufor, 0, 0,( int ) ix,( int ) iy, 200, 200 );
textprintf_ex( bufor, font, 40, 40, makecol( 200, 200, 200 ), - 1, "deltaX = %d, deltaY = %d !",( int ) iy - cely,( int ) ix - celx );
while( speed > 0)
{
if( strzalv == false ) { //to podzielilem tak jak uwazalem ale nie dziala
if( mb == 1 )
{
celx = mx;
cely = my;
deltaX = ix - celx;
deltaY = iy - cely;
strzalv = true;
}
if( strzalv == true ) {
if(( deltaY ) == 0 )
{
kat = 0;
} else
{
kat = atan(( deltaX ) /( deltaY ) ); //nie wiem co to do konca oznacza
} //else
if( deltaY >= 0 )
{
kat += M_PI; //nie wiem co to do konca oznacza
} //if
}
if( iy != cely || ix != celx )
{
ix += sin( kat ) * predkosc;
iy += cos( kat ) * predkosc;
} }
if( iy <- 20 ) ( strzalv = false );
ludek.kierunek = 0;
if( key[KEY_LEFT]) { ludek.kierunek = 4; ludek.x-=2; }
if( key[KEY_RIGHT]) { ludek.kierunek = 2; ludek.x+=2; }
if( key[KEY_UP]) { ludek.kierunek = 1; ludek.y-=2; }
if( key[KEY_DOWN]) { ludek.kierunek = 3; ludek.y+=2; }
if( key[KEY_A]) { ludek.kierunek = 4; ludek.x-=2; }
if( key[KEY_D]) { ludek.kierunek = 2; ludek.x+=2; }
if( key[KEY_W]) { ludek.kierunek = 1; ludek.y-=2; }
if( key[KEY_S]) { ludek.kierunek = 3; ludek.y+=2; }
masked_blit( x, bufor, 0, 0,( int ) ix,( int ) iy, 200, 200 );
if( mouse_b == 1 )
{
kursor = load_bitmap( "kursor2.bmp", default_palette);
}
else
kursor = load_bitmap( "kursor.bmp", default_palette);
speed--;
frame++;
if( frame > 40) frame=0;
}
// Czyszczenie bufora
clear_to_color(bufor, makecol(150,150,150));
//Wyswietl mape
wys_mape();
// Sterowanie animacj¹
if( frame<20) { ludek.klatka = 0;}
else if( frame>=20 && frame<40) { ludek.klatka = 1; }
//Wyœwietlanie ludzika
masked_blit( ludekb, bufor, ludek.kierunek*32 ,ludek.klatka*32 ,ludek.x, ludek.y, 32,32);
//wyswietlanie kursora
masked_blit( kursor, bufor, 0, 0, mouse_x, mouse_y, kursor->w, kursor->h );
blit( bufor, screen, 0, 0, 0, 0, bufor->w, bufor->h );
}
// Usuwanie wszystkiego z pamiêci.
remove_int( increment_speed);
destroy_bitmap(ludekb);
destroy_bitmap( bufor );
destroy_bitmap( kursor );
allegro_exit();
return 0;
}
END_OF_MAIN();
[/spoiler]
Gdzie jest błąd?