Skocz do zawartości

Nad czym aktualnie pracujesz?


ANtY

Rekomendowane odpowiedzi

Mi w końcu udało się zrobić ślizganie po ścianach, męki z tym było co niemiara

 

ryvcffvvvvb2.gif

mam to samo z platformówka :D

 

Ciężko coś o tym powiedzieć, poka w ruchu czy coś:3

nic ciekawego zwykły ruch ale jak chcesz :P

twoja metoda to nr 2

gif.gif

Odnośnik do komentarza
Udostępnij na innych stronach

Mi w końcu udało się zrobić ślizganie po ścianach, męki z tym było co niemiara

Jak oddzielisz ruch po osi X od Y, tak by sprawdzanie kolizji w tych osiach były niezależne od siebie to bardzo łatwo jest zrobić ślizganie.

 

dla przykładu, chyba moim najprostszym rozwiązaniem na jakie wpadłem jest to:

 

GML
var posX, posY;

posX = 0;

posY = 0;

 

if ( keyboard_check(ord('A')) ) posX -= 3;

if ( keyboard_check(ord('D')) ) posX += 3;

if ( keyboard_check(ord('W')) ) posY -= 3;

if ( keyboard_check(ord('S')) ) posY += 3;

 

// jak widać sprawdzanie kolizji w osiach jest od siebie całkowicie niezależne

if ( !place_meeting(x+posX, y, p_wall) ) x += posX;

if ( !place_meeting(x, y+posY, p_wall) ) y += posY;

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Może rzeczywiście przerobię to tak jak piszesz, w sumie wystarczyłoby przerobić odchylenie joysticka na dwie osie.

Odnośnik do komentarza
Udostępnij na innych stronach

Jak jesteśmy w temacie kolizji, ślizgania itd, to niedawno robiłem małą customową fizykę, zarówno dla platformówki jak i top down.

 

 

Download GMZ: https://drive.google.com/file/d/0B-1vrtiAAh...Wk2clJKWnM/view sprawdźcie czy plik jest widoczny publicznie

 

Żółta piłka na tym filmiku jest graczem, w platformowym widoku może skakać

 

Całość obliczania kolizji i fizyki odbić czy ślizgów zawiera się w tym kodzie: to jest obiekt par_dynamic:End Step

/// physic calc
phyPX = phyX;
phyPY = phyY;

// sub-pixel movement
subHS += phyHS;
subVS += phyVS;
var tempHS = round(subHS);
var tempVS = round(subVS);
subHS -= tempHS;
subVS -= tempVS;

var vNormalx = 0;
var vNormaly = 0;
var vCollision = noone;
vR = phyCollisionSize+ceil(phyRSPD);

preciseCheck = false;
// first collision test is fast, it only check if a collision in a circle between origin and move vector can occur. If not then move else do precision checkings 
if ( collision_circle(x, y, vR, par_collisionGroup, 0, 1 ) ) preciseCheck = true;
else
{
   // simple move
   x += phyHS;
   y += phyVS;
}

// slow precise collision test
if ( preciseCheck )
{
   // horizontal movement
   var vSignHS = sign(tempHS);
   repeat ( abs(tempHS) ) 
   {
       var vMiddle = instance_place(x+vSignHS, y, par_collisionGroup);  
       if ( !vMiddle )
       {
           x += vSignHS;
       }
       else
       {
           vCollision = vMiddle;
           vNormalx = -vSignHS;
           vNormaly = 0;
           // slopes
           var vUp = place_meeting(x+vSignHS, y-1, par_collisionGroup);
           var vDown = place_meeting(x+vSignHS, y+1, par_collisionGroup);
           if ( !vUp && vDown ) { if ( phyFixSlidingEnabled )/* if ( !place_meeting(x, y-1, par_collisionGroup) )*/ y -= 1; vNormaly = -1; }
           else if ( vUp && !vDown ) { if ( phyFixSlidingEnabled )/* if ( !place_meeting(x, y+1, par_collisionGroup) )*/  y += 1; vNormaly = 1; }
       }
   }


   // vertical movement
   var vSignVS = sign(tempVS);
   repeat ( abs(tempVS) ) 
   {
       var vMiddle = instance_place(x, y+vSignVS, par_collisionGroup);    
       if ( !vMiddle )
       {
           y += vSignVS;
       }
       else
       {
           vCollision = vMiddle;
           vNormaly = -vSignVS;
           // slopes
           var vLeft = place_meeting(x-1, y+vSignVS, par_collisionGroup);
           var vRight = place_meeting(x+1, y+vSignVS, par_collisionGroup);
           if ( !vLeft && vRight ) { if ( phyFixSlidingEnabled ) /*if ( !place_meeting(x-1, y, par_collisionGroup) )*/  x -= 1; vNormalx = -1; }
           else if ( vLeft && !vRight ) { if ( phyFixSlidingEnabled ) /*if ( !place_meeting(x+1, y, par_collisionGroup) )*/  x += 1; vNormalx = 1; }
       }
   }
}
// apply dampings
// air damping
phyHS += -phyFixDrag*phyHS*abs(phyHS);
phyVS += -phyFixDrag*phyVS*abs(phyVS);
// linear damping
phyHS += -phyFixDamping*phyHS;
phyVS += -phyFixDamping*phyVS;

// apply frictions and bounce if collision
if ( vCollision != noone )
{
   // apply friction
   var vFric = (1-vCollision.phyFixFriction)*(1-phyFixFriction);
   phyHS *= vFric;
   phyVS *= vFric;

   // apply bounce self
   var vBounce = 2*phyFixBounce*vCollision.phyFixBounce;
   var vSpdHS = abs(lerp(vCollision.phyRHS+phyHS, vCollision.phyHS+phyRHS, 0.5));
   var vSpdVS = abs(lerp(vCollision.phyRVS+phyRVS, vCollision.phyVS+phyVS, 0.5));
   phyHS += vSpdHS*vNormalx*vBounce;
   phyVS += vSpdVS*vNormaly*vBounce;

   // apply bounce other
   if ( vCollision.phyStatic == false )
   {
       var fakeKineticTransfer = vBounce*0.1; // this will unstuck instances in situations where they are in crowd
       vCollision.phyHS -= vSpdHS*vNormalx+fakeKineticTransfer;
       vCollision.phyVS -= vSpdVS*vNormaly+fakeKineticTransfer;
   }
}

// update read only variables
phySPD = sqrt(phyHS*phyHS+phyVS*phyVS);

phyRHS = lerp(phyX-phyPX, phyHS, 0.5);
phyRVS = lerp(phyY-phyPY, phyVS, 0.5);
phyRSPD = sqrt(phyRHS*phyRHS+phyRVS*phyRVS);

phyX = x;
phyY = y;

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

Siema, siema :)

Dawno nic nie robiłem, a ostatnio naszła mnie chęć na podejście jeszcze raz do remake'u Scorched Earth. W ramach rozgrzewki i przypomnienia sobie GMa zacząłem rzeźbić jakiś w miarę normalny system zniszczeń terenu i oto co wyszło :P

teren.gif

 

BTW: Nie patrzcie na fps, bez nagrywania pulpitu jest stale 60 :) Przy okazji instalacji niechcący się dowiedziałem że klucz od GM:Studio pasuje do GMa na Maca :D

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

a ja się bawię w pixelową reprezentację ludzika w trzeciej osobie. Jeszcze brak animacji i ogólnie surowo bardzo, ale osobiście zadowolony jestem z tego udawanego efektu jego trójwymiarowości

 

EDIT: oks, zrobiłem animację, filmik zupdatowany. Muszę przyznać, że naprawdę to zaczyna nabierać kształtów :gnysek:

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
KOZAK

 

Idź w ten styl i zrób coś sensownego !!!!

Będziesz na pierwszej stronie Yoyogames jak ukończysz.

dzięki wielkie, miło słyszeć. I tak też chciałbym w końcu zrobić. Miałem masę projektów przerastających moje możliwości i się gubiłem i je zostawiałem, ale planuję w te wakacje to dociągnąć do końca, oprószyć jakąś fabułą a la slice of life, zrobić jakąś obyczajową narracyjną przygodę fabularną. I są realne szanse, że jednak te postanowienie zrealizuję :) zobaczymy jak będzie. Póki co bawię się terenem i próbuję zaimplementować otwarty losowy świat z lasami, łąkami etc, w klimatach nieco górskich.

Odnośnik do komentarza
Udostępnij na innych stronach

A mi się bardziej podobają twoje prace które nie są takimi prostymi pixelkami jak tutaj. Ten styl wygląda schludnie ale sama gra juz niczym się wyróżniać nie będzie. Nawet jalopy które ma podobną kolorystykę i styl graficzny pomimo swojej mechaniki większych sukcesów nie odniosło. Odkąd indyki zaczęły na siebie zarabiać to gier z bardzo uproszczoną pixelkowa grafika mega dużo przybyło.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności
A mi się bardziej podobają twoje prace które nie są takimi prostymi pixelkami jak tutaj. Ten styl wygląda schludnie ale sama gra juz niczym się wyróżniać nie będzie. Nawet jalopy które ma podobną kolorystykę i styl graficzny pomimo swojej mechaniki większych sukcesów nie odniosło. Odkąd indyki zaczęły na siebie zarabiać to gier z bardzo uproszczoną pixelkowa grafika mega dużo przybyło.

czaję o co chodzi i wiem, że nie jestem w żaden sposób odkrywczy. Jalopy ma raczej zupełnie inną grafikę, a mojemu projektowi raczej bliżej do ułomnego Proteusa. Ale już od dłuższego czasu chciałem w takiej minimalistycznej konwencji zrealizować jakąś produkcję i ta próba jest dla mnie póki co najbardziej udana. No i nie kojarzę tytułu w oprawie pixelowej, który by prowadził w ten sposób rozgrywkę w trzeciej osobie, dlatego powziąłem taki tor. Nie liczę na rozgłos, to tylko dla mnie materiał ćwiczeniowy

7TQYou0.png

Odnośnik do komentarza
Udostępnij na innych stronach

Na postaciach wykorzystałeś sprity (bliboardy) do stworzenia sztucznego efektu 3D a na to nałożyłeś prawdziwe obiekty 3D, ja nie potrafię wskazać innej gry w takim stylu. Dla mnie to jest coś nowego. Ok no Driver 2 na PSX miał takie coś ale tam się dziadowało bo PSX nie miał float więc obliczenia na intach były bardzo nieprecyzyjne.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...