Skocz do zawartości

Flame

Użytkownicy
  • Postów

    58
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Flame

  1. okej dzięki xd Sry za nieogarnięcie, wróciłem do programowania po dłuugiej przerwie i pozapominałem trochę :/
  2. Nie zrozumiałeś mnie :) (albo ja ciebie xD) Potrzebuje mieć zwracane id obj_walla który koliduje z linią jego wzroku. Bez tego gra bierze najbliższą ścianę, która niekoniecznie znajduje się w zasięgu jego linii wzroku przez co przeciwnik nie atakuje. Chodzi o to, że gdy postać jest za ścianą(czyli jest dalej niż ściana w jego linii wzroku), przeciwnik nie atakuje, a gdy jest przed ścianą (co nie znaczy, że kolizji ze ścianą już nie ma) przeciwnik atakuje. Nie wiem jak mam zwrócić sobie id tego właśnie pojedyńczego bloku ściany który jest w kolizji z linią wzroku przeciwnika i o to właśnie pytam :jezor: A w jaki sposób odczytać ID z collision line. Collision line nie zwraca tru/false ?
  3. Dobry, Zrobiłem mały kodzik dot. podążania za postacią przez przeciwnika. Kodzik generalnie polega na tym żeby przeciwnik nie zobaczył postaci przez ścianę więc dałem tę linijeczkę: GML (step obiektu obj enemy) if !collision_line(x,y,x+lengthdir_x(range,dir),y+lengthdir_y(range,dir),obj_wall,false,true) && distance_to_object(obj_character)<distance_to_object(obj_wall) problem w tym że distance_to_object(obj_wall) nie odnosi się do ściany w zasięgu widzenia a najbliższej, która nie koniecznie jest w zasięgu linii. Z tego też powodu mimo tego, że nawet jeśli zasięg wzroku koliduje z jakąś ścianą lecz postać jest przed nią, przeciwnik nie reaguje ze względu na ścianę np. obok niego, która jest bliżej niż sama postać. Próbowałem coś robić z id obj_wall ale nie wyszło to najlepiej :/ tutaj cały kodzik: GML (step obiektu obj enemy) dir=point_direction(x,y,obj_character.x,obj_character.y); if instance_exists(obj_character) { if !collision_line(x,y,x+lengthdir_x(range,dir),y+lengthdir_y(range,dir),obj_wall,false,true) && distance_to_object(obj_character)<distance_to_object(obj_wall) { if collision_line(x,y,x+lengthdir_x(range,dir),y+lengthdir_y(range,dir),obj_character,false,true) then seen=true; else seen=false; } else seen=false; } else seen=false; if seen==true mp_potential_step_object(obj_character.x,obj_character.y,spd,obj_wall); Dołączam SS z opisanej wyżej sytuacji: link
  4. Zmieniłem na full scale'a i teraz czarne pasy po bokach zniknęły. Jednak problem wciąż występuje bowiem wszystko jest zblurowane. Zauważyłem, że zależy to od wielkości pierwszego roomu od którego startuje gra. Gdy ustawiłem pierwszemu roomowi rozmiary 500x500 rozdzielczość mimo zachowania proporcji wyglądała jakbym miał ekran wielkości nokii 5510 xD a wyłączenie opcji "interpolate colors between pixels" powoduje że piksele są nierówne. Jedynie gdy ustawiłem moją rozdzielczość do rozmiarów pierwszego roomu w drugim roomie wszystko działao bez zarzutów tj. bez blura, bez pasów a kwadrat nie był prostokątem (czyli jak na pierwszym screenie z tego tematu) tutaj screen zblurowanej gry: O co chodzi ;-; ?
  5. Wiem, próbowałem, bezskutecznie :| Gdybym rozumiał co się dzieje w tutorialu nie pisałbym tu :/
  6. Witam, Wracam po dłuższej przerwie do GMa i odrazu mam problem :c. Chciałbym żeby fullscreen działał na każdej rozdzielczości więc używam do tego funkcji display_get_width() i ...height() a następnie ustawiam view z zebranych wcześniej informacji na temat rozdzielczości. Do ustawienia viewu korzystam z funkcji room_set_view i włączam view'a za pomocą room_set_enabled. Wiem, że te funkcje nie działają dla roomu w którym się znajdujemy dlatego ustawiam go w innym po czym przechodze do roomu gry "room_test". Tak wygląda kod: GML window_set_fullscreen(true); w=display_get_width(); h=display_get_height(); room_set_view(room_test,0,1,0,0, w, h,0,0, w, h,200,200,5,5, obj_character); room_set_view_enabled(room_test, true); room_goto_next(); moja rozdziałka to 1680x1050 a rozmiary roomu to 3k na 3k. Kiedy ustawiam swoją rozdzielczość w room editorze na wview, hview, wport i hport to wszystko ładnie działa. Jednak gdy robie to samo za pomocą kodu pojawiają się czarne pasy po bokach i nie mam pojęcia co źle robię i jak to naprawić. Dodam jeszcze dwa screeny : ustawiona rozdziałka z room editora: i z kodu: Jak widać wyżej kod który zamieściłem wcześniej powoduje, że obraz jest ściśnięty i występują czarne pasy po bokach ekranu. Pomocy... :boxed:
  7. Czy da się zrobić okienko składające się z backgrounda z przeźroczystymi elementami ? Żeby po wyłączeniu ramek okna było widać tam gdzie background jest przeźroczysty co się dzieje za okienkiem. Chodzi mi np o to : link
  8. Wystarczy że stworzysz zmienną w tym obiekcie w evencie create : przykładowo GML punkt=true; i w evencie w którym dodajesz ten punkt (czyli pewnie w step lub w draw): GML if mouse_check_button_pressed(mb_left) and punkt=true { //kod tworzący punkt (nwm czy to obiekt czy funkcja w draw) w draw mozesz dać np : draw_set_color(c_black); draw_point(mouse_x,mouse_y); //lub jak robisz to za pomocą obiektu to w stepie instance_create(mouse_x,mouse_y,obj_punkt); punkt=false; } czyli kiedy wciśniesz lewy klawisz a punkt będzie równy "true" to wtedy stworzysz punkt a zmienna punkt zmieni wartość na false dzięki czemu po wciśnieciu ponownie lpm nie stworzy się kolejny punkt ponieważ warunkiem stworzenia punktu jest to że punkt musi mieć wartość true. A mouse_x i mouse_y bedzie stawiało obiekt w koordynatach x i y twojej myszki w grze.
  9. Flame

    Inwazja

    Fajna gierka :) Podoba mi się interakcja z otoczeniem, że wszystko jest zniszczalne. Dużo różnych przeciwników, różnorakie helikoptery, czołgi. Troche grafika taka paintowa i sterowanie wg mnie niewygodne ale można się przyzwyczaić.
  10. Znalazłem coś takiego, może rozwiąże to twój problem : Link
  11. Znamy bok a, kąt prosty i kąt beta GML a=4; prost=degtorad(90); //zamieniamy stopnie na radiany beta=degtorad(55); //tu tak samo</span></span> Z tych danych możemy wyliczyć bok b, bok c, i alfa GML b=sin(beta)*(a/cos(beta)); c=a/cos(beta); alfa=pi/2-beta; I teraz jak chcesz wyświetlać w grze wyniki to musisz spowrotem zamienić radiany na stopnie GML draw_text(x,y,string(radtodeg(prost))); draw_text(x,y,string(radtodeg(alfa))); draw_text(x,y,string(radtodeg(beta)));
  12. chiptune.com Polecam Piotr Fronczewski ;)
  13. Coś próbowałem z tym display_set_gui_maximise() ale też mi nie wyszło ;p Nie rozumiem do końca jak ta funkcja działa... @edit dobra już kumam jak to działa ;p Dzięki za pomoc :) Temat do zamknięcia.
  14. Dobry, mam problem bowiem rysuje sobie dwa sprite'y w Draw GUI, jeden znajduje się w lewym górnym rogu, drugi w prawym górnym rogu. Wszystko ok do czasu kiedy włączam fullscreen. Wtedy pojawiają się błędy... Nie wiem z jakiej funkcji mam skorzystać żeby ten drugi sprite rysował się w tym prawym górnym rogu na fullscreenie. Niezależnie z jakiej funcji skorzystam rysuje się on albo na środku zamiast po prawej albo rysuje się wogóle gdzieś poza ekranem...Ten pierwszy sprite rysuje się na x=0 i y=0 i z nim problemu nie ma. Normalnie gra w okienku korzysta z tego kodu : GML draw_sprite_ext(spr_pause,i,view_wport[0]-64,0,gui_size,gui_size,0,c_white,1); Niestety na fullscreenie view_wport nie działa bo rysuje się w połowie szerokości ekranu, próbowałem też z window_get_width() ale też nie działa. Co robić ??
  15. W create takiego obiektu ustawiasz alarm na 30 stepów. GML alarm[0]=30; A następnie tworzysz event alarm0 i w nim wpisujesz : GML instance_destroy(); Czyli najpierw ustawiasz alarm w create na 30 stepów a gdy te 30 stepów minie wtedy wykonany zostaje event alarm0 i obiekt się usuwa.
  16. Mówisz masz :) W rzeczywistości chodzi płynniej bo mi ten "gif konverter" fpsy zmniejszył :c
  17. >Download .rar (.gmz + .exe) Poruszanie : lewo/prawo - lewa/prawa strzałka skok - strzałka w górę lub spacja Silnik urozmaicony w Double-jump, Wall-jump i tarcie zależne od podłoża na którym postać się znajduje. ENJOY :)
  18. Tylko ,że z tym completed to nie pomyślałem bo jak skończysz jedną misje to completed wciąż będzie na 2 ustawione gdy będziesz chciał wziąć drugą. Ale ogólnie to jest dobrze ;d tylko właśnie z tym completed byś musiał pokombinować.
  19. Depth to taka wbudowana zmienna odpowidająca za głębokość obiektu. Im mniejszy depth tym obiekt będzie bardziej na wierzchu. Przykładowo gdy nalożysz na siebie dwa obiekty - jeden z depthem 1, drugi zaś -1 to ten drugi będzie na pierwszym planie a pierwszy będzie zakryty. @Uzjel ma trochę racji. Help w GameMakerze nie gryzie :P
  20. Nakładasz jeden obiekt na drugi. Wogóle lepiej jakbyś korzystał z tilesów (są wydajniejsze od stawiania tysiąca wyświetlanych obiektów): A Żeby twoja postać miała z czym kolidować to na tych tilesach przez które postać nie ma przenikać nałóż obiekt ze spritem o takich samych rozmiarach jak jeden tile ale żeby nie było widać tego obiektu ponieważ tilesy są twoimi ścianami odznacz w ustawieniach obiektu funkcje visible żeby obiekt nie był widoczny. I w tym momencie obiekt jest niewidoczny w grze ale ma swojego sprite'a i koliduje z postacią :D Btw. w edytorze roomów możesz sobie ustawić rozmiar siatki w górnym pasku (snap_x,snap_y) w przypadku jakbyś nie mógł równo ustawić obiektów obok siebie ze względu na ich nieproprcjonalną wielkość względem siatki.
  21. Możesz stworzyć skrypt w którym zdefiniujesz sobie argumenty (argument0, argument1 itd.) i potem już tylko ustawiać ich wartości w kodzie obiektu. Np. stworzyłeś sobie skrypt scr_mission i w skrypcie zdefiniowałeś sobie ,że argument0=zmienna odpowiadająca za nazwę misji, argument1=zmienna odp. za kille i tworzysz w ten sposób normalną własną funkcje : scr_mission(nazwa misji, kille) którą piszesz już w kodzie obiektu. GML //scr_mission(nazwa_misji,kille do zdobycia); globalvar nazwa, max_kill, mission_completed; nazwa=argument0; max_kill=argument1; mission_completed=0; if kill==max_kill && mission_completed==0 { show_message('Ukończyłeś misje'); mission_completed=1; kill=0; } if mission_completed==1 { //coś się dzieje dostajesz kase i nowe diax eq show_message('jej diax eq'); mission_completed=2; //żebyś nie mogł robić znowu tej misji } no i oczywiście musisz tą zmienną kill gdzies se zdefiniować w obiekcie. a w stepie obiektu : GML scr_mission('zabij_smoki',10); I na tej zasadzie twórz sobie dalej argumenty np. obiekt do zabicia itp.
  22. Jak wogóle patrze na tego screena to on jest lekko rozciągnięty choć może mi sie wydawać. Korzystasz z viewów ? No bo może ustawiłeś view in room na 500x500 a port on screen na jakieś 1280x1024 i ci się obraz rozciągnął i ta linia pojawiła. Bo ogólnie jak masz view in room na 500x500 to port on screen musi mieć np. 1000x1000 bo 500x2 albo 250x250 bo 500/2 a nie może mieć 254x254 bo to sie ani nie mnoży ani nie dzieli. Spróbuj. Jakbyś dał link do projektu to projektu byłoby łatwiej wyłapać błąd ,zamiast zgadywania co może być przyczyną bo przyczyn mogą być dziesiątki.
  23. Pisałem tego posta wtedy kiedy ty Gnysek swojego tylko go minute wcześniej wysłałeś :D Nie twierdze ,że nie masz racji.
  24. A spróbuj może w Global Game Setings w zakładce Windows i tam w bocznej zakładce Graphics wyłączyć funkcje "Interpolate colors between pixels". Wtedy nie będzie ci wygładzać pikseli i może zniknie ta linia.
×
×
  • Dodaj nową pozycję...