Skocz do zawartości

Cała aktywność

Kanał aktualizowany automatycznie     

  1. Dzisiaj
  2. Lengthdir - Nie ogarniam

    koszmar początkujących w tym dziale
  3. Wczoraj
  4. Surface - Optymalizacja

    Ja robiłem już gry, gdzie jest 10000 instancji w roomie (5MB ma plik samego rooma!) i 60fps aż miło. Więc coś masz ostro źle
  5. Surface - Optymalizacja

    A ta krew i części ciała to wszystko są osobne instancje? Ja kiedyś jak robiłem takie efekty to miałem surface 256x256 i rysowałem na nim wszystkie efekty krwi po czym robiłem z tego texturę i kładłem ją na ziemi po czym usuwałem instancje. Texturki były położone jak tilesy obok siebie, taka technika podobna do wypalania statycznej Light Mapy
  6. Lengthdir - Nie ogarniam

    Fajne
  7. Lengthdir - Nie ogarniam

    Oparte na tamtym silniku Szkieletówki, za to przerobione na własne potrzeby Proszę :D Lewy myszy, robisz nowe ciało Enter - Reset
  8. Surface - Optymalizacja

    Może, ale według mnie są potrzebne, bo przy takiej sytuacji FPS zaczyna spadać
  9. Lengthdir - Nie ogarniam

    Nie no, pokaż jak działa
  10. Surface - Optymalizacja

    Z tego co patrzę na screeny to surface tu nie są w ogóle potrzebne. Coś masz ostro nie tak :/
  11. Surface - Optymalizacja

    Próbowałem na różne sposoby i nadal się ów proceder powtarzał, poza tym z samej deaktywacji niewiele wynika, bo czasem się ostro odwala w samym polu widzenia (przy jakiejś ostrzejszej wymianie ognia wszystko fruwa) Uważam, że deaktywacja, tylko po części rozwiązuje problem, potrzebne też są surface.
  12. Surface - Optymalizacja

    To niech promień deaktywacji wrogów będzie mniejszy niż promień deaktywacji solidów
  13. Surface - Optymalizacja

    Mam swój własny, ale nie widać żadnego. Zamieniłem rozmiar rooma, na view, zrobił się jeszcze większy bajzel, nadal tnie, a przy okazji wszystko zniknęło. Draw if (!surface_exists(surf)) { surf = surface_create( x+view_xview, y+view_yview ); } surface_set_target(surf); draw_set_color( c_white ) draw_rectangle( 0 , 0 , x+view_xview , y+view_yview , 0 ) for( i = 0 ; i < instance_number( cialo_par ) ; i += 1 ) { ID = instance_find( cialo_par , i ) draw_sprite_ext( ID. sprite_index , 0 , ID.x , ID.y , ID.image_xscale , ID.image_yscale , ID.image_angle , -1 , 1 ) } surface_reset_target(); draw_surface(surf, x+view_xview[0] , y+view_yview[0]);
  14. Surface - Optymalizacja

    FPS spadł, bo rysujesz surface wielkości roomu a nie view. A z kursorem nie wiem, chodzi o kursor windowsowy czy gra miała jakiś własny ?
  15. Surface - Optymalizacja

    No okej, obiekty wróciły, ale zniknął kursor za to, jakim cudem ? Taki kod w DRAW, nie dość, że kursora ni ma, to FPS spadł bardziej, niż wcześniej xd if (!surface_exists(surf)) { surf = surface_create( room_width , room_height ); } surface_set_target(surf); draw_set_color( c_white ) draw_rectangle( 0 , 0 , room_width , room_height , 0 ) for( i = 0 ; i < instance_number( cialo_par ) ; i += 1 ) { ID = instance_find( cialo_par , i ) draw_sprite_ext( ID. sprite_index , 0 , ID.x , ID.y , ID.image_xscale , ID.image_yscale , ID.image_angle , -1 , 1 ) } surface_reset_target(); draw_surface(surf,room_width , room_height);
  16. Surface - Optymalizacja

    1) nie rysujemy poza draw w Studio 2) trzeba sprawdzać czy surface istnieje w każdym kroku // create surf = -1; // draw if (!surface_exists(surf)) { surf = surface_create(...); } surface_set_target(surf); ... rysujemy surface_reset_target(); ... draw_surface(....); Nie mniej to niewiele pomoże, bo GM i tak sam odrzuca z rysowania to co jest poza ekranem A efekt pojawia się bo robisz jakieś draw_set_blend_mode_ext nie wiadomo po co.
  17. Hej, kolejne pytanie dotyczyć będzie optymalizacji, z racji tego, iż zacząłem bawić się w efekty cząsteczkowe, oraz, że w roomach znajduje się często dużo obiektów, zaczęły ostro spadać FPSy. Zauważyłem, że najwięcej zżerają ściany i podobne obiekty solid, oraz wszelkiego rodzaju pierdoły(kamyki, patyki, śmieci). Dezaktywacja się średnio spisuje, ponieważ mimo tego samego punktu wyłączania przeciwników i obiektów solid, po ponownej aktywacji wrogowie potrafią siedzieć w ścianach, albo w innych dziwnych miejscach, generalnie słabo. Postanowiłem spróbować z surface, które nie wiem, czy w ogóle w jakimkolwiek stopniu działa, ponieważ po jego włączeniu obiekty typu ściany i w sumie wszystkie objęte surfem stają się... cieniami, przez które można przeniknąć. Screen - bez surface Screen - z surface Kod surface wygląda następująco : Create: surface = surface_create( room_width , room_height ) surface_set_target( surface ) draw_set_color( c_white ) draw_rectangle( 0 , 0 , room_width , room_height , 0 ) for( i = 0 ; i < instance_number( cialo_par ) ; i += 1 ) { ID = instance_find( cialo_par , i ) draw_sprite_ext( ID. sprite_index , 0 , ID.x , ID.y , ID.image_xscale , ID.image_yscale , ID.image_angle , -1 , 1 ) } surface_reset_target() with( cialo_par ) instance_destroy() Draw: draw_set_blend_mode_ext( bm_dest_color , bm_zero ) draw_surface( surface , 0 , 0 ) draw_set_blend_mode( bm_normal ) "cialo_par" - To rodzina tych obiektów, które mają być optymalizowane. Dlaczego pojawia się taki durny efekt ?
  18. Ostatni tydzień
  19. Lengthdir - Nie ogarniam

    No i elegancko, można zamykać Dzięki
  20. Lengthdir - Nie ogarniam

    starsze GM: value = -15 + round(random(30.1)) nowsze GMS: value = irandom_range(-15, 16); random zawsze losuje liczbę a <= value < b, więc nigdy nie dostaniesz b, dlatego piszemy 16 (i 30.1 w przypadku pierwszym)
  21. Temat zbiorczy na drobnostki

    Rozwiązałem ten problem niezwykle trywialnie Wystarczyło dezaktywować oponenta, poza viewem i bajka jest
  22. Lengthdir - Nie ogarniam

    Wybaczcie double-posta. Udało mi się stworzyć ów silnik Mam tylko jeszcze jedno małe pytanie. Jak ustawić losowy zakres wartości np. Prędkość (od -15 do 15), jak taki random zamknąć w kodzie ?
  23. Temat zbiorczy na drobnostki

    Tak jak napisałem wyżej, musisz zrobić coś na podobieństwo colission_rectangle, czyli wywal całkiem swoje collision_line, nie używaj tego. Nie wiem co znaczą twoje zmienne, ale jak na mój rozum, drugiego ifa też trzeba się pozbyć, zostaje tylko ten pierwszy (cokolwiek robi). Coś takiego, powinno być. if( (x >= vx and x <= vx+vw) and (y >= vy and y <= vy+vh) ) { //kod na strzelanie w gracza event_user(1) // shoot (co to jest?) shooting = true // do uzyskiwania wyniku prawda/fałsz nie używaj int'a tylko bool'a - zajmuje mniej komórek pamięci w Ramie (optymalizacja) } else { //kod na cokolwiek, kiedy gracza nie widzi shooting = false } Pokombinuj na różne sposoby. Ogólnie, mój kod: (x >= vx and x <= vx+vw) and (y >= vy and y <= vy+vh) Zwraca Ci wartość z czy przeciwnik wchodzi w view gracza. Dając "else" po tym if'ie, negujesz tą wartość, czyli wychodzi "false" Przypatrz się dobrze, spróbuj zrozumieć
  24. Temat zbiorczy na drobnostki

    Tu jest ów fragment kodu: if on_turret { if df < inaccuracy+turret_nearest.inaccuracy*2 && collision_line(x,y,x+lengthdir_x(turret_nearest.max_range,dir),y+lengthdir_y(turret_nearest.max_range,dir),enemy_nearest,prec_wall_collision,1) && !collision_line(x,y,x+lengthdir_x(turret_nearest.max_range,dir),y+lengthdir_y(turret_nearest.max_range,dir),ally,prec_wall_collision,1) { event_user(1) // shoot shooting = 1 } } else { if df < inaccuracy*2 && collision_line(x,y,x+lengthdir_x(max_range,dir),y+lengthdir_y(max_range,dir),enemy_nearest,prec_wall_collision,1) && !collision_line(x,y,x+lengthdir_x(max_range,dir),y+lengthdir_y(max_range,dir),ally,prec_wall_collision,1) { event_user(1) // shoot shooting = 1 } } Podmianka max_range, na te dane vx vw itp sprawiło, że oponent nie strzela wcale.
  25. Lengthdir - Nie ogarniam

    Inaczej, zacząłem bawić się z Animacją szkieletową od Psyhixa, podczas ruchów, nadal rozłączają się kończyny :/ Oto kod z draw: Gdzie jest babol ? // lewe udo d3d_transform_set_identity() d3d_transform_add_rotation_z(kr_udo1) // pierw obracamy uklad wzgledem kierunku ramienia d3d_transform_add_translation(-6,16,0) // potem przesuwamy uklad o 14 pixeli wstecz aby znalesc sie tam gdzie ma konczyc sie ramie (kosc ramienia rowna 14 pixeli) d3d_transform_add_rotation_z(kr_tw) d3d_transform_add_translation(x,y,0) draw_sprite(s_udo,0,0,0) // lewa łyda d3d_transform_set_identity() d3d_transform_add_rotation_z(kr_lyda1) // obrot ukladu wzgledem kierunku reki d3d_transform_add_translation(0,0,0) // przesuniecie reki o 8 pixeli (dlugosc reki) d3d_transform_add_rotation_z(kr_udo1) d3d_transform_add_translation(-6,48,0) d3d_transform_add_rotation_z(kr_tw) d3d_transform_add_translation(x,y,0) draw_sprite(s_lyda,0,0,0) // tulow d3d_transform_set_identity() // resetujemy transformacje d3d_transform_add_rotation_z(kr_tw) // obracamy uklad wzgledem kierunku tulowia d3d_transform_add_translation(x,y,0) // przesuwamy uklad na pozycje obiektu draw_sprite(s_korp,0,0,0) // rysujemy przetransformowanego sprajta // nga
  26. Temat zbiorczy na drobnostki

    Nope, w Create sprawdzi kod tylko raz przy tworzeniu instancji. Gra musi sprawdzać to co klatkę tak, żeby nie przeoczyła momentu kiedy wróg pojawia się w polu widzenia gracza, tak więc wklejasz to w Step. Jedynie co możesz dać w Create to zmienne, ale równie dobrze zamiast zmiennych własnych, możesz napisać od razu view_xview zamiast vx.
  27. Temat zbiorczy na drobnostki

    No łapię, a co chodzi, a nie dałoby się tego jakoś zaimplementować w CREATE ?
  28. Temat zbiorczy na drobnostki

    Lolik, musisz zrobić coś w stylu collision_rectangle, tylko na view'a. Dam Ci prosty kod, zmień go na własne potrzeby (uwzględnij spirte_width wroga itp) vx = view_xview; vy = view_yview; vh = view_hview; vw = view_wview; if( (x >= vx and x <= vx+vw) and (y >= vy and y <= vy+vh) ) { //kod na strzelanie w gracza } else { //kod na cokolwiek, kiedy gracza nie widzi }
  1. Pokaż więcej aktywności
×