Skocz do zawartości

Nicolas

Użytkownicy
  • Postów

    350
  • Dołączył

  • Ostatnia wizyta

Osiągnięcia Nicolas

Forum Veteran

Forum Veteran (6/13)

0

Reputacja

  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.
×
×
  • Dodaj nową pozycję...