Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++ allegro obrót.

Ostatnio zmodyfikowano 2010-03-08 19:40
Autor Wiadomość
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.
P-14760
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.
P-14761
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,
P-14764
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)
P-14765
szyx_yankez
» 2010-03-08 17:45:53
C/C++
int xx[ 91 ];

for( int i = 0; i < 90; i++ )
{
    xx[ 90 - i ] = i;
}
class pozycja
{ public:
    int x; //x
    int y; //y
    int b; //kąt
   
};
pozycja k1;
k1.x = 111; //x
k1.y = 111; //y
k1.b = 0; //kąt
//Trochę głupie nazwy zmiennych ale takie mi wpadły do łepetyny.


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.
P-14768
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-03-08 18:10:56
Ok dzieki sprobuje cso z tym zrobic
P-14774
Bartaz
Temat założony przez niniejszego użytkownika
...
» 2010-03-08 18:57:54
Mam jeszcze jedno pytanie bo probowalem to zrobic tak
C/C++
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++;
}
//i teraz...
if(( key[ KEY_UP ] ) &&([ KEY_LEFT ] ) )
{
    if( ///kat obrotu ludzika bedzie wiekszy niz i wlasnie jaki
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--;
P-14781
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.

C/C++
kat = kat2;
if( kat < kat2 + 30 )
//cos tam
P-14792
1 « 2 »
Poprzednia strona Strona 2 z 2