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

[C++, Allegro] Kolizja - getpixel() z bitmapą...

Ostatnio zmodyfikowano 2010-07-24 18:41
Autor Wiadomość
SeaMonster131
Temat założony przez niniejszego użytkownika
[C++, Allegro] Kolizja - getpixel() z bitmapą...
» 2010-07-24 15:06:03
Wiem, wiem, na tym forum oraz na google są miliony tematów na temat kolizji w Allegro... Sam spędziłem dzisiaj od rana do teraz (nie licząc wczorajszego dnia... ) na szukaniu jak to zrobić bo mi coś nie działa zbytnio :D  Tutaj pętla odpowiedzialna za poruszanie się:
C/C++
while( speed > 0 )
{
    //jak postac wyjdzie poza ekran - to działa :D
    if( ludek1_x >= 800 ) {
        ludek1_x -= 10;
    }
    else if( ludek1_x <= 0 ) {
        ludek1_x += 10;
    }
    else if( ludek1_y >= 600 ) {
        ludek1_y -= 10;
    }
    else if( ludek1_y <= 0 ) {
        ludek1_y += 10;
    }
    //////////////////////////
   
    if( key[ KEY_A ] ) {
        if( getpixel( bufor, ludek1_x, ludek1_y ) == makecol( 0, 0, 255 ) ) {
            ludek1_x += 5;
        }
        else {
            ludek1_x--;
        }
    }
   
    if( key[ KEY_D ] ) {
        if( getpixel( bufor, ludek1_x, ludek1_y ) == makecol( 0, 0, 255 ) ) {
            ludek1_x -= 5;
        }
        else {
            ludek1_x++;
        }
    }
    if( key[ KEY_W ] ) {
        if( getpixel( bufor, ludek1_x, ludek1_y ) == makecol( 0, 0, 255 ) ) {
            ludek1_y += 5;
        }
        else {
            ludek1_y--;
        }
    }
    if( key[ KEY_S ] ) {
        if( getpixel( bufor, ludek1_x, ludek1_y ) == makecol( 0, 0, 255 ) ) {
            ludek1_y -= 5;
        }
        else {
            ludek1_y++;
        }
    }
   
    speed--;
}
Kolizja ma być wtedy gdy postać najedzie na niebieski kolor. Tworze taki mini symulator życia i niebieski kolor mają ściany na razie -> Tutaj zdjecie gdzie ma zachodzic kolizja...
Proszę o pomoc! Według mnie kolizja powinna zachodzić i o dziwo zachodzi gdy nacisnę A+W albo A+S... Bez Was nic nie wykombinuję...
P-20129
lenrokskate
» 2010-07-24 15:13:45
Allegro- kolizje (by Easykoder)

tylko zamiast rogów drugiego obiektu dajesz getpixele odpowiednie
P-20130
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2010-07-24 15:15:30
@up - wczoraj akurat na to patrzyłem :P I sobie ściągnąłem nawet ten materiał z Download :D Tylko kurde nic obczaić nie mogę... :D
A nie da się zrobić tak jak ja mam tylko jakoś poprawnie??? :)
P-20131
malan
» 2010-07-24 15:53:00
Domyślam się, że "postać" to ten prostokąt szary? :)
C/C++
while( speed > 0 )
{
    if( getpixel( bufor, ludek1_x, ludek1_y ) != makecol( 0, 0, 255 ) )
    {
        if( key[ KEY_W ] ) if( ludek1_y >= 0 ) ludek1_y--;
       
        if( key[ KEY_S ] ) if( ludek1_y <= 600 ) ludek1_y++;
       
        if( key[ KEY_A ] ) if( ludek1_x >= 0 ) ludek1_x--;
       
        if( key[ KEY_D ] ) if( ludek1_x <= 800 ) ludek1_x++;
       
    }
    speed--;
}
Działa?
P-20132
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2010-07-24 16:11:56
Tam nie widać wszystkiego. Tutaj jest całe okienko :) -> http://img820.imageshack.us/f/zdjeciegry.jpg/

@up: kolizja działa tylko z górną i lewą stroną okienka :)
A z tym niebieskim to nadal nie działa :(

Ten kod co ja napisałem, to o dziwo kolizja następuje z tymi niebieskimi napisami współrzędnych gracza X i Y... Wie ktoś czemu te getpixel nie działa z bitmapą???????!!!!
P-20134
malan
» 2010-07-24 16:19:35
To pozmieniaj sobie wartości w ifach.
C/C++
if( key[ KEY_W ] ) if( ludek1_y >= plansza_y_min ) ludek1_y--;

if( key[ KEY_S ] ) if( ludek1_y <= plansza_y_max ) ludek1_y++;

if( key[ KEY_A ] ) if( ludek1_x >= plansza_x_min ) ludek1_x--;

if( key[ KEY_D ] ) if( ludek1_x <= plansza_x_max ) ludek1_x++;

P-20135
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2010-07-24 16:27:18
Robiąc tak:
C/C++
while( speed > 0 )
{
    if( getpixel( bufor, ludek1_x, ludek1_y ) != makecol( 0, 0, 255 ) )
    {
        if( key[ KEY_W ] ) if( ludek1_y >= 0 ) ludek1_y--;
       
        if( key[ KEY_S ] ) if( ludek1_y <= 590 ) ludek1_y++;
       
        if( key[ KEY_A ] ) if( ludek1_x >= 0 ) ludek1_x--;
       
        if( key[ KEY_D ] ) if( ludek1_x <= 790 ) ludek1_x++;
       
    }
    speed--;
}
Owszem, postać (znaczy się ten żółty kwadrat :)) już nie wyłazi poza ekran ani się nie cofa, lecz nadal wchodzi na niebieski kolor. Nie wiem co jest źle... może te getpixel nie odczytuje koloru z bitmapy? :)
Albo paint nie pokazuje prawidłowych wartości koloru i te ściany nie mają 0,0,255 tylko np 0,0,250... :P Musze sprawdzić:D

#edit: jednak ściany mają 0,0,255. A może ktoś wie czy np poprzez wyświetlanie w Allegro zmieniają się wartości koloru? Bo wtedy wiedziałbym co jest źle :D :P
P-20136
malan
» 2010-07-24 16:39:28
Eh. Daj kod, w którym wyświetlasz tą planszę (z niebieskimi ścianami) na bufor.
P-20137
« 1 » 2
  Strona 1 z 2 Następna strona