Jaklub Opublikowano 10 Listopada 2008 Udostępnij Opublikowano 10 Listopada 2008 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 Więcej opcji udostępniania...
Cekol Opublikowano 10 Listopada 2008 Udostępnij Opublikowano 10 Listopada 2008 ten kawałek kodu: GML sprite_delete(spr); spr=sprite_create_from_surface(surf,0,0,240,88,1,1,0,1,0,0); Daj po GML surface_reset_target(); i powiedz czy działa :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 11 Listopada 2008 Udostępnij Opublikowano 11 Listopada 2008 sprite_create_from_surface jest wolne. Lepiej rysować używając surface. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 11 Listopada 2008 Udostępnij Opublikowano 11 Listopada 2008 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 Więcej opcji udostępniania...
Jaklub Opublikowano 11 Listopada 2008 Autor Udostępnij Opublikowano 11 Listopada 2008 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi