PDA

Volledige versie bekijken : probleem met timeout


Master SWF
%Europe/Berlin %855 %2007, 21:32
Heey,

Ik zit met een probleem, ik probeer in een presentatieprogrammaatje dat ik aan het schrijven ben een functie in te bouwen dat als je met je muis voor 5 seconden niet beweegt er twee balken verdwijnen (bovenaan en onderaan het scherm, deze geven de titel en het aantal dia's weer). Aangezien flash alleen kan controleren of de muis beweegt en niet of hij niet beweegt, moet je dus gaan werken met wanneer de muis beweegt...

Het probleem zit hem erin dat ik een timeout laat lopen, die een functie uitvoert die die balken laat verdwijnen, tenzij de muis beweegt, dan word de timeout gecleared en opnieuw gestart... Dit lijkt prachtig te werken, maar de balken gaan knipperen na enkele seconden (steeds erger) ... dus ik wil aan jullie vragen of jullie hier een oplossing voor weten.

Hier is mijn actionscript (staat op frame 1)

import mx.transitions.Tween; //importeren van de effecten voor het oplaten komen en verdwijnen van het menu....
import mx.transitions.easing.*;//""

var mouseListener:Object = new Object();
var menuStatus:String = new String();

showMenu(); // voer de functie showMenu uit...

var mouseMoveCheck:Number = setTimeout(hideMenu, 5000);

mouseListener.onMouseMove = function ()
{
clearTimeout(mouseMoveCheck);
keepMenu();
var mouseMoveCheck:Number = setTimeout(hideMenu, 5000);
Mouse.show();
}

function keepMenu()
{
if(_root.menuStatus = "hidden")
{
showMenu();
}
}

function showMenu()
{
new Tween(SlideIndicator_mc, "_alpha", Strong.easeIn, 0, 100, 1, true);
new Tween(titleBar_mc, "_alpha", Strong.easeIn, 0, 100, 1, true);
_root.menuStatus = "shown";
}

function hideMenu()
{
new Tween(SlideIndicator_mc, "_alpha", Strong.easeIn, 100, 0, 1, true);
new Tween(titleBar_mc, "_alpha", Strong.easeIn, 100, 0, 1, true);
_root.menuStatus = "hidden";
Mouse.hide();
}

Mouse.addListener(mouseListener);


In de bijlage zit de .fla (CS3 en Flash 8 versie), om het probleem te verduidelijken...

BernardV
%Europe/Berlin %876 %2007, 22:01
Los van de rest van je code (niet echt bekeken) zie ik sowieso 2 problemen.
- Je maakt de variabele mouseMoveCheck opnieuw aan in de onMouseMove functie, dat wil je niet, want dan is de referentie veranderd. Daar gewoon mouseMoveCheck = setTimeout(..) gebruiken en niet opnieuw var mouseMoveCheck.

- Je gebruikt in je vergelijking in de functie keepMenu 1x een =, 1x = is een toewijzing, 2x = dus == is een vergelijking. if(_root.menuStatus == "hidden") zou het moeten zijn.

Hoop dat je hier iets mee kunt!

Master SWF
%Europe/Berlin %629 %2007, 16:06
Beste BernardV,

Hartelijk bedankt voor de twee opmerkingen, het werkt nu perfect...

Dat van die enkele "=" was een beetje dom, maar dat als ik die variabele mouseMoveCheck opnieuw aanmaakte de referentie was verandert wist ik niet...

Ik neem aan dat het er aan ligt dat die variabele dan in een functie (in dit geval die van onMouseMove) wordt aangemaakt inplaats van op de root?

Nogmaals hartelijk bedankt voor de hulp.

BernardV
%Europe/Berlin %874 %2007, 21:59
Ik neem aan dat het er aan ligt dat die variabele dan in een functie (in dit geval die van onMouseMove) wordt aangemaakt inplaats van op de root?


Bijna ;) Dan wordt de var aangemaakt in de eigenaar van de functie en dat is in dit geval mouseListener.
Klopt wel wat je zegt.. dacht even aan this.varNaam...