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:
en als alle geweld klaar is worden de knoppen na enkele tellen weer beschikbaar:
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.
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)