Skocz do zawartości

Copperdragon

Użytkownicy
  • Postów

    57
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Copperdragon

  1. Stworzyłeś w ogóle coś takiego jak f_tahoma? Bo wcale nie chodzi o to, by wpisywać "f_tahoma", "f_arial", może być nawet "f_konstantynopolitanczykowianeczka", a nawet "jakasfajnaczcionka" bez tego "f_", tylko ważne jest jedno: żebyś przedtem w grze zdefiniował taką czcionkę (tj. nie definiował tak jak zmienną w zdarzeniach, tylko stworzył tak jakby "obiekt" czcionki, tak samo jak są roomy, backgroundy, sprite'y, obiekty). Może zadam inne pytanie: czy korzystasz z Advanced mode?
  2. To nie wiem, o co może chodzić. Jak sprawdziłem ten kod u siebie, mi działało bezproblemowo. Za to zauważyłem inny drobny błąd w moim skrypcie. Dodaj na początek: draw_sprite(sprite_index,image_single,x,y) I wtedy tabliczka powinna się wyświetlać. Może to właśnie z powodu braku rysowania własnego sprite'a były problemy.
  3. W Creation Code powinieneś zdefiniować zmienną komunikat, a w Draw powinieneś ten większy kod wstawić. Co do czcionki: najpierw stwórz czcionkę f_tahoma. Tzn. jeśli pracujesz w Advanced mode, powinieneś mieć tam, gdzie są foldery Sprites, Objects itp (w trybie podstawowym chyba czegoś takiego nie ma). I tam ustawiasz, jaki rozmiar ma mieć ta czionka f_tahoma, jaki krój (tahoma właśnie), jaki zakres znaków (All - żeby akceptowało polskie znaki), czy pogrubione, czy pochylone. Powinno być pod folderem Scipts.
  4. Eee... jasne że błąd, jak nie do końca prawidłowo skopiowałeś kod. Tzn., jeśli szerokość ma wynieść 118, a wysokość 84, to wpisz: draw_rectangle(0,0,118,84,0) Fakt, zapomniałem o parametrze outline. ;)
  5. Tworzysz obiekt tabliczki. Zakładam, że obiekt bohatera nazywa się obj_bohater. W Creation Code (w oknie edycji rooma, trzymając Ctrl kliknij prawym przyciskiem myszy na tabliczkę i wybierz "Creation Code") wpisz kod: komunikat='Tu wpisz komunikat' Czemu w Creation Code? Ano po to, żebyś nie musiał robić oddzielnych obiektów dla takich samych tabliczek, tyle, że z różnymi tekstami. W Draw: if place_meeting(x,y,obj_bohater) { draw_set_color(c_black) draw_rectangle(0,0,szer,wys) //za szer podstaw szerokość okna komunikatu, za wys podstaw wysokość draw_set_color(c_white) draw_set_font(f_czcionka) draw_text(2,2,komunikat) } Powinno zadziałać. ;) Ps. Oczywiście, wówczas nie możesz stawiać dwóch tabliczek obok siebie. (ech, wy tu point distancem chcieliście, a przecież rozwiązanie jest znacznie prostsze :P) Aha, które czcionki? W Advanced Mode jest taki "folder" jak Fonts (tam, gdzie jest Sprites, Objects, Sound itp.). Po prostu dodaj nową czcionkę tak, jak się dodaje sprite'a, ustaw odpowiednie parametry, jeśli chcesz mieć polską czcionkę, kliknij na przycisk All w oknie edycji czcionki i będzie w porządku. ;)
  6. if obj_statek.y < view_yview[0] //czy tam jak nazywa się obiekt statku obj_statek.y = view_yview[0] if obj_statek.y > view_yview[0] + 568 //zakładam, że room ma wys. 600, a statek wys. 32 obj_statek.y = view_yview[0] + 568 if obj_statek.x < 0 obj_statek.x = 0 if obj_statek.x > 768 //zakładam, że room ma szer. 800, a statek szer. 32 obj_statek.x = 768
  7. Musiałbyś dokładniej wyjaśnić, o co chodzi. Czy np. jest jakiś prostokąt 5x4, po którym chodzi bohater czy co? Czy w ogóle coś się dzieje z "pustymi" minami?
  8. Uhm... on powiedział, że jego postać ma na przykład prędkość 5. Gdyby chodziło tylko o tę prędkość, to by raczej nie było takiego problemu. :P
  9. ORD jest funkcją, która zamienia znak na odpowiednią wartość. Akurat wielkim literom przyporządkowano akcje związane z odpowiadającymi im klawiszami na klawiaturze, co chyba jest logiczne. :) Zresztą to vk_left czy vk_right to też są w zasadzie liczby całkowite, tylko, że zamiast zapamiętywać je twórca po prostu wpisuje vk_coś. ;)
  10. Oczywiście. zmienna = spr_bohater czy coś takiego. if keyboard_check_pressed(ord('WIELKA LITERA')) Zależy, jak to ustawisz. Łopatologiczny przykład dla osób nieposiadających wersję zarejestrowaną: robisz sprite'a z 360 klatkami animacji, każda na każdy kąt (od prawego przeciwnie do ruchu wskazówek zegara). Potem wpisujesz kod w Stepa: image_single = floor(point_direction(x,y,mouse_x,mouse_y)) Oczywiście, można zrobić mniej obrazków i ustalić to wszystko przy pomocy funkcji round. ;)
  11. W zasadzie to prawidłowy kod powinien być taki: dir=point_direction(x,y,mouse_x,mouse_y) if (dir >= 135 && dir < 225)sprite_index=Lewo if (dir >= 315 or dir < 45)sprite_index=Prawo if (dir >= 225 && dir < 315)sprite_index=Dol if (dir >= 45 && dir < 135)sprite_index=Gora Rozumie się to samo przez się: przecież kierunek nie może być jednocześnie mniejszy od 45 i większy od 315. :P
  12. A mój kod? I masz zarejestrowanego, tak? ---Edit--- A zdarzenia podane przez Maxa dawałeś do obiektu tarczy?
  13. O rety! Ileś odpowiedzi i wszystkie mogą być właściwe (choć np. przedmówca nie uwzględnił, że okienko powinno być przezroczyste). Wniosek dla autora: niech precyzuje swoje wypowiedzi. ;)
  14. Cóż, nie będę oryginalny. Najpierw trzeba zdobyć sporo doświadczenia w Game Makerze. Podstawowa sprawa: zaczynamy od spraw prostych, dopiero później bierzemy się za ambitniejsze projekty, bo początkuący twórcy mają irytującą skłonność do porzucania tych ambitniejszych projektów. :P Inaczej mówiąc: ściągnij sobie przykład do gry 3d i poczekaj kilka miesięcy, aż dojrzeje. Myślę, że po tym czasie przykład powinien znacząco zmienić się na lepsze: być bardziej zrozumiałym. ;)
  15. Tutaj przydadzą się tablice. Przez n rozumiem liczbę broni. global.bron[k] to amunicja dla danej broni. Create: global.bron = 1 //numer broni global.bron[1] = 1 global.bron[2] = 0 global.bron[3] = 0 ... global.bron[n] = 0 Key Press Digits >> 1: var niezmienna; //tworzy zmienną chwilową, którą pewien dowcipniś nazwał niezmienna :P niezmienna = global.bron while (global.bron[global.bron] = 0 or niezmienna != global.bron) { global.bron -= 1 //zmiana na poprzednią broń if global.bron = 0 //zmiana z pierwszej na ostatnią broń global.bron = n } Key Press Digits >> 2; var niezmienna; niezmienna = global.bron while (global.bron[global.bron] = 0 or niezmienna != global.bron) { global.bron += 1 //zmiana na następną broń if global.bron = n + 1 //zmiana z ostatniej na pierwszą broń global.bron = 1 } Jeśli amunicja innych broni niż pierwsza jest skończona: Strzał: //tu wpisz zdarzenia związane ze strzałem if global.bron != 1 //ponieważ broń pierwsza ma nieskończoną amunicję (mam rację?), nie odejmujemy amunicji od broni pierwszej { global.bron[global.bron] -= 1 if global.bron[global.bron] = 0 //sprawdza, czy amunicja się nie wyczerpała global.bron = 1 //automatyczna zmiana po wyczerpaniu amunicji na broń pierwszą } Zdobycie dodatkowej amunicji: global.bron[k] += iles //k to jest numer broni, której dodajemy amunicję, iles to liczba, o którą zwiększamy amunicję Jeśli amunicja dla wszystkich broni jest nieskończona: Strzał: //po prostu zdarzenia związane ze strzałem Zdobycie nowej broni: global.bron[k] = 1 Ps. Czy to chicken invaders jest darmowe? Bo jeśli tak, to mógłbyś dać linka, żebym się dowiedział, o so w tej grze chozi? :D
  16. draw_set_alpha(0.5) //masz zarejestrowanego GMa, prawda? Inaczej półprzezroczyste tło okienka będziesz musiał zrobić przy pomocy sprite'a draw_set_color(c_white) //kolor okienka draw_rectangle(x1,y1,x2,y2,0) //za x1,y1,x2,y2 podaj współrzędne lewej górnej i prawej dolnej krawędzi prostokąta draw_set_alpha(1) //ustawia nieprzezroczystość na 1 draw_set_font(nazwaczcionki) //ustawia fonta draw_set_color(c_black) //ustawia kolor tekstu draw_set_valign(fa_middle) //wyrównanie tekstu do środka względem pionowej współrzędnej draw_set_halign(fa_center) //fa_left, jeśli chcesz, by tekst był wyrównany do lewej draw_text(x,y,'Demon shield') //za x podstaw średnią x1 i x2, jeśli tekst jest wyrównany do środka, za y podstaw średnią y1 i y2 Mam nadzieję, że wszystko jest zrozumiałe. Oczywiście wszystko w draw Event. ;) I mam nadzieję, że ja dobrze cię zrozumiałem, tj. że chodziło o to, by nie rysować przy pomocy sprite'ów. ;)
  17. To już zostało uwzględnione.
  18. Erph... czytajcie uważniej. To ja, czyli osoba udzielająca pomocy, pytam się autora. Ściślej mówiąc, pytam się, jakie konsekwencje ma mieć zmiana broni; czy ma mieć np. większy obszar działania, więcej zadawać obrażeń czy co? Czy jest jakiś obiekt, który pokazuje, jaką broń ma aktualnie? Bo jeśli tak, to ten obiekt powinien zmieniać obrazek wraz ze zmianą broni... itd. itp. Czyli inaczej mówiąc: po czym rozpoznać, że broń została zmieniona? A zresztą... myślę, że jak autor będzie nadal miał problemy, to pewnie sam się zapyta. ;)
  19. Dobra, już wyjaśniam. Załóżmy, że współrzędne kupra w obrazku ptaka wynoszą 3 i 5. Wtedy nasze a i b wynoszą odpowiednio 3 i 5. Jeśli jajko ma rozmiary 10x12, to wtedy c i d wynoszą odpowiednio 5 i 6. Wtedy w kodzie wpisujemy: instance_create(x+3-5,y+5-6,jajko); Albo w formie skróconej: instance_create(x-2,y-1,jajko); A zresztą... podeślij tutaj obrazek jajka i ptaka, a ja ustalę, jak ma dokładnie wyglądać ten kod. ;)
  20. Create: global.bron = 1 Key press Digits>>1: global.bron -= 1 if global.bron <= 0 { global.bron = n //za n podstaw liczbę broni } Key press Digits>>2: global.bron += 1 if global.bron >= m //za m podstaw liczbę broni zwiększoną o 1 { global.bron = 1 } Teraz pytanie: co się zmienia w związku z bronią? Czy jest jakiś obiekt, który wyświetla np. wygląd broni czy coś takiego? Po prostu chodzi o to, że sama zmiana zmiennej w zasadzie niewiele daje, ale nie wiem, co zmieniać poza tym.
  21. Nie zgodzę się. Wtedy jajko może wylądować na dziobie, a tego byśmy nie chcieli. instance_create(x+a-c,y+b-d,jajko); A teraz o co chodzi z tym a i b: Wejdź w okno edycji sprite'a ptaka i edytuj jedną z klatek animacji. Przybliżaj do oporu i wyznacz mniej więcej położenie kupra. Spójrz na te liczby w lewym dolnym rogu. Ta po lewej to będzie a, ta po prawej to będzie b. :D c i d to odpowiednio połowa szerokości i wysokości jajka; tutaj zakładam, że środek jajka po stworzeniu ma być dokładnie na kuprze. :thumbsup: Oczywiście, pozostaje ten problem, że kuper nie musi być w każdej klatce animacji w tym samym położeniu. Poza tym: czy ptaki zawsze latają w tę samą stronę? Jeśli nie, trzeba będzie rozpatrywać przypadki, gdy kuper jest po lewej i po prawej stronie. Rety... takie drobiazgowe intrukcje muszą brzmieć co najmniej śmiesznie, no nie? :lol:
  22. Ano fakt, powinno być mniejsze równe. Ale ty z kolei zapomniałeś o niszczeniu pocisku. :D Ten Collision to jest jeden z rodzajów warunków, jak wybierasz Event, to tam są takie dwie czerwone strzałeczki skierowane do siebie. Dokładniej cztery przyciski pod Createm. :P
  23. piotrex: twoje rozwiązanie jest błędne; jeśli na planszy będzie więcej przeciwników, po dwukrotnym trafieniu w dowolnego przeciwnika wszyscy umrą jednocześnie. Taka rada na przyszłość. ;)
  24. Zdarzenia dla obiektu przeciwnika: Create: zycie = 2 //jeśli chcesz, żeby umierał po większej liczbie strzałów, ustaw większą Collision with pocisk bohatera: zycie -= 1 with other instance_destroy() //niszczenie pocisku bohatera, żeby nie liczyło dwa razy kolizji z jednym obiektem if zycie = 0 { //tu wstaw zdarzenia związane z umieraniem przeciwnika np. instance_destroy() } ---edit--- M@ti był pierwszy. :P
  25. Może coś takiego w Animation End: if sprite_index = animacja_siadania //czy jak się nazywa ta animacja sprite_index = animacja_odpoczynku Co do wstawania; możesz zrobić drugiego sprite'a, który będzie animacją siadania od tyłu, wówczas po wciśnięciu "o" będzie: if odpoczynek { //wcześniej podane zdarzenia image_single = 0 //ustawia na zerowy obrazek, żeby zaczynało od początku image_single = -1 //rozpoczyna animację } A w Animation End wystarczy dopisać: if sprite_index = animacja_wstawania sprite_index = animacja_ta_która_jest_przed_odpoczynkiem_^^ Ps. W ogóle radziłbym trochę zmodyfikować ten system, tj: "if ! odpoczynek" zamienić na "if (! odpoczynek && sprite_index = animacja_ta_która_jest_przed_odpoczynkiem)" a "if odpoczynek" na "if (odpoczynek && sprite_index = animacja_odpoczynku)" Po co? Żeby na przykład bohater nie przerywał odpoczynku jeszcze zanim skończy siadać. :P
×
×
  • Dodaj nową pozycję...