Autor Zpráva
Screed
Profil *
Dobrý den, mám zde problém v souboru Visual.as mám následující kód :
class Visual {

private var vx:Number;
private var vy:Number;
private var dx:Number;
private var dy:Number;
private var mass:Number;
private var visual_mc:MovieClip;
private var depth:Number;
private var name:String;
private var name2:String;
function visual_part(vx:Number,vy:Number,mass:Number,depth:Number) {
_root.createEmptyMovieClip("visual_mc",depth);
var name="arrow" + depth;
var name2="ball" + depth;
visual_mc.attachMovie(name,name,depth);
visual_mc[name]._x=_root.name2._x;
visual_mc[name]._y=_root.name2._y;
dx=_root.name2._x - _xmouse;
dy=_root.name2._y - _ymouse;
_root.visual_mc[name]._rotation = Math.atan2(dy,dx) * 180 / Math.PI;
}
}
spouštím ho ze souboru tímto
var vis:Visual = new Visual();

vis.visual_part(ball3_vx,ball3_vy,ball3_mass,1);

Když chci zjisti
visual_mc[name]._x 
nebo
_root.name2._x;

tak mně to vypíše "undefined".
Prosím porad'te, děkuji.
embee
Profil
a trace(visual_mc[name]) ti vyhodi co? Jestli undefined tak se ti ten MC ani neattachuje (coz bych mozna rekl i tak). Kazdopadne zkus misto prime adresace pouzit reference, je to rozhodne spolehlivejsi (aspon mne se to osvedcilo). Takze misto

visual_mc.attachMovie(name,name,depth);

zkus dat

var ref:MovieClip = visual_mc.attachMovie(name,name,depth);

a pak se odkazuj jako

ref._x=_root.name2._x;

Netusim nakolik je toto reseni vhodne, ale myslim, ze by to mohlo zafungovat.

embee
XXX
Profil
embee
<OT>Nemusis se podepisovat, my prece vidime, ze je to od tebe ;) :))))</OT>
embee
Profil
XXX
<OT>ja vim ze vite, jenom to poatri k tradici podpisu pod mym starym nickem... a vubec neprud jako, porad jsme nebyli na tom pifku :D</OT>
Screed
Profil *
Děkuji za pomoc, vyřešil jsem to pomocí _root.visual_mc.attachMovie(name,name,depth);
Screed
Profil *
Bohužel tu ještě přetrvává probém s _root.name2._x nepomáhá ani reference pomocí ref. Vypisuje pořád undefined.
Screed
Profil *
Asi se pomoci _root.name2._x odkazuju na String ne na MovieClip. Potreboval bych to nejak zmenit.
embee
Profil
Screed
ja jsem totiz uplnej mimon. Samozrejme ze ti to dava undefined, protoze kdyz das do funkce:

var ref=.....

tak tato promenna je lokalni a bude existovat jen uvnitr funkce. Musis promennou deklarovat mimo funkci (tam kde mas ostatni promenne) a pak ji priradit hodnotu. Pokud ti to ani takhle nefunguje, tak mas urcite spatne attachMovie, protoze pokud udelas:

ref = this.attachMovie....
trace(ref)

tak ti pri attachovani klipu na 100% musi vytracovat movie clip.
Screed
Profil *
embee


class Visual {

private var vx:Number;
private var vy:Number;
private var dx:Number;
private var dy:Number;
private var mass:Number;
private var visual_mc:MovieClip;
private var ref:MovieClip;
private var depth:Number;
private var name:String;
function visual_part(vx:Number,vy:Number,mass:Number,depth:Number) {
_root.createEmptyMovieClip("visual_mc",depth);
var name="arrow" + depth;
var ref = eval("ball" + depth);
_root.visual_mc.attachMovie(name,name,depth);
_root.visual_mc[name]._x= ref._x;
_root.visual_mc[name]._y= ref._y;
dx= ref._x - _xmouse;
dy= ref._y - _ymouse;
_root.visual_mc[name]._rotation = Math.atan2(dy,dx) * 180 / Math.PI;
}
}


embee, děkuji za spolupráci :) Sice pořád nechápu, proč _root.ref._x vrací undefinide a proč ref._x funguje.
embee
Profil
var name="arrow" + depth;
var ref = eval("ball" + depth);

- zkus vypustit var. Nechapu osobne proc ho tam mas, kdyz uz obe promenne mas deklarovane mimo funnkci. Tim slovickem var uvnitr funkce prepises assignment a s tech promennych se stanou opet lokalni. Rekl bych ze prave kvuli tomu ti nefunguje _root, ale to neni na skodu, ptze _root je pekna prasarna. Ja osobne to nepouzivam radsi vubec a ani se to vseobecne nedoporucuje.
Screed
Profil *
Čím bych se měl tedy odkazovat když né pomocí _root. ?
embee
Profil
Screed
bud pouzij this. a nebo nic... porad lepsi nez root, ptze to dela borcus kdyz nacitas externe.. no ono to dela borcus skoro porad, melo by se to pouzivat zcela vyjimecne
Screed
Profil *
embee
Byl by jsi tak hodnej a prepsal mi ten muj kod pomoci this. nebo aspon nejakou cast, protoze kdyz jsem pouzil this. tak mne to hodilo chybu. děkuji :-)
embee
Profil
Screed
jakou ti to hodilo chybu?
Screed
Profil *
embee
Zadnou chybu mne to nehodilo, funguje to v poradku, jen bych chtel vedet, jak bych se mohl zbavit toho _root pomoci this.
embee
Profil
Screed
"...protoze kdyz jsem pouzil this. tak mne to hodilo chybu..."

- tohle me zajima ;)
Screed
Profil *
aha.. :D ..There is no method with the name 'createEmptyMovieClip'.
Screed
Profil *
this.createEmptyMovieClip("visual_mc",depth);
embee
Profil
zkus prepsat class Visual na class Visual extends MovieClip

- doslo mi ze tak, jak to mas napsane, to this nemuze fungovat. Jednoduse proto, protoze this. oznacuje instanci tridy a ne casovou osu, tudiz volas neexostujici metodu. Tim, ze tridu vytvoris rozsirenim MovieClipu, tak tato trida zdedi vsechny metody tridy MovieClip, tudiz i createEmptyMovieClip. Nicmene problem je v tom, ze se takto vytvorene MC budou pripojene k teto tride, tudiz kdyz smazes jeji instanci, MC se smazou taky.

Akorat stejne nevim jestli to bude fungovat jako celek, ale minimalne by to melo odstranit tento problem.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0