2017-07-19 1 views
1

J'essaye d'implémenter une pause/lecture pour une esquisse avec la même touche, par exemple si j'appuie sur p l'esquisse devrait s'arrêter et si j'appuie à nouveau sur p, l'esquisse devrait recommencer. Jusqu'à présent, j'ai utilisé le noLoop()/loop() pour le faire mais avec deux clés différentes (p pour la pause, r pour le début). Cela fonctionne si j'utilise keyPressed() et keyReleased() mais cela signifie que je dois maintenir la touche enfoncée mais cela ne répond pas à ma question. Aussi en mode pause j'ai utilisé redraw() pour une seule étape pendant que noLoop() et fonctionne bien. Voici un code que j'ai essayé à ce jour avec deux clés différentes:Comment faire une pause/jouer une esquisse dans le traitement avec le même bouton?

public void draw(){ 
    background(random(255)); 
} 

public void keyPressed(){ 
    if (key == 'p') 
     noLoop(); 
    if (key == 'r') 
     loop(); 
    if (key == 's') 
     redraw(); 
} 

Et voici le code avec la même clé:

public void draw(){ 
    background(random(255)); 
} 

public void keyPressed(){ 
    if (key == 'p') 
     noLoop(); 
    if (key == 'p') 
     loop(); 
    if (key == 's') 
     redraw(); 
} 

Dans ce cas, quand j'appuie sur la touche, il n » t avoir aucun effet. Et le dernier j'ai essayé est le suivant:

public void draw(){ 
    background(random(255)); 
} 
public void keyPressed(){ 
    if (key == 'p') 
     noLoop(); 
    else 
     loop(); 
    if (key == 's') 
     redraw(); 
} 

Dans ce cas, quand je presse « p » il arrête le dessin mais ne joue pas encore. A cause du 'else', il joue de nouveau quand j'appuie sur une touche quelconque, y compris 's', qui est censée être juste pour un seul pas. Toute aide est plus que bienvenue. Merci!

Répondre

0

Veuillez essayer de poster un MCVE que nous pourrons copier et coller pour fonctionner nous même. Le code que vous avez posté est presque un MCVE, mais veuillez inclure une fonction draw() afin que nous puissions voir exactement la même chose que vous.

est ici simple MCVE qui illustre le problème que vous rencontrez:

void draw() { 
    background(random(255)); 
} 

public void keyPressed() { 

    if (key == 'p') { 
    noLoop(); 
    } 
    if (key == 'p') { 
    loop(); 
    } 
} 

Ce code affiche un fond clignotant au hasard. Si vous appuyez sur la touche P, vous vous attendez à une pause, mais elle continue de clignoter.

Vous devez prendre l'habitude de parcourir votre code pour comprendre exactement ce qu'il fait. Lisez la fonction keyPressed() ligne par ligne et imaginez ce que le code fera lorsque vous appuierez sur la touche P.

La première instruction if vérifie si la clé est P et, comme elle l'est, elle appelle la fonction noLoop(). Ensuite, la deuxième instruction if vérifie si la clé est P et, comme elle l'est, elle appelle la fonction loop(). Cela inverse l'appel à noLoop() que nous venons de faire, ce qui donne l'impression que rien ne se passe. Vous devez suivre l'état de votre esquisse. Dans votre cas, vous devez déterminer si l'esquisse est actuellement en pause. Vous pouvez utiliser une seule variable boolean pour cela. Utilisez ensuite cette variable pour vous assurer que vous faites le bon choix lorsque vous appuyez sur la touche P. Quelque chose comme ceci:

boolean paused = false; 

void draw() { 
    background(random(255)); 
} 

public void keyPressed() { 

    if (key == 'p') { 

    paused = !paused; 

    if (paused) { 
     noLoop(); 
    } else { 
     loop(); 
    } 
    } 
} 
+0

Très apprécié. C'était ma première question ici et je ne connaissais pas MCVE. J'ai édité le post et je pense que c'est la façon dont vous avez suggéré. A propos du code maintenant, il fonctionne exactement comme j'en ai besoin et je garderai à l'esprit votre recommandation de prendre l'habitude de passer à travers le code. –