Pravidla Ucet
Nepřihlášen

Článek

Menu

Dynamické rovnice - GM8 příklad
Napsal: Seeker
Přidáno: 30.07. 2010

Skriptovaný pohyb nevypadá moc dobře, je trhaný atd. Dynamika ve hrách vypadá skvěle a je jednoduchá na vytvoření. Využívá jednoduchých programových znázornění diferenciálních rovnic. Výsledkem je plynulý soběstačný pohyb, který je snadno ovladatelný pouze nastavováním cílového bodu (v příkladu je to kurzor).

1. řádu:

stačí 1 proměnná - poloha použijeme např x potom musíme mít každý step dostupnou součadnici destinace - bude to např mouse_x - půjde za myší.

Kód: x = (x+x_dest)/2;

Toto samozřejmě ukotvuje pouze x. Proto musíme použít 2 příkazy (ve 3D i pro z):

x = (x+mouse_x)/2; y = (y+mouse_y)/2;

Výsledkem je, že instance bude přitahována k myši. Čím dál od myši, tím rychleji. Na pozici myši doháhne rychlosti 0. Pokud chcete měnit tření, tak je vrozeček o trochu složitější:

p = tření (0-1) x = x*p+mouse_x*(1-p)

Samozřejmě až si navolíte svou konstantu tření, můžete čísla vykrátit, pokud to jde.

2. řádu:

Zde se dynamicky pracuje s rychlostí.

hspeed = (hspeed+(mouse_x-x)/2)/k; vspeed = (vspeed+(mouse_y-y)/2)/k;

k > 2 bez překmitů, může být pomalé k = 2 nejrychlejší reakce bez překmitů

1 < k < 2 tlumené překmity

k = 1 stabilní překmit (perpetuum mobile)

Další už se nepoužívají - nejsou stabilní:

0 < k < 1 zesilované překmity

k = 0 dělení nulou

k < 0 nezkoumal jsem, měly by být hodně nestabilní

Dynamika 2. řádu už se chová realisticky, objekty mají hybnost, nerozletí se, jak střela, když se jim změní cíl, ale mění svou rychlost plynule (Dynamika 2 řádu je použita např na části těla postaviček ve hře s kódovým názvem SlimeWorld, 1. řád na kameru)

Příklad v GM8 - pro prohlídnutí různých řádů měňte proměnnou rad v create


Ostatní díly seriálu:
Klíčová slova: dynamika pohyb vzorečky vzorce rychlost x y souradnice
 

Komentáře:

Napsal: Seeker
Přidáno: 17.08. 2010

Samozřejmě to platí jen pro poměr 1:1, pro ty ostatní je výhodnější to odečítací s +=

Trvalý odkaz

Napsal: Seeker
Přidáno: 17.08. 2010

samozřejmě, ale tamten zápis je nejjednodušší a nejmíň náročný na procík.

x += (mouse_x-x)/2

->

x = x+(mouse_x-x)/2

->

x = x+mouse_x/2-x/2

->

x = mouse_x/2+x/2

->

x = (mouse_x+x)/2

Trvalý odkaz

Napsal: xmanyk
Přidáno: 14.08. 2010

x = (x+mouse_x)/2; y = (y+mouse_y)/2;

p = tření v procentech x = (x*p+mouse_x*(100-p))/p

se dá nahradit jednodušše tímto:

x += (mouse_x-x)/10;

y += (mouse_y-y)/10;

pohyb za myší bude 10x pomalejší, než je třeba aby tam hned skočil

Trvalý odkaz

Napsal: bedikk
Přidáno: 05.08. 2010

Já to chápu a přijde mi to perfektní! :)

Trvalý odkaz

Přidáno: 04.08. 2010

Zenonův paradox.

Trvalý odkaz

Napsal: Seeker
Přidáno: 31.07. 2010

Prostě vyhlazený pohyb.V každý hře se najde místo, kde by se to hodilo.

Trvalý odkaz

Napsal: Mikefiser
Přidáno: 31.07. 2010

Ale nějak jsem nepochopil co to dělá, to jako když mám nepřítele, který jde po hrdinovi, tak když se pohybuje, tak vše dělá plynule nebo jak?

Trvalý odkaz

Napsal: Seeker
Přidáno: 31.07. 2010

Stačí jen udělat obyčejnej objekt a ty 2 řádky mu dát do stepu ;) Jinak nemusim říkat, že míst omouse_x a mouse_y můžete mít vlastní "kotvy". Např v SW se všechny kotvy počítaj pomocí analitické geometrie, tyhle 2 řádky (u SW 3, mám tam i z) pak ošéfujou plynulý pohyb ke kotvě,

Trvalý odkaz

Napsal: Mikefiser
Přidáno: 31.07. 2010

Je to naprosto totálně nepřehledný i kdyby to někdo pochopil ;) dávej to do TIPů a Pozor atd...

Trvalý odkaz

Napsal: bildo
Přidáno: 30.07. 2010

Koukam, ze komentare se nejak nehrnou. Ja skoro vubec nechapu, co jsi napsal.(Myslim si,ze ani ostatni)

Chtelo by to mozna nejakej .gmk priklad.

Trvalý odkaz

Velkej Chytrák
Copyright (c) 2001-2010