Please login or register.

Login with username, password and session length
Advanced search  

News:

For WME related articles and tutorials visit WME Resource Center.

Author Topic: Funkce  (Read 3627 times)

0 Members and 1 Guest are viewing this topic.

Dogtown

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 51
    • View Profile
    • Klášter na kraji lesa
Funkce
« on: November 21, 2009, 12:35:08 PM »

Zdravím, mám takový docela závažný problém.

Mám scénu, kde v jednom okamžiku má jiná postava začít pořád chodit dokola a zaroven bude pokračovat script dál.

Uvedu na příkladu:

Code: [Select]
gorila.Talk("Jdu přemýšlet");
gorila_chodi();
actor.Talk("Tak super, tahle opice tu přemýšlí. Zatím se tu porozhlédnu.");


Funkce gorila_chodi vypada takto:

Code: [Select]
function gorila_chodi()
{
var Chodi = true;
 while (Chodi)
 {
 gorila.GoTo(226, 604);
gorila.TurnTo(DI_LEFT);
gorila.GoTo(642, 705);
gorilafurnTo(DI_RIGHT);

 }
}

Gorila sice chodí pořád dokola, ale příkaz
Code: [Select]
actor.Talk("Tak super, tahle opice tu přemýšlí. Zatím se tu porozhlédnu.");se už nevyplní. Chci to tak, aby když začne funkce, tak aby se plnila ale aby šli rozkazi ve scriptu dál.

Všechno tohle je ve Scene scriptu.
Logged

dream

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 32
    • View Profile
Re: Funkce
« Reply #1 on: November 21, 2009, 04:57:27 PM »

Je prirodzené, že príkaz
Code: [Select]
actor.Talk("Tak super, tahle opice tu přemýšlí. Zatím se tu porozhlédnu."); sa nespustí, pretože ešte pred ním sa volá funkcia, v ktorej je nekonečný cyklus a vykonáva sa iba kód v tele tohto cyklu.

Nemám to otestované, ale napadlo ma spraviť to tak, že tú funkciu gorila_chodi() si dáš do samostatného skriptu, ktorý priradíš tej gorile. Potom to pustiš v poradí, v akom potrebuješ. Takto budeš mať dva na sebe nezávislé skripty a všetko by malo teoreticky fungovať tak, ako potrebuješ :). Príkladom nech je game_loop.script v ktorom je tiež nekonečný cyklus..
Logged

Mnemonic

  • WME developer
  • Administrator
  • Addicted to WME forum
  • *
  • Karma: 41
  • Offline Offline
  • Gender: Male
  • Posts: 5683
    • View Profile
    • Dead:Code Site
Re: Funkce
« Reply #2 on: November 21, 2009, 05:10:00 PM »

To by taky šlo, ale jednodušší je použít událost. Obsluhy událostí se spouštejí asynchronně.

Code: WME Script
  1. gorila.Talk("Jdu přemýšlet");
  2. this.ApplyEvent("gorila");
  3. actor.Talk("Tak super, tahle opice tu přemýšlí. Zatím se tu porozhlédnu.");
  4.  
  5.  
  6. on "gorila"
  7. {
  8.   var Chodi = true;
  9.   while (Chodi)
  10.   {
  11.     gorila.GoTo(226, 604);
  12.     gorila.TurnTo(DI_LEFT);
  13.     gorila.GoTo(642, 705);
  14.     gorilafurnTo(DI_RIGHT);
  15.   }
  16. }
  17.  
Logged
Yes, I do have a twitter account
Please don't send me technical questions in private messages, use the forum. ::wave

Dogtown

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 51
    • View Profile
    • Klášter na kraji lesa
Re: Funkce
« Reply #3 on: November 21, 2009, 08:03:06 PM »

Díky moc. Funguje to  ;)
Logged
 

Page created in 0.044 seconds with 20 queries.