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: Podmínky if(....)  (Read 5813 times)

0 Members and 1 Guest are viewing this topic.

jar121

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 18
    • View Profile
Podmínky if(....)
« on: November 20, 2005, 12:27:51 AM »

Čau zase!
Předně chci podděkovat Hanserovi za pomoc při ovlivnění scén.
 Nakonec jsem s jeho pomocí našel způsob který jsem hledal a funguje to výborně! Díky!
Ovšem s tím se objevila jistá věc, která mi už nechce fungovat. Já nevím jak přesně ji mám napsat do skriptu. Jedná se o podmínku, kdy se ptám if.... je splněno udělej toto... To chápu a funguje to, ovšem mohu podmínku zapsat tak ,aby bylo splněno dva a více ukonů?
Potřebuji zapsat podmínku, která by se ptala: if je splněno toto a soušasně toto, pak něco=active
jde o zápis a současně. Zkoušel jsem různé kombinace podmínky v podmínce, to co nenapsalo chybu pak ale  ve hře neplnilo zcela to co má. Díky kdo napíšete!  O0
Logged

B-i-g-b-o-s-s

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 71
    • View Profile
Re: Podmínky if(....)
« Reply #1 on: November 20, 2005, 10:16:29 AM »

Nevim jestli tě správně chápu.Ale ty věci co chceš aby to udělalo musíš dát do těhle závorek {}
např:

if(podminka==true)
{
neco;
blbost.Active = true;
}

nebo to myslíš jako dvě podmínky?

if(podminka==true)
{
  if(podminka2==false)
   {
    blbost.Active = true;
   }
}

Normálně dvě podmínky tak mi to funguje
« Last Edit: November 20, 2005, 05:16:07 PM by B-i-g-b-o-s-s »
Logged

jar121

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 18
    • View Profile
Re: Podmínky if(....)
« Reply #2 on: November 20, 2005, 06:19:19 PM »

Přesně tenhle způsob mě napadl taky, ale to nefunguje, nebo spíš to moc kombinuji. Jde o to, že v jedné scéně se projevují změny z jiných scén a mohou se kombinovat nezávisle na sobě. Chci to vyřešit změnou pozadí scény a 2 kombinace mi vyvolají 4 účinky - 4 ruzná pozadí a zapsal jsem to:

#include "scripts\base.inc"

  var pozadi_A = Scene.GetNode("pozadi_zav_tma");
  var pozadi_B = Scene.GetNode("pozadi_otev_tma");
  var pozadi_C = Scene.GetNode("pozadi_zav_svetlo");
  var pozadi_D = Scene.GetNode("pozadi_otev_svetlo");

////////////////////////////////////////////////////////////////////////////////
// svetlo
global svetlo;
Game.Msg(svetlo);
// dvirka
global dvirka;
Game.Msg(dvirka);


if (svetlo == false)
{
  if (dvirka == false)
   {
    pozadi_A.Active = true;
   }
}
if (svetlo == true)
{
  if (dvirka == false)
   {
    pozadi_C.Active = true;
   }
}
if (svetlo == false)
{
  if (dvirka == true)
   {
    pozadi_B.Active = true;
   }
}
if (svetlo == true)
{
  if (dvirka == true)
   {
    pozadi_D.Active = true;
   }
}

Ono to snad funguje jen, když poprvé vejdu do dané scény a jakmile začnu změny kombinovat výsledná pozadí nesedí a nemění se. (možna bych měl zdůraznit, že zdroje změn jsou v jiných scénách)
Logged

hanser

  • Regular poster
  • ***
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 216
  • Life is yet simple - over and over...
    • View Profile
    • First Reality developers studio
Re: Podmínky if(....)
« Reply #3 on: November 21, 2005, 12:22:52 AM »

tak predne: Neni zac!  ;)

A ted: uff...musim rict, ze jsem se v tom dost ztratil, ale jsem si 100% jist, ze to pujde vyresit i mnohem elegantnejsim zpusobem. Hned prvni chyba bude zrejme v samotne definici globalnich promennych. Kdyz nekde pouzijes Scene.GetNode();, tak to znamena, aby se do promenne nacetl objekt z aktulani sceny. Jenze prave v tom by tady mohl byt problem, protoze neni uplne jiste (alespon me) jaka scena je aktivni ve chvili nacteni souboru base.inc. V tomhle pripade by bylo asi moudrejsi pouzivat jen lokalni promenne a vzdy je na zacatku scriptu inicializovat znovu - stejne je jinde asi nevyuzivas. (mozna jsem to spatne pochopil)

Dale jsem si vsiml, ze casto potrebujes soucasne testovat 2 podminky. To se da vyresit za pomoci operatoru AND (a soucasne), ktery se znaci take: ||. Tim ti odpadnou ty zbetecny stromy plne ifek.

Potom jsem si take vsiml, ze sice jednotliva pozadi zapinas, ale uz je nevypinas. Ja tedy nevim, jak to mas ve sceneeditu vyreseno, ale pokud je mas jako klasicke Entity, tak si musis uvedomit, ze jsou nejak vrstveny na sebe a podle toho take budou videt.

Mno...pokud jsem ti nejak pomohl, tak to urcite vyresis...pokud ne, tak mi pisni na PM, co presne ma postava ve ktere scene delat a nejak to vymyslime  8)
Logged
Dobri umelci kopiruji, ti nejlepsi kradou.
- mj. Steve Jobs & Bill Gates

PoselSmrti

  • Guest
Re: Podmínky if(....)
« Reply #4 on: November 21, 2005, 04:08:07 PM »

BTW:-> Sorry hanser, ale vidím, že štúdium C++ akosi pokračuje, čo?! ;D
Logged

hanser

  • Regular poster
  • ***
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 216
  • Life is yet simple - over and over...
    • View Profile
    • First Reality developers studio
Re: Podmínky if(....)
« Reply #5 on: November 21, 2005, 05:09:55 PM »

BTW:-> Sorry hanser, ale vidím, že štúdium C++ akosi pokračuje, čo?! ;D
hele...nezakladej tyhle off-topic, to se me radsi zeptej na IRC nebo na ICQ...navic...stejne tu otazku nejak nechapu  ;)
Logged
Dobri umelci kopiruji, ti nejlepsi kradou.
- mj. Steve Jobs & Bill Gates

jar121

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 18
    • View Profile
Re: Podmínky if(....)
« Reply #6 on: November 22, 2005, 12:25:57 AM »

Nono pánové! Tak to jsem si tady nedomluvili, takhle by to dál nešlo... Já tady teď píši velice důležitý skrtipt a potřebuji kliiiiid...   ;D
....
...
..
.
Problém je v tom, že já zatím umím používat jen SceneNode, ale na tom zapracuji. Ten problém zřejmě bude v tom, protože ať vymýšlím různé kombinace, program pořád nechápe.
Zkusil jsem to poměnit a zapsat takto:


if (svetlo == false || dvirka == false)
   {
    pozadi_B.Active = false; //pro jistotu je povipínám
    pozadi_C.Active = false;
    pozadi_D.Active = false;
    pozadi_A.Active = true; //a zapnu to co potřebuji
   }
... a podobně zbylé tři varianty...

(nutno říc, že hra je z pohledu vlastních očí, řekněme jako dungeon bez Molly)
V podstatě já v jedné scéně otevřu dvíčka a v druhé rožnu světlo. Pak ve třetí scéně tyto změny vidím na jednou.
Chápu to tak, že jakmile opět vejdu do scény, program načte pozadí do proměnných, zkontroluje podmínky co sedí a nesedí a aktivuje jedno z pozadí. neděje se tak... :-\
Každopásně dík za odpověď, jdu ještě koumat. Zdarec!
Logged

hanser

  • Regular poster
  • ***
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 216
  • Life is yet simple - over and over...
    • View Profile
    • First Reality developers studio
Re: Podmínky if(....)
« Reply #7 on: November 23, 2005, 12:32:46 AM »

Mno...asi bych to udelal takhle (scene_init.script):
Code: [Select]
#include "scripts\base.inc"

//nacteni promennych z jinych scen
global svetlo;
global dvirka;

//nedelal bych tohle jako globalni promenne, meli by stacit klasicke lokalni
var pozadi_A = Scene.GetNode("A");
var pozadi_B = Scene.GetNode("B");
var pozadi_C = Scene.GetNode("C");
var pozadi_D = Scene.GetNode("D");

//vsehny pozadi vypnu
pozadi_A.Active = false;
pozadi_B.Active = false;
pozadi_C.Active = false;
pozadi_D.Active = false;

//...a podle podminek zapnu - slo by to jeste pres case, ale takhle by to melo stacit
if (svetlo == false || dvirka == false) pozadi_A.Active = true;
if (svetlo == true || dvirka == false) pozadi_B.Active = true;
if (svetlo == false || dvirka == true) pozadi_C.Active = true;
if (svetlo == true || dvirka == true) pozadi_D.Active = true;

//samozrejme si to musis poskladat tak, aby to souhlasilo s pozadimi, atd...


Pokud to takhle nefunguje, tak bude asi chyba nekde ve zmene hodnot globalnich promennych.
ps: nebo je to blbe ode me - nikdo neni neomylny a uz vubec ne ja ::)
Logged
Dobri umelci kopiruji, ti nejlepsi kradou.
- mj. Steve Jobs & Bill Gates

Tinny

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Gender: Male
  • Posts: 49
    • View Profile
Re: Podmínky if(....)
« Reply #8 on: November 23, 2005, 08:22:50 AM »

já bych zkusil toto:

if (svetlo == false || dvirka == false) pozadi_A.Active = true; else {
    if (svetlo == true || dvirka == false) pozadi_B.Active = true; else {
        if (svetlo == false || dvirka == true) pozadi_C.Active = true; else {
            if (svetlo == true || dvirka == true) pozadi_D.Active = true; }}}

ještě jsem v tom neprogramoval a tak nevím přesně, jakou to má syntax. Takže se omlouvám za případné hlouposti. Ale Význam je z toho vidět, takže to kdyžtak pooprav (asi tam nepatří středníky...).
« Last Edit: November 23, 2005, 02:02:50 PM by Tinny »
Logged
 

Page created in 0.045 seconds with 21 queries.