Skocz do zawartości

Nicolas

Użytkownicy
  • Postów

    350
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Nicolas

  1. W alarmie nie powinno byc przypadkiem global.tylkoraz = 0? I w koncu step czy collision? EDIT: Jak w collision to zakladajac, ze do kolizji dochodzi i global.tylkoraz == 0 to nie ma sily, zeby nie odjelo zyc. EDIT2: Jup, umknał mi post Gnysia.
  2. Pokaz kod, ktory dawales do alarmu. Prawdopodobnie tam byl blad.
  3. http://gmc.yoyogames.com/index.php?showtopic=163769 Poszukaj czegos o tej bibliotece. Pamietam, ze dawalo sie zrobic naprawde fajne efekt, jak np. wspomniana latarka. Ciekawe czy to jeszcze rozwijaja.
  4. Zrobic dwa modele ruchu - samochodu i pieszego. Jak nie jestes w samochodzie to nacisniecie strzalki robi to co dzieje sie z graczem w przypadku ruchu, a gdy jestes to operujesz ruchem auta. Gdy jestes kolo jakiegos samochodu i nacisniesz przycisk wsiadania zmienna, w ktorej jest przechowywany ID sterowanego obiektu zmienia sie z gracza na ten konkretny samochod i gracz przestaje byc rysowany. Parametry samochodu (np. max predkosc) powinny byc zawarte w obiekcie reprezentujacym samochod jako zmienne. Dzieki temu uzyskamy rozne auta przy uzyciu jednego typu obiektu. Pozniej jak wysiadasz to gracz przenosi sie na odpowiednia pozycje i znowu zmienna z ID sterowanego obiektu zmienia sie z powrotem na gracza. Zeby lepiej zobrazowac: Zalozmy, ze ta zmienna nazywa sie controlled: GML if (keyboard_check_key(left)) { if (controlled == objGracz) controlled.x -= 5; else controlled.direction += controlled.angle_per_frame; } Zakladam, ze jezeli controlled nie ma ID gracza to jakiegos innego pojazdu, np samochodu. To tylko przyklad. Mozliwe, ze gracza tez chcesz obracac. Gdybys dodal zmienna przechowujaca typ pojazdu bez problemu moglbys zaimplementowac takze inne statki, samloty i inne promy kosmiczne. Wystarczy tylko ladnie wszystko poukladac.
  5. Takim sposobem byloby to zbyt przekombinowane, ale sa na pewno inne. Ja sprawdzam czy punkt przeciecia prostych, na ktorych leza te odcinki nalezy do obu odcinkow. Obiekt traktuje jako zbior 3 zmiennych (x, y, same). Niby moglbym rozdzielic to na 3 skrypty (sprawdzajacy czy same, liczacy x i liczacy y), ale to przesada. Inne wyjscie to zapisanie wyniku do jednej zmiennej za pomoca przesuniec bitowych, ale (zakladajac, ze zmienna ma 4 bajty), 1 bit poszedlby na same i po 15 na x i y (1 by sie zmarnowal). W takim wypadku x i y musialyby byc mniejsze od 32768. Jezeli takie ograniczenia nie przeszkadzaja mozna zmienic. Jezeli jednak nie potrzebujesz punktu przeciecia zrob cos takiego: http://www.math.us.edu.pl/~pgladki/faq/node104.html
  6. Napisalem takie dwa skrypty (pierwszy uzywa drugiego, wiec oba sa wymagane): GML /*********************************************** Wyznacza punkt przeciecia dwoch odcinkow P1P2 i P3P4 argument0: P1 argument1: P2 argument2: P3 argument3: P4 Zwracane wartosc: 0: nie ma 1: punkt znaleziony i zapisany ***********************************************/ var p1, p2, p3, p4, x1, x2, y1, y2, r; p1 = argument0; p2 = argument1; p3 = argument2; p4 = argument3; r = instance_create(-10, -10, result); if (!crossing(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, r)) return 0; //na jednej prostej if (r.same) { var sx, sy, sx2, sy2, len, dis; sx = (p1.x + p2.x)/2; sy = (p1.y + p2.y)/2; sx2 = (p3.x + p4.x)/2; sy2 = (p3.y + p4.y)/2; dis = sqrt((sx - sx2) * (sx - sx2) + (sy - sy2) * (sy - sy2)); len = sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y))/2; len =+ sqrt((p3.x - p4.x) * (p3.x - p4.x) + (p3.y - p4.y) * (p3.y - p4.y))/2; //w wypadku nakladajacych sie nie zapisujemy punkty przeciecia //jest ich nieograniczenie wiele (w realu, tu ilosc pikseli) if (dis > len) return 0; else return 1; } x1 = min(p1.x, p2.x); x2 = max(p1.x, p2.x); y1 = min(p1.y, p2.y); y2 = max(p1.y, p2.y); if (r.x < x1 || r.x > x2 || r.y < y1 || r.y > y2) { with(r) instance_destroy(); return 0; } x1 = min(p3.x, p4.x); x2 = max(p3.x, p4.x); y1 = min(p3.y, p4.y); y2 = max(p3.y, p4.y); if (r.x < x1 || r.x > x2 ||r.y < y1 || r.y > y2) { with(r) instance_destroy(); return 0; } r.prev = argument0; r.next = argument1; return 1; Crossing: GML /*********************************************** Wyznacza punkt przeciecia dwoch prostych argument0: x P1 argument1: y P1 argument2: x P2 argument3: y P2 argument4: x P3 argument5: y P3 argument6: x P4 argument7: y P4 argument8: id obiektu, w ktorych zapisany zostanie wynik (w jego wsporzednych) Zwracane wartosc: 0: nie ma, badz podane proste sa takie same 1: punkt znaleziony i zapisany ***********************************************/ //rownania prostej var a1, b1, c1, a2, b2, c2, wg, wx, wy; //skroty var x1, y1, x2, y2, x3, y3, x4, y4; //punkt przeciecia var xp, yp; x1 = argument0; y1 = argument1; x2 = argument2; y2 = argument3; x3 = argument4; y3 = argument5; x4 = argument6; y4 = argument7; a1 = y2 - y1; b1 = x1 - x2; c1 = x1 * y2 - x2 * y1; a2 = y4 - y3; b2 = x3 - x4; c2 = x3 * y4 - x4 * y3; wg = a1*b2 - a2*b1; wx = c1*b2 - c2*b1; wy = a1*c2 - a2*c1; //rownolegle proste nas nie obchodza if (wg == 0 && wx !=0 && wy != 0) { return 0; } if (wg == 0 && wx == 0 && wy == 0) argument8.same = 1; else argument8.same = 0; xp = wx/wg; yp = wy/wg; argument8.x = wx/wg; argument8.y = wy/wg; return 1; Musisz miec pusty obiekt result z zmienna same. W nim zapisza sie wyniki crossing (punkt przeciecia prostych), z ktorych skrypt do sprawdzania przecinania sie dwoch odcinkow.
  7. Zobaczymy jak zadziala. Kod do idacego. create: GML cel_x = 10; cel_y = 20; v_x = 0; v_y = 0; v = 5; //predkosc w pikselach na kratke len = 0; dis = 0; step: GML dis = sqrt((x - cel_x) * (x - cel_x) + (y - cel_y) * (y - cel_y)); if (dis > 0) //w razie problemow z dokladnoscia mozna dac jakas inna wartosc np.: dis >= 0.5 { v_x = cel_x - x; v_y = cel_y - y; len = sqrt(v_x * v_x + v_y * v_y); v_x = v_x / len; v_y = v_y / len; x += v_x * v; y += v_y * v; } Pisane z pamieci. Moze nie dzialac. Buhuuuu~ :(. Wyprzedzili mnie, ale moje i tak fajniejsze! Wpadlem na inny pomysl: GML if (dis >= v) { //to samo co wyzej } else { x = cel_x; y = cel_y; }
  8. I jestes pewien, ze tworzenie fali jest zalezne od warunku mana >= 3? EDIT: Ups... Harv byl szybszy. Przydaloby sie powiadomienie o tym, ze zostaly wyslane nowe posty od rozpoczecia pisania. Na innych forach to sie sprawdza.
  9. max = 12; a = wartosc; b = max + 1 - a; np: max = 12 a = 1; b = 12 + 1 - 1 = 12 max = 12 a = 2 b = 12 + 1 - 2 = 11 max = 12 a = 12 b = 12 + 1 - 12 = 1 max = 12 a = 100 b = 12 + 1 - 100 = -87 Chyba dziala, ale nie do konca Cie rozumiem...
  10. Lenin Ci juz napisal: W stwierdzeniu "na końcu" chodzi o ostatni argument - checkall.
  11. Jak klikniesz na instance_nearest w kodzie to Ci wyswietli jakich dwoch (HINT!) argumentow brakuje. Lepiej sprobuj sam bo watpie, zeby ktos byl na tyle mily...
  12. instance_nearest - zwraca id najblizszego obiektu danego typu
  13. Mozna by uzyc draw_rectangle, gdzie x2 = x1 + maxA.
  14. O_o. Moglbys napisac to jeszcze raz? Tylko troche "skladniej" bo kompletnie Cie nie rozumiem (pewnie nie tylko ja). Moze bede w stanie pomoc...
  15. Sprobuj tak: view_xview + view_wview - (view_xview + x/obj_minimapa.pozycja) Albo tak: view_xview + view_wview - x/obj_minimapa.pozycja Kombinuj.
  16. To odpowiada za pozycje na osi x: view_xview+x/obj_minimapa.pozycja Aby to odwrocic wystarczy dac chyba: view_wview - (view_xview + x/obj_minimapa.pozycja) Moze nie dzialac. Odpowiadanie na takie tematy jak ten to fajny sposob na nabicie postow... nawet, gdy licznik jest nie jawny.
  17. A jakby tam, do pewnego stopnia, zwiekszac direction, ale image_angle nie zmieniac? Daloby to efekt podobny do jazdy w poslizgu, ale tylko wizualnie. Trzeba by zajac sie tym od strony fizyki. Tu znajdziesz troche informacji: http://www.gamedev.pl/articles.php?x=view&id=134 "Model jazdy w wyścigach typu arcade" by Kłamacz
  18. 1. Przy pierwszym kliknieciu zapisac pozycje i w real time wyliczyc funkcje liniowa z tej pozycji i pozycji myszki. Potem odpowiednio podawac x lub y (i wyliczac drugie) z zakresu od pozycji zpisanej do pozycji myszki. Dzieki temu bedziesz mial kolejne współpodrzędne punktow (pikseli raczej), ktore stworza ta linie. y = ax + b Bedziesz mial dwa punkty (zapisany i myszka), wiec: y = ax + b y2 = ax2 + b I z tego ukladu mozesz wyliczyc a i b, czyli masz gotowy wzor. W momencie drugiego klikniecia zapisujesz tez x2 i y2. Potem rysujesz od pierwszego zapisanego, do drugiego zapisanego. Edit: Hm... Mozna tez uzyc draw_line. :P Troche o tym zapomnialem.
  19. Zrob sobie zmienna i daj takie same akcje w Left Button oraz Gobal Left Pressed tylko to czy sie wykonanuja uzaleznij od wartosci zmiennych.
  20. Z tego co wiem to tylko obudowa na f-cje trygonometryczne: cos(degtorad(dir)) * len; sin(degtorad(dir)) * len; Tylko nie wiem co sie z znakiem dzieje: x + cos(degtorad(dir)) * len; y - sin(degtorad(dir)) * len; x + lengthdir_x(len, dir); y + lengthdir_y(len, dir);
  21. Nie. Mozne jakis rysunek nas naprowadzi? EDIT: O... Widocznie ktos zrozumial.
  22. Nie spodziewalem sie tego, ale dobrze kombinujesz z tym vk_enter (z malych musi byc). Jezeli zrozumiesz i nauczysz sie uzywac pozostalej czesci listy to moze nawet uda Ci sie samemu dojsc do rozwiazania, a to gwarantuje brak takich problemow w przyszlosci. W nagrode (:P) za entera dam dwa linki do artykulow Marmota i Tymona: https://gmclan.org/index.php?czytajart=34 https://gmclan.org/index.php?czytajart=31
  23. Nicolas

    Sniper'o

    Dziwny efekt, ktory mi sie objawil: http://img143.imageshack.us/img143/2521/cotohj2.png Tryb snajperski to tylko zmiana celownika?
  24. Podpowiedzi: Teraz juz sobie poradzisz, a jezeli nie... Zawsze mozesz zaczac szydelkowac.
  25. 1. Obroty i kolizje to nie taka latwa sprawa. Sprobuj z maskami. 2. image_single=direction/5; Dla 90 stopni wyjdzie 90/5 klatka (18) - zly wzor. Zreszta obiekty ruszaja sie w dwie strony, wiec jezeli nie chcesz, zeby chodzily tylem to tez je odwracaj. Wzor musi pasowac do ukladu klatek.
×
×
  • Dodaj nową pozycję...