[AS3] Ik wil geen events in de wachtrij.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sando
  • Registratie: Januari 2007
  • Niet online

Sando

Sandoichi

Topicstarter
Ik heb een Flash app met een aantal knoppen voor een (trage) Android 2.2 app.

Als er op een knop wordt gedrukt, moeten de andere knoppen 'doof' zijn (niets doen) totdat het weer mag.

Het eerste wat ik dan ook doe:
code:
1
2
3
4
5
6
7
8
        // Button clicked
        private function fireButton(e){

            // Foolproof! Disable buttons
            if (!busy) {
                busy = true;

                // ...

en als alle geweld klaar is worden de knoppen na enkele tellen weer beschikbaar:
code:
1
2
3
4
5
6
7
8
9
10
11
            // ...
            myTimer.addEventListener(TimerEvent.TIMER, unBusy);
            myTimer.start();
        }
        
        // Enable buttons again - delayed to allow full stop
        private function unBusy(e:TimerEvent) {
            myTimer.stop();
            // ...
            busy = false;
        }

Het relevante regeltje is natuurlijk busy = boolean x2, maar enige context leek me gewenst.

Het werkt op de PC allemaal prima. Kan klikken wat je wilt, de knoppen werken pas weer als het de bedoeling is. Hieronder het probleem, met in bold de TL;DR versie.

Ook op een moderne tablet, je kan 'touchen' als een dolle, hij doet pas weer iets als de vorige actie is voltooid en busy == false.

Op een trage tablet echter, als je constant overal op blijft tikken, dan vormt zich een soort wachtrij van touch-events lijkt het wel. Je kunt dan gaan zitten en aanzien hoe het lijkt alsof je 5 keer achter elkaar op een knop drukt en telkens netjes wacht tot je op de volgende kunt drukken.

Ik kan de boolean die de doofheid bepaalt (busy) niet sneller aanpassen dan meteen na het event, dus er is een ander probleem. Het valt me op dat tussen het aanraken van een knop, en het daadwerkelijk ingedrukt worden van de knop, er op de oude tablet een delay is van wel 300 ms oid. Wellicht dat in deze periode van 'nadenken' de events gechained worden en je een soort wachtrij krijgt.

Is er een manier om dit te voorkomen? Effectief zou ik dus willen dat bij een touch-event expliciet alle andere touch-events worden genegeerd, totdat er weer 'toestemming' is. Maar andere events zoals Timer moeten wel door kunnen gaan.

[ Voor 3% gewijzigd door Sando op 07-03-2012 18:23 ]

🇪🇺 Buy from EU (GoT)


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
  1. Efficientere code schrijven en minder gedetailleerde graphics gebruiken, of
  2. geen Flash gebruiken; want het is en blijft gewoon vreselijk traag op de wat oudere devices
Je hebt weinig andere keuze, denk ik. Wanneer de gemiddelde gebruiker met een app zou moeten werken die bij elk beetje interactie één-derde seconde lijkt te 'hangen', dan gaat die app meteen er uit gegooid worden. Dat kan iedereen hopelijk toch wel op z'n droge klompen aanvoelen...

[ Voor 15% gewijzigd door R4gnax op 07-03-2012 19:22 ]