Please login or register.

Login with username, password and session length
Advanced search  

News:

Forum rules - please read before posting, it can save you a lot of time.

Author Topic: 3D postava - dokrok  (Read 5402 times)

0 Members and 1 Guest are viewing this topic.

dream

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 32
    • View Profile
3D postava - dokrok
« on: July 01, 2009, 04:36:08 PM »

Ahoj,

jedinú vec, ktorú by som potreboval vedieť, je táto:

Quote
Vypočítam si potrebnú dráhu a túto nastavím ako dĺžku kroku 3D postavy.

Ide to nastaviť programovo? Ak nie, bude to niekedy možné?

EDIT:   Maximálne som zjednodušil text, aby bolo úplne jasné, čo potrebujem vedieť :).
EDIT2: Pridaná jedna myšlienka, viď text pod poznánkou:).

AK by bola dĺžka kroku napr. 120 px, spravil by som si postavy (5 postáv), ktorých jednotlivé dĺžky krokov budú 20, 40, 60, 80, 100. Tých desať pixelov môžem ignorovať, pretože je to zanedbateľná dĺžka. Ak by sa však dalo spraviť riešenie programovo, bolo by to super;).
« Last Edit: July 01, 2009, 04:44:52 PM by fox »
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site
Re: 3D postava - dokrok
« Reply #1 on: July 01, 2009, 04:50:32 PM »

3D postavy disponuji plynulymi prechody mezi animacemi, takze tam funguje dokrok tak nejak automaticky. Jinak se to nastavit neda.
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

dream

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 32
    • View Profile
Re: 3D postava - dokrok
« Reply #2 on: July 01, 2009, 06:30:36 PM »

3D postavy disponuji plynulymi prechody mezi animacemi, takze tam funguje dokrok tak nejak automaticky. Jinak se to nastavit neda.

Hm. Nedá sa to nastaviť vo WME, alebo sa to nedá nastaviť vôbec?:) Je pravda, že tam ten dokrok nejako funguje, ale nie je to to, čo by som chcel Ja. Ja by som potreboval spraviť ten dokrok tak, že nastavím vypočítanú dráhu.

 
Logged

dream

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 32
    • View Profile
Re: 3D postava - dokrok
« Reply #3 on: July 02, 2009, 03:47:27 PM »

No nič. Každopádne, už som si našiel riešenie, ktoré môj problém odstráni :).
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site
Re: 3D postava - dokrok
« Reply #4 on: July 04, 2009, 08:05:21 AM »

Tak nam treba muzes rict jake, nekomu by se to v budoucnu mohlo hodit.
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

dream

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 32
    • View Profile
Re: 3D postava - dokrok
« Reply #5 on: July 06, 2009, 11:04:46 AM »

:) Na začiatok by som uviedol, prečo som chcel ten dokrok vložit do projektu. Ako som už povedal, pracujem s 3D postavami, ale toto isté by platilo aj pre spritové postavy.

V každej scéne mám povrch, na ktorom keď postava kráča, prehráva sa mi konktrétny, pridelený zvuk. Dĺžka kroku jednej postavy je v konverzii na pixely cca 90 px. Ak je ale vzdialenosť postavy od miesta, kam hráč klikov napríklad 130 px, znamená to, že postavá spraví jeden celý krok a niečo viac ako polovicu kroka. Toto je vo WME riešené (ako si už spomínal), prehrá sa anímácia dokroku, ale neprehrajú sa všetky snímky. Takže postava spraví krok, ale neprehrá sa zvuk, ktorý je pridelený pri kroku. Pri pohľade na to je to veľmi nepekný jav.

Dúfam, že to nie je moc komplikované, v praxi je to jasná vec;).

V podstate existujú dve riešenia (s ktorými som pracoval Ja):

1. Vypočítať dráhu dokroku a nastaviť ju postave
2. Vypočítať celkovú dráhu a spraviť iba celé kroky

Ad 1:)

a:)
Vzdialenosť dvoch bodov v rovine (postavy = bod A, mouse click = bod B), by sa dali jednoducho vypočítať pomocou Pytagorovej vety (analytická geometria). Vypočítaná prepona by sa prekonvertovala na číslo int, a potom by sa delila dĺžkou kroku postavy. Nakoniec, nie je problém vypočítať zvyšnú dráhu (ktorá je menšia ako jeden celý krok defaultne nastavený animátorom). Túto dráhu by som nastavil ako dĺžku animácie celého kroku zo skriptu.
Týmto by som zabezpečil, že postava spraví celý krok, ktorého dĺžku nastavím runtime.

Pozn.: Tento systém nemám ešte overený, a nie som si istý, či by to fungovalo, pretože pri zmene dĺžky kroku by pravdepodobne došlo aj ku zmene počtu snímkov.

Tento problém so sebou prináša trocha viacej okolností, ktoré by sa museli doriešiť. Pretože však túto možnosť nepoužívam, nebudem ju ďalej rozoberať. Ak by mal niekto záujem rozobrať tie okolnosti, nech sa ozve v tomto vlákne.

b:)
Ďalšia možnosť by bola spraviť si akési postavy, ktoré by mali odlišné dĺžky krokov (napr. 20, 40, 60, 80), a tieto potom spraviť ako dokrok. Samozrejme, musíme brať v úvahu to, že budú rozdiely v pixeloch, ale 10 pixelov je zanedbateľná dĺžka:).

Ad 2:)

Pomocou funkcie vypočítam celkovú vzdialenosť, a túto predelím dĺžkou kroku. Zvyšnú dráhu budem ignorovať a jednoducho ju nepoužijem. Napríklad, ak bude celková dráha 400 px a dĺžka kroku 90 px, postava spraví iba celé 4 kroky (360 px), a tých 40 pixelov zostane "neprejdených".

Myslím, že nemusím hovoriť o tom, ako spraviť to, aby postava prešla len toľko krokov, koľko je "akurát". Ak to niekto nevie, nech trocha premýšľa, nie som zrovna spisovateľ, aby som mal chuť rozoberať všetko do detailov :) :).

Teraz ku samotnej funkcii, ktorá počíta dráhu:

Sú dve možnosti:

- preťaženie metódy GoTo(X, Y) vo skripte scene.script
- definovať metódu vo skripte actora a túto potom volať vo skripte scene.script

Funkcia, ktorá je využiteľná pre možnosť Ad b:) a je definovaná vo skripte pre actora:

Code: [Select]
method GoToPosition(PosX, PosY)
{
  var Vzdialenost = Math.Sqrt(Math.Pow(actor.X - PosX, 2) + Math.Pow(actor.Y - PosY, 2));
  Vzdialenost = ToInt(Vzdialenost);
 
  if(Vzdialenost > 90)
  {
        Krok = Vzdialenost / 90;
Krok = ToInt(Krok);
actor.GoTo(PosX, PosY);
  }
}

Vo skripte actora treba prepočítavať tie kroky a keď bude posledný, postavu jednoducho zastaviť.

Určite budete kritický, plný nápadov a podobne. Píšte svoje postrehy, pripomienky, čomu nerozumiete a pod.
Logged
 

Page created in 0.035 seconds with 19 queries.