Skocz do zawartości

Zablokowane Dorabianie belki w surface


Jaklub

Rekomendowane odpowiedzi

Mam bardzo dziwny problem, z którym nie mogę sobie poradzić.

GML
if girdered=0

{

if instance_number(girder_obj)=1

{

if girder_obj.x>x-40 and girder_obj.x<x+280 and girder_obj.y<y+128 and girder_obj.y>y-40

{

surface_set_target(surf);

draw_clear(c_black);

draw_sprite(sprite_index,0,0,0);

draw_sprite_ext(girder_spr,0,girder_obj.x,girder_obj.y,1,1,girder_obj.image_angle,c_white,1);

sprite_delete(spr);

spr=sprite_create_from_surface(surf,0,0,240,88,1,1,0,1,0,0);

surface_reset_target();

sprite_index=spr;

girdered=1;

alarm[2]=10;

}

}

}

Oto kod, który ma dorabiać belkę do terenu. Gdzie jest problem? Otóż, odczuwam, że gra robi coś z surface (po dodaniu komentarzy do warunku pozycji czuć lekkie zacięcie), ale belka mimo to się nie pojawia.

Jestem pewien, że rozwiązanie jest banalne (a może nie?), więc proszę was o pomoc. Z góry dzięki.

Odnośnik do komentarza
Udostępnij na innych stronach

Dziwne, kod powinien działać... :P

 

A teren robisz przy każdej eksplozji tworząc nowy sprite? :P

Lepiej jest cały teren oprzeć na jednym wielkim surface - dużo szybciej, a jedyną trudnością jest napisanie własnego place_free() - nie patrzącego na solid normalnych pixeli, tylko na kolor pixeli surface'a.

 

Może tworzysz belkę na złych pozycjach :P ?

 

Jedyne, co się jakoś rzuca w oczy to tworzenie sprita przed surface_reset_target(), ale jakoś wątpię, aby to w tym miał tkwić problem ;/

Chociaż po GM'ie nie można się niczego spodziewać, także spróbuj... :P

 

PS: Czy mi się wydaje, czy ja napisałem dokładnie to, co dwaj panowie wyżej...? :D

Odnośnik do komentarza
Udostępnij na innych stronach

Co jak co, ale teren po podzieleniu na malutkie kawałki nie sprawia problemów z szybkością (nawet na moim gorszym kompie), a poza tym na zmianę silnika niszczenia terenu jest dużo za późno (choć pomyślę o wprowadzeniu rysowania surface'ami przy generowaniu terenu).

 

Co do metody Cekola:

Zamieniłem, a belka wciąż się nie pojawia.

Lepiej jest cały teren oprzeć na jednym wielkim surface - dużo szybciej, a jedyną trudnością jest napisanie własnego place_free() - nie patrzącego na solid normalnych pixeli, tylko na kolor pixeli surface'a.

Podobno sprawdzanie koloru pixeli jest wolne, a poza tym taka metoda narzuca pewne ograniczenia (jak np. jednolity kolor nieba).

 

Za to uwaga Dawiddsa ("Może tworzysz belkę na złych pozycjach") okazała się prawdziwa i belka tworzyła się tam, gdzie nie powinna. :D Dawidds ma miejsce w creditsach, a ja zamykam temat. Dzięki tym, którzy chcieli pomóc.

 

PS. Dla ciekawskich:

GML
if girdered=0

{

if instance_number(girder_obj)=1

{

if girder_obj.x>x-40 and girder_obj.x<x+280 and girder_obj.y<y+128 and girder_obj.y>y-40

{

surface_set_target(surf);

draw_clear(c_black);

draw_sprite(sprite_index,0,0,0);

//draw_sprite_ext(other.sprite_index,0,other.x div 1,other.y div 1,other.dir,1,0,c_black,1);

draw_sprite_ext(girder_spr,0,girder_obj.x-x,girder_obj.y-y,1,1,girder_obj.image_angle,c_white,1);

draw_point_color(0,87,c_black);

surface_reset_target();

sprite_delete(spr);

spr=sprite_create_from_surface(surf,0,0,240,88,1,1,0,1,0,0);

sprite_index=spr;

girdered=1;

alarm[2]=10;

}

}

}

Tak teraz wygląda kod.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...