C++ allegro obrót.
Ostatnio zmodyfikowano 2010-03-08 19:40
szyx_yankez |
» 2010-03-08 17:06:46 Zresztą coś mnie olśniło, na stronie easykodera jest artykuł "samochodzik" i opisany tam problem jest podobny do twojego.
//Edit: Post napisany przed przeczytaniem twojego poprzedniego. |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-03-08 17:08:45 A nie da sie tego jakos uproscic ,potem mam zamiar dodac jeszcze szczelanie w tym samym kierunku xD ale z tym sprobuje sam sobie poradzic. |
|
szyx_yankez |
» 2010-03-08 17:13:14 Uprościć? Czy ja wiem. Zawsze jest drugie wyjście z sytuacij. Poczekaj z pół godzinki to może coś wykombinuje, bo teraz jakoś nic mi do głowy nie wpada, |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-03-08 17:16:46 Ok .fajnie gdyby ci sie udalo bo bardzo mi sie to przyda ;p
///Mamy prawie tyle samo postow xD(wiem ze nie na temat) |
|
szyx_yankez |
» 2010-03-08 17:45:53 int xx[ 91 ];
for( int i = 0; i < 90; i++ ) { xx[ 90 - i ] = i; } class pozycja { public: int x; int y; int b; }; pozycja k1; k1.x = 111; k1.y = 111; k1.b = 0;
rotate_sprite( bufor, ludek, k1.x, k1.y, itofix( k1.b * 256 / 360 ) );
if( key[ KEY_LEFT ] ) k1.b--;
if( key[ KEY_RIGHT ] ) k1.b++;
if( k1.b > 359 ) k1.b = 0;
if( k1.b < 0 ) k1.b = 359;
if( key[ KEY_UP ] ) { if( k1.b > 0 && k1.b < 90 ) { k1.x = k1.x +( xx[ k1.b ] ); k1.y = k1.y +( 90 - xx[ k1.b ] ); } }
Będzie działało na pierwsze 90' obrotu, na pozostałe 270 zrób sobie anologicznie. I zastosuj jakieś timerki albo lub dziel np przez 20, bo zmienne są duże i jak naciśnjesz up to nawet nie zuważysz jak będzie sie poruszał(poprostu zniknie) . Rozwiązanie jest długie. Cóż kto tu mówił o rozmiarze, miało być inne niż tamto to jest. |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-03-08 18:10:56 Ok dzieki sprobuje cso z tym zrobic |
|
Bartaz Temat założony przez niniejszego użytkownika |
... » 2010-03-08 18:57:54 Mam jeszcze jedno pytanie bo probowalem to zrobic tak int a( 0 ), b( 0 ); int obrot = a * 256 / 360; rotate_sprite( bufor, ludek, ludeka.x, ludeka.y, itofix( a * 256 / 360 ) ); if( key[ KEY_LEFT ] ) { a--; } if( key[ KEY_RIGHT ] ) { a++; }
if(( key[ KEY_UP ] ) &&([ KEY_LEFT ] ) ) { if(
problem w tym ze zabardzo nie rozumie tego zapisu a*256/360 znaczy rozumie xD ale dlaczego tam sa takie liczby a nie inne i potem bym chcial zrobic wlasnie tak jak wyzej ze jezeli zostana wcisniete te klawisze i np jezeli ludek obruci sie w lewa strone o wiecej niz np 30 stopni to ludek ludeka.x++; ludeka.y--; |
|
szyx_yankez |
» 2010-03-08 19:40:25 W typie itofix pełny obrót to 256'. A by przekonwertować to na 360' trzeba użyć zapisu kąt*256/360. I tyle w tym filozofi. kat = kat2; if( kat < kat2 + 30 )
|
|
1 « 2 » |