Skocz do zawartości

TheVVaS

Użytkownicy
  • Postów

    42
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez TheVVaS

  1. Już wysyłam wam na PW source, tylko się nie popłaczcie jak zobaczycie moje wypociny :D
  2. Opcję odznaczyłem, sprite ma prostokątną maskę kolizji - czołg nadal tak samo wbija się w ściankę.
  3. Tak, wolałbym pierwszy sposób, lecz nawet jak dodam do sprawdzania kolizji vspeed albo hspeed to nadal przy większej prędkości widać jak się wbija. Taki jest efekt aktualnego kodu. (Rozpędziłem się czołgiem do maksimum i wbiłem się w ściankę)
  4. Check_backward GML py1 = obj_tank.y + lengthdir_y(18,obj_tank.direction+143) + obj_tank.vspeed px1 = obj_tank.x + lengthdir_x(18,obj_tank.direction+143) + obj_tank.hspeed py2 = obj_tank.y + lengthdir_y(18,obj_tank.direction+213) + obj_tank.vspeed px2 = obj_tank.x + lengthdir_x(18,obj_tank.direction+213) + obj_tank.hspeed py3 = obj_tank.y + lengthdir_y(14,obj_tank.direction-180) + obj_tank.vspeed px3 = obj_tank.x + lengthdir_x(14,obj_tank.direction-180) + obj_tank.hspeed if instance_position(px1, py1, solid) || instance_position(px2,py2, solid) || instance_position(px3,py3, solid) return (0) else return (1) Check_forward GML py1 = obj_tank.y + lengthdir_y(19,obj_tank.direction+37) + obj_tank.vspeed px1 = obj_tank.x + lengthdir_x(19,obj_tank.direction+37) + obj_tank.hspeed py2 = obj_tank.y + lengthdir_y(19,obj_tank.direction-33) + obj_tank.vspeed px2 = obj_tank.x + lengthdir_x(19,obj_tank.direction-33) + obj_tank.hspeed py3 = obj_tank.y + lengthdir_y(15,obj_tank.direction) + obj_tank.vspeed px3 = obj_tank.x + lengthdir_x(15,obj_tank.direction) + obj_tank.hspeed if instance_position(px1, py1, solid) || instance_position(px2,py2, solid) || instance_position(px3,py3, solid) return (0) else return (1) Check_left GML py1 = obj_tank.y + lengthdir_y(19,obj_tank.direction+37) + obj_tank.vspeed px1 = obj_tank.x + lengthdir_x(19,obj_tank.direction+37) + obj_tank.hspeed py2 = obj_tank.y + lengthdir_y(18,obj_tank.direction+213) + obj_tank.vspeed px2 = obj_tank.x + lengthdir_x(18,obj_tank.direction+213) + obj_tank.hspeed if instance_position(px1, py1, solid) || instance_position(px2,py2, solid) return (0) else return (1) Check_right GML py1 = obj_tank.y + lengthdir_y(19,obj_tank.direction-33) + obj_tank.vspeed px1 = obj_tank.x + lengthdir_x(19,obj_tank.direction-33) + obj_tank.hspeed py2 = obj_tank.y + lengthdir_y(18,obj_tank.direction+143) + obj_tank.vspeed px2 = obj_tank.x + lengthdir_x(18,obj_tank.direction+143) + obj_tank.hspeed if instance_position(px1, py1, solid) || instance_position(px2,py2, solid) return (0) else return (1) Edit: Teraz znowu sprawdzam i już blokuje dobrze, ale teraz mam problem z "wbijaniem" się w ścianę, jak czołg osiągnie dużą prędkość to może wbić się lekko w ścianę. Jak temu zapobiec?
  5. Zmieniłem sprawdzanie kolizji na instance_position, ale teraz efekt jest nadal daleki. Dodałem też ścianie parenta. Wyśle ci na PW skompilowaną wersje i zobaczysz jak to wygląda.
  6. Czyli jeśli chciałbym użyć instance_position, by wykrywał bloki solidne to jakoś tak: GML instance_position(obj_tank.x,obj_tank.y+24, obj_solid_block) ? Jeśli dobrze rozumiem to będzie reagować tylko na obiekty, które mu podam? Da się to jakoś wykorzystać, by reagował na każdy obiekt, który jest solidny?
  7. Da się to jakoś poprawić? Edit: Użycie collision_point coś by tu zmieniło?
  8. No niestety napotkałem kolejny problem, mianowicie: Niby punkty do sprawdzania kolizji działają, ale małe skurczybyki działają na większą skale niż chciałem. Czerwone kropki to punkty kolizji, czarny blok to obiekt solidny. Otóż jak na obrazku widać, jest jeszcze sporo miejsca między punktami kolizji i solidną ścianką, lecz pokazane punkty już wykrywają solidna ścianę :( Jakiś pomysł?
  9. Lekko pozmieniałem i wszystko ładnie śmiga. Wielkie dzięki za pomoc :)
  10. To teraz ostatnie pytanko - Czy sposób jakim to zrobiłem jest dobry czy przekombinowałem? Może jest jakiś efektywniejszy sposób na to?
  11. Rozumiem, że te punktu są przystosowane już do rozmiarów mojego zacnego prostokątnego czołgu? :D A co do punktu równo na górze albo równo na dole muszę dać tak? GML gora = obj_tank.y + lengthdir_y(24,obj_tank.direction) gora = obj_tank.x + lengthdir_x(24,obj_tank.direction) dol = obj_tank.y + lengthdir_y(24,obj_tank.direction-180) dol = obj_tank.x + lengthdir_x(24,obj_tank.direction-180) Chciałbym też dowiedzieć się jak dorwałeś LEN 28?
  12. To teraz sprostowanie, użyłem skryptu Check_left, by sprawdzić gdzie są te punkty. Pierwszy pojawia się u góry między dwoma zaznaczonymi, a drugi an dole także między zaznaczonymi na powyższym rysunku. Czołg jest prostokątny o wymiarach 34x48. Punkty ruszają się podczas obrotu czołgu. Edit: Przy użyciu drawa na skrypt Check_right kropki pokazują się w tym samym miejscu co przy Check_left, ale jak obracam czołg to kręcą się w drugą stronę. Edit2: Przy skrycie na Check_forward zostałem rozwalony, nie wiem jak opisać obrót tych punktów :D
  13. Przedstawię na obrazku, gdyż nie potrafię tego dokładnie opisać oraz chciałbym ominąć nieporozumienia: Brązowe - czołg Czerwone - punkty sprawdzające podczas obrotu w lewo czy coś nie blokuje Zielone - tak samo jak czerwone, ale w prawo Edit: Pobawię się draw'em tak jak napisałeś.
  14. Witam, Od niedawna zacząłem bawić się w robienie w GMie małej gierki z czołgami w roli głównej :) Aktualnie zatrzymałem się na fragmencie gdzie sprawdza się czy czołg nie jest przez coś blokowany. A oto moje wypociny: 1. Sprawdzanie czy może obrócić się w lewo - skrypt Check_left: GML sprheight = sprite_get_height(spr_tank1) sprwidth = sprite_get_width(spr_tank1) py1 = obj_tank.y - lengthdir_y(sprheight/2,obj_tank.direction) px1 = obj_tank.x - lengthdir_x(sprwidth/2,obj_tank.direction) py2 = obj_tank.y + lengthdir_y(sprheight/2,obj_tank.direction) px2 = obj_tank.x + lengthdir_x(sprwidth/2,obj_tank.direction) if place_free(px1, py1) && place_free(px2,py2) return (1) else return (0) 2. Sprawdzanie czy może obrócić się w prawo - Skrypt Check_right: GML sprheight = sprite_get_height(spr_tank1) sprwidth = sprite_get_width(spr_tank1) py1 = obj_tank.y - lengthdir_y(sprheight/2,obj_tank.direction) px1 = obj_tank.x + lengthdir_x(sprwidth/2,obj_tank.direction) py2 = obj_tank.y + lengthdir_y(sprheight/2,obj_tank.direction) px2 = obj_tank.x - lengthdir_x(sprwidth/2,obj_tank.direction) if place_free(px1, py1) && place_free(px2,py2) return (1) else return (0) 3. Sprawdzanie czy może poruszać się do przodu - Skrypt Check_forward: GML sprheight = sprite_get_height(spr_tank1) sprwidth = sprite_get_width(spr_tank1) py1 = obj_tank.y - lengthdir_y(sprheight/2,obj_tank.direction) px1 = obj_tank.x - lengthdir_x(sprwidth/2,obj_tank.direction) py2 = obj_tank.y - lengthdir_y(sprheight/2,obj_tank.direction) px2 = obj_tank.x + lengthdir_x(sprwidth/2,obj_tank.direction) py3 = obj_tank.y - lengthdir_y(sprheight/2,obj_tank.direction) px3 = obj_tank.x if place_free(px1, py1) && place_free(px2,py2) && place_free(px3,py3) return (1) else return (0) 4. Sprawdzanie czy może poruszyć się do tyłu - Skrypt Check_backward: GML sprheight = sprite_get_height(spr_tank1) sprwidth = sprite_get_width(spr_tank1) py1 = obj_tank.y + lengthdir_y(sprheight/2,obj_tank.direction) px1 = obj_tank.x - lengthdir_x(sprwidth/2,obj_tank.direction) py2 = obj_tank.y + lengthdir_y(sprheight/2,obj_tank.direction) px2 = obj_tank.x + lengthdir_x(sprwidth/2,obj_tank.direction) py3 = obj_tank.y + lengthdir_y(sprheight/2,obj_tank.direction) px3 = obj_tank.x if place_free(px1, py1) && place_free(px2,py2) && place_free(px3,py3) return (1) else return (0) return(1) - Nic go nie blokuje return(0) - Jakiś blok solidny stoi i blokuje Znajdzie się jakiś miszczu co pomoże biednemu w potrzebie? :D
  15. Tak to konkretnie wygląda: global.myid = readbyte() if end_game = true {exit;} else {Self.alarm[0]=1} break Edit: Sorki, jednak inny obiekt odpalał ten alarm jeszcze przed tym. Problem rozwiązany :)
  16. Witam, Dość niedawno zacząłem bawić się w GMie, zrobiłem mały projekcik do gry z kumplami, wszystko pięknie działało. Po dodaniu paru rzeczy i wielu poprawek wyskakuje mi następujący błąd: ___________________________________________ ERROR in action number 1 of Alarm Event for alarm 0 for object Self: Error in code at line 3: writebyte(global.myid); ^ at position 19: Unknown variable myid Zmienna globalna została zadeklarowana w następujący sposób: "global.myid = readbyte()". Nadal jestem zielony w GMie, więc prosiłbym o pomoc :)
×
×
  • Dodaj nową pozycję...