Wintermute Engine Forum
Czech forum => Technické fórum => Topic started by: Siky on January 02, 2007, 06:02:49 PM
-
Jak se dá dynamicky nastavit z-souřadnice?
(Generuji entity a potřebuji jejich z souradnici nastavovat podle nějaké proměnné).
dík
-
jsou to 2D nebo 3D entity? (myslis jako entitu sprite nebo 3D model)
-
U těch z-souřadnic jde o entitu sprite.
A ještě bych měl jeden dotaz, proč nefunguje tohle?
var en = Game.CreateEntity("jmeno_body");
en.SetSprite("sprites/body.sprite");
en.AttachScript("scripts/body.script");
var sp = en.GetSprite();
sp.CurrentFrame = 4; // tohle nefunguje
Game.Msg(sp.CurrentFrame); // tohle vraci null
pokouším se vytvořit entitu, vložit sprite a nastavit frame
-
var sp = en.GetSpriteObject();
GetSprite vraci nazev souboru.
ta perspektiva u sprite entity se resi pomoci prepoctu a zmenseni.
Perspektivni korekce souradnic se pocita takhle:
http://en.wikipedia.org/wiki/3D_projection#Simple_version
a pak je jeste potreba pouzit scale aby se entita do dalky zmensovala.
-
To vypadá složitě :-\ Nevým zda jsem se vyjádřil přesně.
Nejde to nějak vyřešit jednodušeji? Nějakým překrýváním?
Mám různě velké entity a potřebuju je seřadit v Z směru aby
nejmenší byly vzadu a největší objekty vepředu. Prostě aby
ty velké objekty byly nad těmi menšími.
dík
-
aha, no tohle jde jednoduse. Vytvor si regiony pro kazdou "vrstvu", ktere si ve Scene Editoru nejak pojmenuj.
Potom dej
en.StickToRegion("nazev vrstvy"); podle toho, v jake vrstve chces entity mit.
Tim zajistis podobne prekryvani jako kdybys entity seradil ve scene editu.
Je to to, co potrebujes?
-
tohle jsem potřeboval, jdu to hned vyzkoušet, dík
ještě bych potřeboval nějak vyřešit: dynamicky vytvorena entita, prirazen sprite a tomu spritu chci zmenit frame.
Jak tohle vyřešim, pudu otravovat grafika na obrázky a bude další hra na světě :)
-
a co je spatne na:
var e = Scene.CreateEntity();
var sp = e.GetSpriteObject();
sp.CurrentFrame = 5;
?
(netestoval jsem to, ale melo by to jet)
Edit: samozrejme po CreateEntity by melo nasledovat SetSprite.
-
Jo jo, tohle by melo fungovat. V podstate ten puvodni kod, jen se v nem zmeni GetSprite() na GetSpriteObject(), jak uz rikal meta.
-
Tak já už vážně nevím kde je chyba:
var en = Scene.CreateEntity("jmeno");
en.SetSprite("sprites/body.sprite");
en.AttachScript("scripts/body.script");
var sp = en.GetSpriteObject();
Game.Msg("sp = " + sp ); // toto je OK
sp.CurrentFrame = 4;
Game.Msg("sp.name = " + sp.Name); // toto je OK
Game.Msg("sp.curr = " + sp.GurrentFrame); // toto vraci porad [null]
Prirazeni sp.CurrentFrame = 4; proste nefunguje a sprit se mi cely prehraje a skonci na poslednim snimku (na desatem).
-
protoze tam mas sp.GurrentFrame namisto sp.CurrentFrame
jo a jeste zkus zavolat pred nastavenim CurrentFrame sp.Reset();
jen se ujistim, ten sprite funguje? hod sem pro jistotu definici.
-
Už jsem na to přišel - nejdříve jsem provedl sp.Pause() a pak to nastavení framu funguje...
dík za všechny rady
-
Ještě bych se rád zeptal jak je to z uvolnováním paměti při vytváření dynamických entit.
Ve hře generuju entity se sprity, které se pohybují. Když zajedou za kraj obrazovky tak
jsem je zrušil pomocí DeleteEntity(). Hra mi však po vytvoření kolem 200 entit padala.
Když jsem ty entity nerušil, tak to zatím jede. Musím se starat o rušení těch entit? Nebo
při zavření aplikace se zruší?
Dají se nějak projít všechny entity ve scéně aniř bych je ukládal do pole?
dík
-
Entity, vytvorene pres Game.CreateEntity() jsou v pameti az do konce hry, pak se zrusi. Pokud se pouzije Scene.CreateEntity(), tak se zrusi pri zmene sceny.
Prochazet se daji jen staticke entity. Dynamicky vytvorene si budes muset pamatovat v tom poli, obavam se.
Jinak padat by to kazdopadne nemelo. Pokud bys mel nejaky miniprojekt, kde se da to padani nasimulovat, tak bych ho docela rad videl a projel si ho debuggerem..
-
Ukazku z projektu, který padá, jsem ti poslal emailem
-
Diky, mrknu na to.
-
Tak jsem mrknul, a pricina toho padani je, ze entitu pro zobrazeni bodu vytvaris pomoci Scene.CreateEntity(), ale mazes ji pres Game.DeleteEntity(). Bohuzel ackoliv ti tohle WME dovoli udelat, diky vnitrni architekture ma pak bordel v datech, coz vyusti ve spadnuti. Zkusim tam dodelat nejake dukladnejsi ochrany a ty zatim nahrad mazani Scene.DeleteEntity() a melo by to fungovat :)