Archief - FLASH: Argumenten meegeven bij functie bij onPress

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

iamdesign

Legacy Member
Hoe geef je precies argumenten mee in dit geval:

Code:
about.onPress = dragIt

function dragIt()
{
	...
}

ik dacht dat je het gewoon via

Code:
about.onPress = dragIt("about")

function dragIt(obj)
{
	...
}

kon doen, maar zo te zien wil dit niet lukken :s

iemand een idee?
en ik zou het liefst zo doen en niet via about.onPress = function() aangzien ik de code wil recycleren voor nog enkele andere knoppe, maar aan de hand van dat argument wil ik dan via een switch/case bij de verschillende knoppen een andere tekst tone

Breen

Legacy Member
Code:
about.pressText = "about"
//
about.onPress = function() 
{
     textField.text = this.pressText
}

iamdesign

Legacy Member
thnx!!!

ik kreeg net op flashfocus ook het vlg antwoord:

Dan moet je Proxy gebruiken (Of een aangepaste delegate classe):
Code:
class Proxy {
        
        public static function create(target:Object, func:Function):Function {
                var parameters:Array = new Array();
                for(var i:Number = 2; i < arguments.length; i++) {
                        parameters[i-2] = arguments[i];
                }
                
                var proxy:Function = function():Void {
                        var actualParameters:Array = arguments.concat(parameters);
                        func.apply(target, actualParameters);
                }
                
                return proxy;
        }
}

En dan:

Code:
import Proxy; myButton.onRelease = Proxy.create(this, doSomething, "test"); function doSomething(arg) { trace(arg); }

Breen

Legacy Member
Mjah, die "delegate" classes zijn zowat het huidige bussword, waarom het zo moeilijk maken?

LunchBox

Legacy Member
agree, bovendien doet breen het nog via "about.onPress = function(){}" want herschreven krijg je nog dit:

Code:
about.onPress = function(){dragIt("about");}
function dragIt(label:String){
	trace(label);
}

ik snap niet dat je dit niet als "herbruikbare code" ziet trouwens, want het uitvoerbare blijft toch in een aparte functie staan. en dit in de veronderstelling dat de tekst die je meegeeft niet steeds dezelfde is als de naam van de knop want dan heeft het weinig zin die nog'ns expliciet zo mee te geven, dan kan het evengoed via een array die je buttons aanmaakt.

Breen

Legacy Member
Lunchbox,

Je hebt gelijk dat dit niet echt optimaal is, doch is het een grote stap van gewoon elke functie apart te definiëren met dan enkel de tekst die wordt getoond anders.

Ik vind dat iamdesign toch op de goede weg is. We zijn allemaal op die plaats geweest, toch?

iamdesign

Legacy Member
LunchBox zei:
agree, bovendien doet breen het nog via "about.onPress = function(){}" want herschreven krijg je nog dit:

Code:
about.onPress = function(){dragIt("about");}
function dragIt(label:String){
	trace(label);
}

ik snap niet dat je dit niet als "herbruikbare code" ziet trouwens, want het uitvoerbare blijft toch in een aparte functie staan. en dit in de veronderstelling dat de tekst die je meegeeft niet steeds dezelfde is als de naam van de knop want dan heeft het weinig zin die nog'ns expliciet zo mee te geven, dan kan het evengoed via een array die je buttons aanmaakt.


Yip idd dit is herbruikbare code (ik heb toch nerges anders iets anders gezegd dat het niet zo is :))

maar ik heb een vreemd iets ermee aan de hand

ik had het gistrenavond ook nog zo proberen op te lossen

Code:
about.onPress = function(){dragIt("about")};

maar dan voerde hij die complete code van dragIt uit over de 3 balken dat ik heb aangemaakt, terwijl ik veronderstel dat als dragIt wordt uitgevoerd door about...ik "this" mag gebruiken :| mss dat je hier een verklaring voor hebt)

nu zie ik wel dat die Proxy klasse van flashfocus wel werkt bij mij, maar het probleem is dat ik niet graag iets gebruik waar ik de code niet van versta (in dit geval die Proxy klasse).

ik post hier anders even de fla...dan kun je als je wil eens kijke naar mijn code en jouw methode probere. want ik vind het raar dat die ipv 1 balk direct alle balkjes verplaatst :-/

FLA: www.iamdesign.be/flashfocus/index.fla

ik ben de laatste tijd erg veel bezig met AS, maar mits ik het allemaal zelf probeer uit te vissen hoe zaken werken, zou het wel leuk zijn om het eens van wat meer ervaren mense te horen, mss ben ik compleet fout bezig of is mijn manier van denken niet juist :)

thnx alvast!

LunchBox

Legacy Member
en ik zou het liefst zo doen en niet via about.onPress = function() aangzien ik de code wil recycleren voor nog enkele andere knoppe
waarmee je dus suggereert dat het gebruik van =function(){} dat niet is.

enfin, even de fla bekijken maar.. en daaruit blijken volgende zaken:

- je maakt nu de 3 knoppen afzonderlijk, terwijl je gewoon "about, work, contact" in een array kan steken en de buttonreeks ahv die array kan opbouwen. (meer uitleg indien je dit wenst)
- de tweenit functie heeft weinig nut aangezien je de parameters toch maar letterlijk doorgeeft (op de extra "var tweentje:Tween = new Tween();" per keer dat je'm gebruikt zal het niet aankomen)
- wanneer je de tween klasse gebruikt worden onEnterFrames eigenlijk overbodig, als je de tekst pas wil aanpassen nadat de tween teneinde is kan je gebruik maken van z'n ingebouwde event handler: Tween.onMotionFinished

iamdesign

Legacy Member
Ow ja sorry :$ ik had me daar dan even vergist :)

ja ik zou graag wat info krijge over die array voor buttons als het mogelijk zou zijn :$

wel die onEnterFrames gebruik ik voor het vierkant uit te rekken aan de hand van de positie van de muis...is er hier mss een betere methode voor, ne maat zei me ooit dat dit de manier was ... mss dat jij een betere kent (liefst, want ik werk nie graag met onEnterFrame :p)

LunchBox

Legacy Member
duurt me superlang om je file te compilen iedere keer maar soit:
Code:
root=this;
var menuTextObjArr:Object=[
		{name:"about",color:0xffc600},
		{name:"work",color:0x9cff3c},
		{name:"contact",color:0x009cff}
];
for(i=0;i<menuTextObjArr.length;i++){
	MenuTextMC=root.attachMovie("mov_balk",menuTextObjArr[i].name,i);
	MenuTextMC.id=i;
	MenuTextMC.label=menuTextObjArr[i].name;
	MenuTextMC._y=i*15;
	MenuTextMC.label_txt.text=MenuTextMC.label;
	zetKleurTint(MenuTextMC.inner_mc,menuTextObjArr[i].color);
	//-# ACTIONS #-//
	MenuTextMC.onPress=function(){dragIt(this);}
}
function dragIt(mc:MovieClip){
	// sluit de menu's die nog openstaan
	// onMotionFinished van de laatste "closeTween" ga je het item dat aangeklikt is openen
	var yPos:Tween=new Tween(mc,"_y",Back.easeOut,mc._y,100,5,false);
}

This should get you started. (heb wel je "tekst" TextField even renamed naar label_txt.. en de "inner" MovieClip naar inner_mc die suffixes lezen gemakkelijker)

Ivm de onEnterFrame, om die op uw mouse position te zetten is'm wel nodig.. (tenzij je updateAfterEvent op'n listener zet) maar wat wil je precies doen? onPress springt je venster open, maar dan trigger je al bijna automatisch een onRelease aangezien mensen niet meer juist zitten.. en dus ga je terug het venster dichtklappen. Lijkt me onlogisch. Ik vermoed dat je gewoon accordeon-menu behaviour wil nabootsen, die code is wel online terug te vinden.

Kzou nog verder testen op je file, maar per keer ik preview ben'k'n halve minuut kwijt aan compilen (ook als ik je imports quote) dus die file gaat mooi dicht.

iamdesign

Legacy Member
oww thnx alot,

ja ok ik versta het, tis idd aangenamer om het zo te programmere :p ik dacht altijd van "oh zoveel verschil maakt da nu niet om het via een for loopke te doen"
mss toch es overwegen om "luier" te worden ;)

Wel raar dat je steeds 30sec verliest :-/

en wat bedoel je hier mee... ik kan niet goed uit je woorden komen

onPress springt je venster open, maar dan trigger je al bijna automatisch een onRelease aangezien mensen niet meer juist zitten

ik heb de code ondertussen wel al wat aangepast dat men het kader nu tot 90% (ipv 10%) van het venster moeten trekken eer de code de controle overneemt :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan