Albus
%Europe/Berlin %583 %2007, 14:59
Hallo,
K denk er al zo lang over na maar k vind geen oplossing. K ben een navigatiemenu aan t ontwikkelen in AS3. Je hebt 4 knoppen die onder elkaar staan. Wanneer je over een knop gaat met de muis, dan vergroot de lengte van deze knop en dan vergroot de y positie van alle overige knoppen die eronder staan (dit omdat de knop anders door de andere knoppen beweegt).
De height van de knop vergroten is geen probleem, maar nu ben k bezig met het script dat de overige knoppen moet verschuiven.
Probleem: de movieclip 'inActiefVlak' veranderd bij elke onEnterFrame. Als je dit script even in een leeg fla doc plakt, en je beweegt met de muis redelijk snel verticaal over de 4 verschillende knoppen, dan zie je dat ze allemaal naar boven verdwijnen.
Oplossing: k weet dat k hier iets aan KAN doen, maar k weet niet hoe. K dacht aan een array waarin k voor elke knop alle niet actieve knoppen opsla en ze dan telkens uit de array halen.
De movieclip 'vlak' stelt een knop voor.
var kleur:Array = ["0xFFFFFF","0x990000","FF0000","999999"];
var vlak_b:Number = 200;
var vlak_l:Number = 12;
var spatie:Number = 4;
var v:Number = 3;
var eindL:Number = vlak_l * 3;
var w:String = new String();
var iav:Array = new Array();
var e:Number = new Number();
for(var i:Number=0;i<kleur.length;i++) {
var vlak:MovieClip = new MovieClip();
vlak.graphics.beginFill(kleur[i]);
vlak.graphics.lineTo(vlak_b,0);
vlak.graphics.lineTo(vlak_b,vlak_l);
vlak.graphics.lineTo(0,vlak_l);
vlak.graphics.endFill();
addChild(vlak);
vlak.name = "vlak"+i;
vlak.i = i;
vlak.w = w;
vlak.iav = iav;
vlak.y = (vlak_l+spatie)*i;
vlak.alpha = 0.8;
vlak.addEventListener(MouseEvent.MOUSE_OVER,muis_o ver);
vlak.addEventListener(MouseEvent.MOUSE_OUT,muis_ui t);
}
function muis_over(event:MouseEvent):void {
event.target.addEventListener(Event.ENTER_FRAME,en ter_frame);
event.target.w = "+";
}
function muis_uit(event:MouseEvent):void {
event.target.addEventListener(Event.ENTER_FRAME,en ter_frame);
event.target.w = "-";
}
function enter_frame(event:Event):void {
if(event.target.w=="+") {
event.target.height += v;
if(event.target.height>=eindL) {
event.target.height = eindL;
event.target.removeEventListener(Event.ENTER_FRAME ,enter_frame);
}
} else {
event.target.height -= v;
if(event.target.height<=vlak_l) {
event.target.height = vlak_l;
event.target.removeEventListener(Event.ENTER_FRAME ,enter_frame);
}
}
// dit moet nog verbeteren:
for(var j:Number=event.target.i;j<kleur.length;j++) {
var inActiefVlak:MovieClip = getChildByName("vlak"+j) as MovieClip;
event.target.iav.push(inActiefVlak.name);
if(j==kleur.length-1) {
trace(event.target.iav);
}
if(inActiefVlak != event.target) {
if(event.target.w=="+") {
inActiefVlak.y += v;
} else {
inActiefVlak.y -= v;
}
}
}
}
Waarschijnlijk gaat niemand mij helpen vanwege het lange script en de lange uitleg, maar k wou t toch even vragen.
K denk er al zo lang over na maar k vind geen oplossing. K ben een navigatiemenu aan t ontwikkelen in AS3. Je hebt 4 knoppen die onder elkaar staan. Wanneer je over een knop gaat met de muis, dan vergroot de lengte van deze knop en dan vergroot de y positie van alle overige knoppen die eronder staan (dit omdat de knop anders door de andere knoppen beweegt).
De height van de knop vergroten is geen probleem, maar nu ben k bezig met het script dat de overige knoppen moet verschuiven.
Probleem: de movieclip 'inActiefVlak' veranderd bij elke onEnterFrame. Als je dit script even in een leeg fla doc plakt, en je beweegt met de muis redelijk snel verticaal over de 4 verschillende knoppen, dan zie je dat ze allemaal naar boven verdwijnen.
Oplossing: k weet dat k hier iets aan KAN doen, maar k weet niet hoe. K dacht aan een array waarin k voor elke knop alle niet actieve knoppen opsla en ze dan telkens uit de array halen.
De movieclip 'vlak' stelt een knop voor.
var kleur:Array = ["0xFFFFFF","0x990000","FF0000","999999"];
var vlak_b:Number = 200;
var vlak_l:Number = 12;
var spatie:Number = 4;
var v:Number = 3;
var eindL:Number = vlak_l * 3;
var w:String = new String();
var iav:Array = new Array();
var e:Number = new Number();
for(var i:Number=0;i<kleur.length;i++) {
var vlak:MovieClip = new MovieClip();
vlak.graphics.beginFill(kleur[i]);
vlak.graphics.lineTo(vlak_b,0);
vlak.graphics.lineTo(vlak_b,vlak_l);
vlak.graphics.lineTo(0,vlak_l);
vlak.graphics.endFill();
addChild(vlak);
vlak.name = "vlak"+i;
vlak.i = i;
vlak.w = w;
vlak.iav = iav;
vlak.y = (vlak_l+spatie)*i;
vlak.alpha = 0.8;
vlak.addEventListener(MouseEvent.MOUSE_OVER,muis_o ver);
vlak.addEventListener(MouseEvent.MOUSE_OUT,muis_ui t);
}
function muis_over(event:MouseEvent):void {
event.target.addEventListener(Event.ENTER_FRAME,en ter_frame);
event.target.w = "+";
}
function muis_uit(event:MouseEvent):void {
event.target.addEventListener(Event.ENTER_FRAME,en ter_frame);
event.target.w = "-";
}
function enter_frame(event:Event):void {
if(event.target.w=="+") {
event.target.height += v;
if(event.target.height>=eindL) {
event.target.height = eindL;
event.target.removeEventListener(Event.ENTER_FRAME ,enter_frame);
}
} else {
event.target.height -= v;
if(event.target.height<=vlak_l) {
event.target.height = vlak_l;
event.target.removeEventListener(Event.ENTER_FRAME ,enter_frame);
}
}
// dit moet nog verbeteren:
for(var j:Number=event.target.i;j<kleur.length;j++) {
var inActiefVlak:MovieClip = getChildByName("vlak"+j) as MovieClip;
event.target.iav.push(inActiefVlak.name);
if(j==kleur.length-1) {
trace(event.target.iav);
}
if(inActiefVlak != event.target) {
if(event.target.w=="+") {
inActiefVlak.y += v;
} else {
inActiefVlak.y -= v;
}
}
}
}
Waarschijnlijk gaat niemand mij helpen vanwege het lange script en de lange uitleg, maar k wou t toch even vragen.