Autor Zpráva
joozef
Profil
Nazdar, mám funkciu, ktoré má za úlohu vytvárať dynamické textové polia v ktorých sa zobrazujú jednotlivé prvky poľa. Problém je ten, že prvky toho poľa sa menia a tým pádom by sa mali zmeniť aj hodnoty v tých dyn. textových poliach. Tie hodnoty sa síce zmenia aj v tých dyn. txt poliach ale zmena je len taká, že sa prekreslí predchádzajúca hodnota a vlastne text sa len vrství. Potreboval by som urobiť nejaký refresh- clear screen alebo niečo podobné. tu je tá funkcia:
function UsedColorsDisplay(inputArray:Array){
var coordinateX:Number;
var coordinateY:Number

coordinateX=600;
coordinateY=400;
	for(i=0; i<inputArray.length; i++){
		var cName:TextField = new TextField();
		cName.name="c"+i;
		cName.text=inputArray[i];
		cName.x= coordinateX;
		cName.y= coordinateY;
		coordinateY+=cName.textHeight;
		addChild(cName);	
	}
}
Johnik
Profil
Tak když tomu dávate name, tak proč k tomu přes něj nepřistoupíte:

c1.text = "novaHodnota";


Je samozřejmě blbost ho znovu vytvářet.
joozef
Profil
Ono je to tak, že mám na scéne viacero MC ktorým sa dá meniť farba. Pomocou tej fc UsedColorsDisplay chcem zobrazovať aké farby sú použité na tých MC. Tie farby mám uložené v poli, ktoré predávam parametrom inputArray(to pole je už zbavené duplicitných hodnôt pretože napr. 2 MC môžu mať rovnakú farbu). Dľžka toho poľa sa mení podľa toho koľko farieb je aktuálne použitých - ak je použitá napríklad jedna farba na všetky MC tak v poli bude jeden prvok, ak viac tak......preto vždy potrebujem vytvoriť nové dynamické txt pole ku každému prvku v tom poli a potom v ňom vlastne zobraziť tú farbu. Tá funkcia UsedColorsDisplay sa volá z inej.... nejak takto to vyzerá
function paint(evt:MouseEvent){
	//....kod na zafarbenie mc na ktory sa kliklo...
	//...nacitanie aktualnej farby do pola.....atd
	
	UsedColorsDisplay(tempArray)		
}

Možno to nie je najvhodnejšie riešenie....ale iné ma nenapadá....dík za radu
joozef
Profil
už som to vyriešil, prepísal som tú funkciu, použil som namiesto vytvárania vždy nového txt poľa len pripisovanie reťazca pomocou appendText.
joozef
Profil
Nechcem tu "spamovať" tak sa opýtam v tejto téme. Dá sa nejako zmeniť výplň MovieClipu, ale teraz nemyslím priamo zmeniť farbu, ale povedzme ako výplň použiť iný MovieClip? Niečo v takmto zmysle len namiesto zmeny alpha by tam bola použitá výpľn iného MC:
function over(evt:MouseEvent):void {
	evt.target.alpha=0.7;
} 

function out(evt:MouseEvent):void {
	evt.target.alpha=1.0;
} 
COBIS
Profil *
Pokud ti jde o nejaky ctverec tak ho nemusis menit ale staci vyuzit to, ze muzes pomoci AS3 kreslit zakladni tvary.

var shapeArray:Array = new Array();
function vlozShape():void {
   var sh:Shape = new Shape();
   sh.graphics.beginFill(0x000000);
   sh.graphics.drawRect(0, 0, 40, 40);
   sh.graphics.endFill();			
   stage.addChild(sh);
   shapeArray.push(sh);
}

function nahradShape(target:Shape):void {
   target.graphics.clear();
   target.graphics.beginFill(0xFF0000);
   target.graphics.drawRect(0, 0, 40, 40);
   target.graphics.endFill();
}

// vlozi shape objkt
vlozShape();
// zmeni barvu objektu shape
nahradShape(shapeArray[0]);


Pokud chces klikat tak takhle:
function vlozSprite():void {
   var sp:Sprite = new Sprite();
   sp.graphics.beginFill(0x000000);
   sp.graphics.drawRect(0, 0, 40, 40);
   sp.graphics.endFill();			
   stage.addChild(sp);
   sp.buttonMode = true;
   sp.addEventListener(MouseEvent.CLICK, nahradSprite);
}

function nahradSprite(thisEvent:MouseEvent):void {
   thisEvent.currentTarget.graphics.clear();
   thisEvent.currentTarget.graphics.beginFill(0xFF0000);
   thisEvent.currentTarget.graphics.drawRect(0, 0, 40, 40);
   thisEvent.currentTarget.graphics.endFill();			
}

vlozSprite();
joozef
Profil
COBIS:
Nejde o štvorec ale o nepravidelný tvar, napr. niečo podobné ako je tu Odkaz keď sa s myšou prejde pri vyfarbení niektorej časti dresu tak sa zobrazí vyšrafovaná oblasťm ktorá sa ide vyfarbiť. ale ja tak dík
COBIS
Profil *
Staci aby kazdy tvar byl v objektu MovieClip, Sprite a viditelny. Potom staci volat funkci setColorObjects kde prvni parametr je objekt ktery se ma prebarvit a druhy parametr je barva kterou se ma objekt mit.

function setColorObjects(target:Object, newColor:uint):void {
	var newColorTransform:ColorTransform = target.transform.colorTransform;
	newColorTransform.color = newColor;
	target.transform.colorTransform = newColorTransform;
}

setColorObjects(mc, 0xFF0000);
joozef
Profil
COBIS:
To prefarbenie mi je jasné ale, mne ide o ten "MouseOver" efekt, že sa to prekryje čiarami (vyšrafuje).
COBIS
Profil *
Tak si vytvor MC, na ktery budes klikat a do nej si vloz dva MovieClip (nebo kontajnery, Bitmap). Do spodniho MC, vlozis obrazek (nebo to muze byt rovnou Bitmap objekt) a do vrchniho MC vlozis obrazek ktery ma srafovani (nejspis taky Bitmap objekt). Potom staci menit viditelnost MC nebo Bitmap se srafovanim.

function over(evt:MouseEvent):void {
    evt.currentTarget.getChildAt(1).visible = false;
} 

function out(evt:MouseEvent):void {
    evt.currentTarget.getChildAt(1).visible = true;
}
joozef
Profil
COBIS:
díky, sorry že stále otravujem ale nefunguje to , spravil som jednoduchý príklad Odkaz ale Error #2006: The supplied index is out of bounds.
COBIS
Profil *
Omlovam se predpokladal jsem, ze Bitmapy budes importovat z konhovny jako objekt BitmapData a pak je vlozis do objektu Bitmap a nasledne do MovieClipu (objekt), pomoci ActonScriptu. Takze obrazek normal.png musis vlozit do MovieClipu staci kliknout na obrazek a zmacknout F8 to same i obrazku sraf.png. Potom kazdy MC v objekt pojmenuj (sb1, sb2). A staci nahradit target za currentTarget. Ma to neco spolecneho s probublavanim a s tim jaky objekt zachytava udalosti. Jo a pokud pises script na casovou osu ve Flashi tak nemusis importovat tridy, ktere jsou v balicku flash a tridy nejvissi urovne.

function paint(evt:MouseEvent):void {
	var newColorTransform:ColorTransform = evt.target.transform.colorTransform;
	newColorTransform.color = 0xFFFF00;
	evt.target.transform.colorTransform = newColorTransform;
}
objekt.sb2.visible = false;
objekt.addEventListener(MouseEvent.CLICK, paint);
objekt.addEventListener(MouseEvent.MOUSE_OVER, over);
objekt.addEventListener(MouseEvent.MOUSE_OUT, out);

function over(evt:MouseEvent):void {
	evt.currentTarget.getChildAt(1).visible = true;
} 

function out(evt:MouseEvent):void { 
	evt.currentTarget.getChildAt(1).visible = false; 
}
joozef
Profil
COBIS:
dík, už funguje ten MouseOver, ale zase nefunguje prefarbenie, resp. funguje ale divne....ak si ochotný skús sa na to pozrieť Odkaz. Iba tipujem, že to bude asi v tom, že sa prefarbuje ten MC sb2 ktorý vlastne tvorí ten MouseOver ale neprefarbí sa ten sb1. dík
COBIS
Profil *
Pokud kliknes na nejaky objekt tak currentTarget smeruje na kontajneru (nejvyssi) to je "objekt" pokud pouzijes target tak klikasn na nejvyssi v kontajneru to je sb2. Jeste bylo by vhohdne ve sraf.png odstranit modry podklad.

function paint(evt:MouseEvent):void {
    var newColorTransform:ColorTransform = evt.currentTarget.getChildAt(0).transform.colorTransform;
    newColorTransform.color = 0xFFFF00;
    evt.currentTarget.getChildAt(0).transform.colorTransform = newColorTransform;
}

Moderátor Str4wberry: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.
joozef
Profil
COBIS:
Veľké ďakujem, už to ide !

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: