Programmer avec le langage Linotte
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Programmer avec le langage LinotteConnexion

Besoin d'un conseil sur la programmation en Linotte ?

Le Deal du moment : -29%
PC portable – MEDION 15,6″ FHD Intel i7 ...
Voir le deal
499.99 €

Clavier 0.5

power_settings_newSe connecter pour répondre
3 participants

descriptionClavier 0.5 EmptyClavier 0.5

more_horiz
Ce greffon apporte une nouvelle façon de gérer les touches du clavier.
De plus, il permet de réagir en fonction de la molette de la souris.

Voici un exemple :

[php]
Clavier :

Grands rôles :
centre :: cercle, x vaut 311, y vaut 285, couleur vaut "rouge", plein vaut "oui", rayon vaut 50

Principal :
Actions :
~greffon 1 clavier 0.5 "http://abaque.googlecode.com/files/Clavier.zgl"
Efface la toile
Projette centre
va vers boucle

Boucle :
Rôles :
clavier :: clavier
Actions :
évoque clavier.commencer()
évoque clavier.enregistremolettehaut("analyse haut")
évoque clavier.enregistremolettebas("analyse bas")
tant que vrai, lis
attends 100 millisecondes
parcours afficher avec clavier.touches()
ferme

Afficher :
Rôles :
*liste :: casier de nombre
§msg:: texte vide
Actions :
efface le tableau
si liste est non vide alors lis
pour chaque liste, lis
ajoute joker + ";
" dans msg
ferme
affiche msg
ferme
reviens

Analyse haut :
Actions :
déplace centre vers le haut de 1
rayon@centre vaut rayon@centre + 1
affiche "vers le haut !"
reviens

Analyse bas :
Actions :
déplace centre vers le bas de 1
rayon@centre vaut rayon@centre - 1
affiche "vers le bas !"
reviens
[/php]

Le greffon est téléchargeable ici :
http://abaque.googlecode.com/files/Clavier.zgl

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Excellent, merci !

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
A l'utilisation de ce greffon, quand notre programme plante, il faudrait que la boucle du clavier se stoppe.
Car quand mon programme plante alors que j'utilise ce greffon, cela ralenti énormément l'atelier.
Entre chaque plantage je suis obligé de redémarrer l'atelier.

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
ok, je regarde çà !

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
http://grammaire.reverso.net/2_1_11_ca_ca_sa.shtml

<img src=" title="Big Grin" />

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
J'ai corrigé le bogue que tu as remonté.
Mais je ne peux vérifier.

Si tu passes par le manageur des greffons, tu devrais voir une mise à jour du greffon clavier. Tu l'installes et tu redémarres l'Atelier.

"ça" fonctionne mieux ?

cpc

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Bonjour,
j'ai mis à jour le greffon via le manageur x)
A l'utilisation du greffon, quand mon programme plante, l'utilisation de la molette ralenti énormément l'atelier.

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Ok, en re-regardant mon code source... je me suis aperçu que j'avais pas vu le bon problème...
Je corrige ça tout de suite !

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Peux-tu le remettre à jour le greffon Clavier ?

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
L'atelier ne ralenti plus quand mon programme plante x)
Mais si j'arrête mon programme en cliquant sur Stop, l'utilisation de la molette ralenti l'atelier.

Mon code est peut-être en cause dans ce problème.
Car je n'arrive vraiment pas à utiliser le greffon clavier.
Il faut que je relance la boucle du clavier après avoir appuyé sur une touche.
Voici en gros ce que fait mon code :
[php]
Clavier :
Grands Rôles :
msg:: texte

Autre :
Rôles :
Actions :
Affiche "test"
Va vers Afficher

Afficher :
Rôles :
Actions :
affiche msg
va vers Boucle

Boucle :
Rôles :
clavier :: clavier
Souffleurs :
Actions :
évoque clavier.commencer()
tant que vrai, lis
attends 100 millisecondes
parcours Gérer avec clavier.touches()
ferme

Gérer :
Rôles :
*liste :: casier de nombre
Actions :
si liste est non vide alors lis
pour chaque liste, lis
ajoute joker + ";
" dans msg
Va vers Autre
ferme
ferme
reviens
[/php]

Avec ma méthode, plus j'appuie sur une touche et plus mon programme ralenti.
Je suppose qu'il manque ceci quelque part :
[php]
évoque clavier.stop()
[/php]

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
[s]Arrgggh ! Je viens de reproduire le problème de lenteur.....[/s]

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Le problème de lenteur est dû à une boucle infinie qui bloque l'Atelier.

Le scénario du livre est le suivant :

1 - On commence par le paragraphe Autre, puis Afficher, puis Boucle.
2 - Boucle, saute dans le paragraphe Gérer
3 - Mais Gérer va vers le paragraphe Autre, qui est le paragraphe de lancement du livre !
4 - Ainsi, on retourne vers la point 1.

<img src=" title="Idea" />La boucle infinie commence !!

Je ne recommande pas l'utilisation du verbe "Aller" mais plutôt l'utilisation du verbe parcourir... associé à verbe retourner...

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Mais... il y a bien un problème dans le greffon Clavier... corrigé....
Tu peux mettre à jour le greffon.

bonne programmation !

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Voici comment j'ai modifié mon code :
[php]
Sauvegarde_automatique :
Rôles :
§ pipette::pipette
§ couleur est un texte
§ numéro_tile est un nombre
§ c :: conduit
§ ligne <
- c.retourchariot()
§ i est un nombre
§ j est un nombre
Actions :
pos_x_fenêtre_scrolling = x de fenêtre_scrolling
pos_y_fenêtre_scrolling = y de fenêtre_scrolling

Si scrolling_en_cours == faux alors lis
projette carte_monde & fenêtre_scrolling
ferme

évoque c.enregistrer("K:\Avatar\Sauvegarde.txt")

Pour i de (pos_x_fenêtre_scrolling + 1) à (pos_x_fenêtre_scrolling + largeur_fenêtre_scrolling - 2), lis
Pour j de (pos_y_fenêtre_scrolling + 1) à (pos_y_fenêtre_scrolling + hauteur_fenêtre_scrolling - 2), lis

couleur = pipette.retournecouleur(i, j)

Si couleur == "255 255 255" alors lis
numéro_tile = 6
évoque c.écrire(""+ numéro_tile)
ferme
Sinon si couleur == "0 0 0" alors lis
numéro_tile = 4
évoque c.écrire(""+ numéro_tile)
ferme
Sinon lis
numéro_tile = 0
évoque c.écrire(""+ numéro_tile)
ferme
ferme
évoque c.écrire(ligne)
ferme

évoque c.fermer()

Si scrolling_en_cours == faux alors va vers Lecture_automatique
Sinon reviens

Lecture_automatique :
Rôles :
§ x_case est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (largeur de fond - x de carte_monde) - ((largeur de fenêtre_scrolling - 2) * largeur_case_quadrillage_tileset))/2) + largeur de bordure_gauche
§ y_case est un nombre <
- (hauteur de fond - ((hauteur de fenêtre_scrolling - 2) * hauteur_case_quadrillage_tileset))/2
§ c :: conduit
§ sauvegarde_tile est un texte
§ numéro_tile est un nombre
§ i est un nombre
§ j est un nombre
Actions :
évoque c.ouvrir("K:\Avatar\Sauvegarde.txt")

Pour i de (pos_x_fenêtre_scrolling + 1) à (pos_x_fenêtre_scrolling + largeur_fenêtre_scrolling - 2), lis
Pour j de (pos_y_fenêtre_scrolling + 1) à (pos_y_fenêtre_scrolling + hauteur_fenêtre_scrolling - 2), lis

sauvegarde_tile vaut c.nlire(1)
Tu convertis sauvegarde_tile en numéro_tile

Parcours Générer_quadrillage_automatique avec numéro_tile, x_case, y_case
Observe Générer_quadrillage_automatique

y_case = y_case + hauteur_case_quadrillage_tileset
ferme
x_case = x_case + largeur_case_quadrillage_tileset
y_case = (hauteur de fond - ((hauteur de fenêtre_scrolling - 2) * hauteur_case_quadrillage_tileset))/2

sauvegarde_tile vaut c.nlire(2)
ferme

évoque c.fermer()

Si scrolling_en_cours == faux alors va vers Attente_clavier2
Sinon reviens

Générer_quadrillage_automatique :
Rôles :
*numéro_tile est un nombre
*x_tile est un nombre
*y_tile est un nombre
§ copie_tile est un mongraphique
§ x_tile_init est un nombre
§ y_tile_init est un nombre
index_4 est un nombre
Actions :
ajoute copie_tile dans copie_casier_tiles
image de (copie_casier_tiles{index_4}) = image de (casier_tiles{numéro_tile})
dx@(copie_casier_tiles{index_4}) vaut dx de (casier_tiles{numéro_tile})
dy@(copie_casier_tiles{index_4}) vaut dy de (casier_tiles{numéro_tile})
largeur@(copie_casier_tiles{index_4}) vaut largeur_case_quadrillage_tileset
hauteur@(copie_casier_tiles{index_4}) vaut hauteur_case_quadrillage_tileset
x_tile_init = x de (casier_tiles{numéro_tile}) + 2
y_tile_init = y de (casier_tiles{numéro_tile}) + 2
pos_x_init de (copie_casier_tiles{index_4}) = x_tile_init
pos_y_init de (copie_casier_tiles{index_4}) = y_tile_init
x de (copie_casier_tiles{index_4}) = x_tile
y de (copie_casier_tiles{index_4}) = y_tile
position de (copie_casier_tiles{index_4}) = position de (casier_tiles{numéro_tile})
pos_case de (copie_casier_tiles{index_4}) = index_4
pos_case_init de (copie_casier_tiles{index_4}) = -5
index_case de (copie_casier_tiles{index_4}) = index_4
Projette copie_casier_tiles{index_4}

incrémente index_4
Reviens

Attente_clavier2 :
Rôles :
clavier :: clavier
Actions :
évoque clavier.commencer()
tant que vrai, lis
attends 100 millisecondes
parcours Scrolling avec clavier.touches()
ferme

Scrolling :
Rôles :
*liste :: casier de nombre
§ x_carte_monde est un nombre <
- x de carte_monde
§ y_carte_monde est un nombre <
- y de carte_monde
Actions :
Si liste est non vide alors lis
Pour chaque liste, lis
Si joker == "Droite" alors déplace fenêtre_scrolling vers la droite de 1
Sinon si joker == "Gauche" alors déplace fenêtre_scrolling vers la gauche de 1
Sinon si joker == "Haut" alors déplace fenêtre_scrolling vers le haut de 1
Sinon si joker == "Bas" alors déplace fenêtre_scrolling vers le bas de 1
Sinon reviens

("on fixe des limites")
pos_x_fenêtre_scrolling = x de fenêtre_scrolling
pos_y_fenêtre_scrolling = y de fenêtre_scrolling

Si pos_x_fenêtre_scrolling <
(x_carte_monde - 1) alors x de fenêtre_scrolling = x_carte_monde - 1
Si pos_x_fenêtre_scrolling >
((x_carte_monde - 1 + largeur_carte_monde) - largeur_fenêtre_scrolling) alors x de fenêtre_scrolling = (x_carte_monde - 1 + largeur_carte_monde) - largeur_fenêtre_scrolling
Si pos_y_fenêtre_scrolling <
(y_carte_monde - 1) alors y de fenêtre_scrolling = y_carte_monde - 1
Si pos_y_fenêtre_scrolling >
((y_carte_monde - 1 + hauteur_carte_monde) - hauteur_fenêtre_scrolling) alors y de fenêtre_scrolling = (y_carte_monde - 1 + hauteur_carte_monde) - hauteur_fenêtre_scrolling

scrolling_en_cours = vrai

Attends 30 millisecondes
Parcours Sauvegarde_automatique
Parcours Lecture_automatique
ferme
ferme
Reviens
[/php]

Le problème reste le même : plus j'utilise le clavier, plus mon programme est ralenti.

J'ai mis à jour le greffon et l'utilisation de la molette ne ralenti plus l'atelier.
Par contre, l'atelier subit quand même des ralentissements quand je stoppe mon programme.

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
J'ai modifié mon code pour utiliser clavier.stop() :
[php]
Sauvegarde_automatique :
Rôles :
§ pipette::pipette
§ couleur est un texte
§ numéro_tile_sauv est un nombre
§ c :: conduit
§ ligne <
- c.retourchariot()
§ i est un nombre
§ j est un nombre
Actions :
pos_x_fenêtre_scrolling = x de fenêtre_scrolling
pos_y_fenêtre_scrolling = y de fenêtre_scrolling

Si scrolling_en_cours == faux alors lis
projette carte_monde & fenêtre_scrolling
ferme

évoque c.enregistrer("K:\Avatar\Sauvegarde.txt")

("ici i et j correspondent aux nombre de cases en largeur et en hauteur du quadrillage, en fonction de la taille de la fenêtre de scrolling, moins sa bordure (-2)")
Pour i de (pos_x_fenêtre_scrolling + 1) à (pos_x_fenêtre_scrolling + largeur_fenêtre_scrolling - 2), lis
Pour j de (pos_y_fenêtre_scrolling + 1) à (pos_y_fenêtre_scrolling + hauteur_fenêtre_scrolling - 2), lis

("ici i et j correspondent à la position de chaque pixel, en fonction de la position de la fenêtre de scrolling")
couleur = pipette.retournecouleur(i, j)

Si couleur == "255 255 255" alors lis
numéro_tile_sauv = 6
évoque c.écrire(""+ numéro_tile_sauv)
ferme
Sinon si couleur == "0 0 0" alors lis
numéro_tile_sauv = 4
évoque c.écrire(""+ numéro_tile_sauv)
ferme
Sinon lis
numéro_tile_sauv = 0
évoque c.écrire(""+ numéro_tile_sauv)
ferme
ferme
évoque c.écrire(ligne)
ferme

évoque c.fermer()

Va vers Lecture_automatique

Lecture_automatique :
Rôles :
§ x_case est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (largeur de fond - x de carte_monde) - ((largeur de fenêtre_scrolling - 2) * largeur_case_quadrillage_tileset))/2) + largeur de bordure_gauche
§ y_case est un nombre <
- (hauteur de fond - ((hauteur de fenêtre_scrolling - 2) * hauteur_case_quadrillage_tileset))/2
§ c :: conduit
§ sauvegarde_tile est un texte
§ numéro_tile_lecture est un nombre
§ i est un nombre
§ j est un nombre
Actions :
évoque c.ouvrir("K:\Avatar\Sauvegarde.txt")

("ici i et j correspondent aux nombre de cases en largeur et en hauteur du quadrillage, en fonction de la taille de la fenêtre de scrolling, moins sa bordure (-2)")
Pour i de (pos_x_fenêtre_scrolling + 1) à (pos_x_fenêtre_scrolling + largeur_fenêtre_scrolling - 2), lis
Pour j de (pos_y_fenêtre_scrolling + 1) à (pos_y_fenêtre_scrolling + hauteur_fenêtre_scrolling - 2), lis

sauvegarde_tile vaut c.nlire(1)
Tu convertis sauvegarde_tile en numéro_tile_lecture

(" x_case et y_case correspondent aux positions de chaque case du quadrillage, en fonction de la taille de la fenêtre de scrolling, moins sa bordure (-2)")
Parcours Générer_quadrillage_automatique avec numéro_tile_lecture, x_case, y_case
Observe Générer_quadrillage_automatique

y_case = y_case + hauteur_case_quadrillage_tileset
ferme
x_case = x_case + largeur_case_quadrillage_tileset
y_case = (hauteur de fond - ((hauteur de fenêtre_scrolling - 2) * hauteur_case_quadrillage_tileset))/2

("on avance le curseur de 2 caractères pour éviter de lire le retour à la ligne")
sauvegarde_tile vaut c.nlire(2)
ferme

évoque c.fermer()

Va vers Attente_clavier2

Générer_quadrillage_automatique :
Rôles :
*numéro_tile_auto est un nombre
*x_tile est un nombre
*y_tile est un nombre
§ copie_tile est un mongraphique
§ x_tile_init est un nombre
§ y_tile_init est un nombre
index_4 est un nombre
Actions :
ajoute copie_tile dans copie_casier_tiles
image de (copie_casier_tiles{index_4}) = image de (casier_tiles{numéro_tile_auto})
dx@(copie_casier_tiles{index_4}) vaut dx de (casier_tiles{numéro_tile_auto})
dy@(copie_casier_tiles{index_4}) vaut dy de (casier_tiles{numéro_tile_auto})
largeur@(copie_casier_tiles{index_4}) vaut largeur_case_quadrillage_tileset
hauteur@(copie_casier_tiles{index_4}) vaut hauteur_case_quadrillage_tileset
x_tile_init = x de (casier_tiles{numéro_tile_auto}) + 2
y_tile_init = y de (casier_tiles{numéro_tile_auto}) + 2
pos_x_init de (copie_casier_tiles{index_4}) = x_tile_init
pos_y_init de (copie_casier_tiles{index_4}) = y_tile_init
x de (copie_casier_tiles{index_4}) = x_tile
y de (copie_casier_tiles{index_4}) = y_tile
position de (copie_casier_tiles{index_4}) = position de (casier_tiles{numéro_tile_auto})
numéro_case de (copie_casier_tiles{index_4}) = index_4
numéro_case_init de (copie_casier_tiles{index_4}) = -5
index_copie_casier_tiles de (copie_casier_tiles{index_4}) = index_4
Projette copie_casier_tiles{index_4}

incrémente index_4
Reviens

Attente_clavier2 :
Rôles :
clavier :: clavier
§i est un nombre
Actions :
Si scrolling_en_cours == vrai alors lis
évoque clavier.stop()
reviens
ferme
Sinon lis
évoque clavier.commencer()
tant que vrai, lis
attends 0.5 seconde
incrémente i
i !
parcours Scrolling avec clavier.touches()
ferme
ferme

Scrolling :
Rôles :
*liste :: casier de nombre
§ x_carte_monde est un nombre <
- x de carte_monde
§ y_carte_monde est un nombre <
- y de carte_monde
Actions :
Si liste est non vide alors lis
Pour chaque liste, lis
Si joker == "Droite" alors déplace fenêtre_scrolling vers la droite de 1
Sinon si joker == "Gauche" alors déplace fenêtre_scrolling vers la gauche de 1
Sinon si joker == "Haut" alors déplace fenêtre_scrolling vers le haut de 1
Sinon si joker == "Bas" alors déplace fenêtre_scrolling vers le bas de 1
Sinon reviens

("on fixe des limites")
pos_x_fenêtre_scrolling = x de fenêtre_scrolling
pos_y_fenêtre_scrolling = y de fenêtre_scrolling

Si pos_x_fenêtre_scrolling <
(x_carte_monde - 1) alors x de fenêtre_scrolling = x_carte_monde - 1
Si pos_x_fenêtre_scrolling >
((x_carte_monde - 1 + largeur_carte_monde) - largeur_fenêtre_scrolling) alors x de fenêtre_scrolling = (x_carte_monde - 1 + largeur_carte_monde) - largeur_fenêtre_scrolling
Si pos_y_fenêtre_scrolling <
(y_carte_monde - 1) alors y de fenêtre_scrolling = y_carte_monde - 1
Si pos_y_fenêtre_scrolling >
((y_carte_monde - 1 + hauteur_carte_monde) - hauteur_fenêtre_scrolling) alors y de fenêtre_scrolling = (y_carte_monde - 1 + hauteur_carte_monde) - hauteur_fenêtre_scrolling

scrolling_en_cours = vrai
Va vers Attente_clavier2

Attends 30 millisecondes
Va vers Sauvegarde_automatique
ferme
ferme
Sinon reviens
[/php]

L'idée est la suivante :
1/ Je vais dans Sauvegarde_automatique.
2/ Je vais dans Lecture_automatique.
3/ Je vais dans Attente_clavier2 qui enclenche la boucle du clavier.
4/ Je vais dans Scrolling.
Quand on appuie sur une des touches désirées (haut, bas, gauche, droite) on retourne dans Attente_clavier2 pour exécuter clavier.stop()
5/ On peut ensuite retourner à l'étape 1.

Hors, quand on arrive à l'étape 4 et que l'on retourne dans Attente_clavier2 après avoir appuyer sur la bonne touche, clavier.stop() est inefficace.
En effet, la variable "i" contenue dans Attente_clavier2 continue de s'incrémenter.

De plus, si je clique sur le bouton "Stop" de l'atelier et que je relance mon programme, la variable "i" reprendra également son incrémentation !

J'ai également essayé en mettant clavier :: clavier dans les grands rôles.
Le problème persiste : la boucle ne s'arrête pas.

La boucle du clavier ne s'arrête donc qu'en redémarrant l'atelier.

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Intéressant, je vais analyser ça.
Pour info, j'ai construit hier une nouvelle version bêta.
Elle désactive la console d'erreurs systèmes (dans le menu outils) qui semble ralentir l'Atelier.

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Des infos concernant ce problème de boucle ? x)

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Avec cette exemple et la version 0.4 du greffon Clavier, je n'ai plus de ralentissement :

[php]
Clavier :

Principal :
Actions :
~greffon 1 clavier 0.1 "http://abaque.googlecode.com/files/Clavier.zgl"
va vers boucle

Boucle :
Rôles :
clavier :: clavier
Souffleurs :
Actions :
évoque clavier.commencer()
évoque clavier.enregistremolettehaut("analyse haut")
évoque clavier.enregistremolettebas("analyse bas")
tant que vrai, lis
attends 100 millisecondes
parcours afficher avec clavier.touches()
ferme

Afficher :
Rôles :
*liste :: casier de nombre
§msg:: texte vide
Actions :
efface le tableau
si liste est non vide alors lis
pour chaque liste, lis
ajoute joker + ";
" dans msg
ferme
affiche msg
ferme
reviens

Analyse haut :
Actions :
affiche "vers le haut !"
reviens

Analyse bas :
Actions :
affiche "vers le bas !"
reviens
[/php]

descriptionClavier 0.5 EmptyRE: Clavier 0.1

more_horiz
Mon problème est toujours le même.
Voici en gros ce que je veux faire :
1/ j'enregistre des données
2/ je lis les données et les traite
3/ j'active la boucle du clavier
4/ l'utilisateur appuie sur une touche
5/ en fonction de la touche je modifie les données
6/ j'enregistre les nouvelles données
7/ je lis les nouvelles données
8/ je retourne dans la boucle du clavier
ou
je stoppe et relance la boucle du clavier

[php]
Clavier :
Grands rôles :
msg:: texte vide

Sauvegarde :
Rôles :
§ c :: conduit
Actions :
évoque c.enregistrer("K:\Avatar\Sauvegarde.txt")
évoque c.écrire(msg)
évoque c.fermer()
va vers Lecture

Lecture :
Rôles :
§ c :: conduit
§ sauvegarde_tile est un texte
Actions :
évoque c.ouvrir("K:\Avatar\Sauvegarde.txt")
sauvegarde_tile vaut c.lire()
sauvegarde_tile !
évoque c.fermer()

Va vers Boucle

Boucle :
Rôles :
clavier :: clavier
Souffleurs :
Actions :
évoque clavier.commencer()
tant que vrai, lis
attends 100 millisecondes
parcours afficher avec clavier.touches()
ferme

Afficher :
Rôles :
*liste :: casier de nombre
Actions :
si liste est non vide alors lis
pour chaque liste, lis
ajoute joker + ";
" dans msg
Va vers Sauvegarde
ferme
ferme
reviens
[/php]

Le problème avec ce code, c'est que je relance une nouvelle boucle à chaque fois, sans stopper la précédente.
Ce qui finit par ralentir et faire planter le programme.
Comme expliqué dans mes posts précédents, l'utilisation de clavier.stop() est inefficace.
Le seul moyen de stopper la boucle du clavier est de redémarrer l'atelier.

J'ai essayé ceci :

[php]
Clavier :
Grands rôles :
msg:: texte vide
scrolling_en_cours est un drapeau

Sauvegarde :
Rôles :
§ c :: conduit
Actions :
évoque c.enregistrer("K:\Avatar\Sauvegarde.txt")
évoque c.écrire(msg)
évoque c.fermer()

Si scrolling_en_cours == faux alors lis
Va vers Lecture
ferme
Sinon, lis
Reviens
ferme

Lecture :
Rôles :
§ c :: conduit
§ sauvegarde_tile est un texte
Actions :
évoque c.ouvrir("K:\Avatar\Sauvegarde.txt")
sauvegarde_tile vaut c.lire()
sauvegarde_tile !
évoque c.fermer()

Si scrolling_en_cours == faux alors lis
Va vers Boucle
ferme
Sinon, lis
Reviens
ferme

Boucle :
Rôles :
clavier :: clavier
Souffleurs :
Actions :
évoque clavier.commencer()
tant que vrai, lis
attends 100 millisecondes
parcours afficher avec clavier.touches()
ferme

Afficher :
Rôles :
*liste :: casier de nombre
Actions :
si liste est non vide alors lis
pour chaque liste, lis
ajoute joker + ";
" dans msg
scrolling_en_cours = vrai
Parcours Sauvegarde
Parcours Lecture
ferme
ferme
Reviens
[/php]

Le but étant de retourner dans la boucle du clavier, au lieu de la stopper pour la redémarrer.
Même problème, mon programme est de plus en plus lent.

----------------------------------------------------------------------

Edit

En faisant ceci, apparemment ça fonctionne :

[php]
Clavier :
Grands rôles :
msg:: texte vide
scrolling_en_cours est un drapeau

Sauvegarde :
Rôles :
§ c :: conduit
Actions :
évoque c.enregistrer("K:\Avatar\Sauvegarde.txt")
évoque c.écrire(msg)
évoque c.fermer()

scrolling_en_cours = faux
Va vers Lecture

Lecture :
Rôles :
§ c :: conduit
§ sauvegarde_tile est un texte
Actions :
évoque c.ouvrir("K:\Avatar\Sauvegarde.txt")
sauvegarde_tile vaut c.lire()
sauvegarde_tile !
évoque c.fermer()

Va vers Boucle

Boucle :
Rôles :
clavier :: clavier
Souffleurs :
Actions :
évoque clavier.commencer()
tant que scrolling_en_cours == faux, lis
attends 100 millisecondes
parcours afficher avec clavier.touches()
ferme

Afficher :
Rôles :
*liste :: casier de nombre
Actions :
si liste est non vide alors lis
pour chaque liste, lis
ajoute joker + ";
" dans msg
scrolling_en_cours = vrai
Va vers Sauvegarde
ferme
ferme
Reviens
[/php]

Est-ce que exécuter plusieurs fois clavier.commencer() est gênant ?

Mon problème de lenteur dans mon programme serait peut-être dû au greffon pipette, qui de temps en temps efface la toile avant de la ré-afficher.
Le temps entre l'effacement de la toile et son ré-affichage est parfois assez long.

descriptionClavier 0.5 EmptyRE: Clavier 0.5

more_horiz
Mise à jour du greffon Clavier en 0.5.
Maintenant, il ne capte les évènements que sur la toile.
ça devrait améliorer les performances.

descriptionClavier 0.5 EmptyRE: Clavier 0.5

more_horiz
Bonjour Cpc,
d'abord félicitation pour la sortie de la 1.7 x)

Concernant le greffon pour moi le problème réside dans le fait qu'on ne puisse pas stopper la boucle du clavier.

Voici ce que je voudrais faire :
1) L'utilisateur fait une action
2) la boucle du clavier se lance

A partir de là, 2 choix possibles :

Soit :
3) l'utilisateur appuie sur une touche du clavier
4) cela effectue une nouvelle action (par exemple l'appui sur la touche Suppr supprime quelque chose)
5) la boucle du clavier se poursuit

Soit :
3') L'utilisateur n'appuie sur aucune touche et fait une autre action
4') la boucle du clavier se stoppe
5') si l'utilisateur refait l'action 1, alors la boucle du clavier se relance

Or dans mes exemples précédents, je ne parviens, ni à stopper la boucle du clavier, ni à retourner dans la même boucle, mais relance une nouvelle boucle à chaque fois.

Ce qui provoque les ralentissements et finit par planter le programme.

Pourrais-tu mettre un exemple dans lequel on stoppe la boucle du clavier et on la redémarre ensuite ?

descriptionClavier 0.5 EmptyRE: Clavier 0.5

more_horiz
Bonjour Wam,

Ok, j'ai corrigé un bogue avec la version 0.5. Tu peux la télécharger en passant par le manageur de greffons.

Peux-tu tester l'exemple suivant ?
Avec la mollette, tu peux agrandir le rond ou le réduire.
La touche S arrête le greffon clavier.
La touche D permet de le démarrer.

[php]
Clavier :

Grands rôles :
centre :: cercle, x vaut 311, y vaut 285, couleur vaut "rouge", plein vaut "oui", rayon vaut 50

Principal :
Actions :
~greffon 1 clavier 0.5 "http://abaque.googlecode.com/files/Clavier.zgl"
Efface la toile
Projette centre
va vers boucle

Boucle :
Rôles :
clavier :: clavier
Actions :
évoque clavier.commencer()
évoque clavier.enregistremolettehaut("analyse haut")
évoque clavier.enregistremolettebas("analyse bas")
tant que vrai, lis
attends 100 millisecondes
parcours afficher avec clavier.touches() , clavier
si touche == "d" alors évoque clavier.commencer()
ferme

Afficher :
Rôles
*liste :: casier de texte
*clavier :: clavier
§msg:: texte vide
Actions :
efface le tableau
si liste est non vide alors lis
pour chaque liste, lis
si joker == "s" alors lis
évoque clavier.stop()
ferme
ajoute joker + ";
" dans msg
ferme
affiche msg
ferme
reviens

Analyse haut :
Actions :
déplace centre vers le haut de 1
rayon@centre vaut rayon@centre + 1
affiche "vers le haut !"
reviens

Analyse bas :
Actions :
déplace centre vers le bas de 1
rayon@centre vaut rayon@centre - 1
affiche "vers le bas !"
reviens
[/php]

descriptionClavier 0.5 EmptyRE: Clavier 0.5

more_horiz
Cet exemple fonctionne.
Je vais pouvoir l'adapter à mon code, parfait x)

descriptionClavier 0.5 EmptyRE: Clavier 0.5

more_horiz
Parfait ! Et merci pour ta patience, il m'a fallut du temps pour trouver le bogue !

descriptionClavier 0.5 EmptyRE: Clavier 0.5

more_horiz
Je viens de le tester sur mon code et sa semble marcher x)
Dès que l'utilisateur appuie sur une touche désirée, désormais je peux stopper la boucle du clavier.
Une fois que l'action correspondante à la touche est effectuée, je relance la boucle x)

descriptionClavier 0.5 EmptyRe: Clavier 0.5

more_horiz
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
power_settings_newSe connecter pour répondre