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 ?


descriptionProbleme de rotation d'une ligne EmptyProbleme de rotation d'une ligne

more_horiz
Bonjour à tous,

je viens vers vous car j'essai de faire tourner une ligne qui est ajouter dans un casier de ligne.

Voici le code

Code:


globale
ecran est une toile, visible vaut "oui", couleur vaut "blanc"
ligne_passe est une ligne, visible vaut "oui", couleur vaut "bleu", x1 vaut 450, y1 vaut 50, x2 vaut 500, y2 vaut 50, taille vaut 10
Liste_ligne est un casier de ligne valant ligne_passe
ligne_casier est un casier de ligne
programme_encours est un drapeau valant vrai
texte1 est un texte

Principale :

début
projette ecran
pour chaque Liste_ligne,lis
projette joker
// Fais réagir joker à "glisser-déposer" pour test
Fais réagir joker à "clic souris" pour crea
ferme
Tant que programme_encours, lis
/*boucle infinie*/
Temporise
texte1 vaut touche
si texte1 est non vide, lis
// texte de affichage vaut texte1
// affiche texte1
si texte1 = "Echap", programme_encours = faux
ferme
Vide touches
Vide texte1
Ferme

crea :

*li est un ligne
début
parcours creation avec #li
reviens

creation :

*li est un ligne

début
visible @ li vaut "oui"
y1 @ li vaut y1 @ li + 100
y2 @ li vaut y2 @ li + 100
angle @ li vaut 0
projette li
ajoute li dans ligne_casier
Fais réagir li à "glisser-déposer" pour changement ligne
Fais réagir li à "début glisser-déposer" pour début changement ligne
Fais réagir li à "clic souris" pour rien ligne
Fais réagir li à "clic droit souris" pour rotation ligne
Reviens

changement ligne :

*li est un ligne
début
transparence @ li vaut 100
Reviens

début changement ligne :

*li est un ligne
début
transparence @ li vaut 50
Reviens

rien ligne :

*li est un ligne
début
// créer uniquement pour faire marcher clic droit souris (rotation) dans les évènements
reviens

rotation ligne :

*li est un ligne
b est un nombre
texte_recu est un texte
début
vide touche
b = 1
tant que b , lis
texte_recu vaut touche
temporise
affiche texte_recu
x2 @ li = sourisx
y2 @ li = sourisy
si texte_recu = "Clique" , b = 0
ferme
Reviens


Pour essayer, cliquez sur la ligne du haut.
Sur la nouvelle ligne en dessous, faire clique droit de la souris et déplacer.
Le problème est que je ne récupère jamais "clique" et que la boucle ne s'arrête plus.:huh::huh:

Cordialement

descriptionProbleme de rotation d'une ligne EmptyRE: Probleme de rotation d'une ligne

more_horiz
Bonjour rbug,

Regarde l'exemple collision_drag_and_drop.liv :
[php] Fais réagir palet à "début glisser-déposer" pour début changement palet
[/php]


ça devrait correspondre à ce que tu souhaites faire ?

descriptionProbleme de rotation d'une ligne EmptyRE: Probleme de rotation d'une ligne

more_horiz
oups, ma réponse n'est pas bonne. je regarde ton livre et je reviens vers toi.

descriptionProbleme de rotation d'une ligne EmptyRE: Probleme de rotation d'une ligne

more_horiz
J'ai contourné le problème :
[php]
globale
ecran est une toile, visible vaut "oui", couleur vaut "blanc"
ligne_passe est une ligne, visible vaut "oui", couleur vaut "bleu", x1 vaut 450, y1 vaut 50, x2 vaut 500, y2 vaut 50, taille vaut 10
Liste_ligne est un casier de ligne valant ligne_passe
ligne_casier est un casier de ligne
programme_encours est un drapeau valant vrai
texte1 est un texte
stop_rotation est un nombre valant vrai

Principale :
début
projette ecran
pour chaque Liste_ligne,lis
projette joker
// Fais réagir joker à "glisser-déposer" pour test
Fais réagir joker à "clic souris" pour crea
ferme
Tant que programme_encours, lis
/*boucle infinie*/
Temporise
texte1 vaut touche
si texte1 est non vide, lis
// texte de affichage vaut texte1
// affiche texte1
si texte1 = "Echap", programme_encours = faux
ferme
Vide touches
Vide texte1
Ferme

crea :
*li est un ligne
début
parcours creation avec #li
reviens

creation :
*li est un ligne
début
visible @ li vaut "oui"
y1 @ li vaut y1 @ li + 100
y2 @ li vaut y2 @ li + 100
angle @ li vaut 0
projette li
ajoute li dans ligne_casier
Fais réagir li à "glisser-déposer" pour changement ligne
Fais réagir li à "début glisser-déposer" pour début changement ligne
Fais réagir li à "clic souris" pour rien ligne
Fais réagir li à "clic droit souris" pour rotation ligne
Reviens

changement ligne :
*li est un ligne
début
transparence @ li vaut 100
Reviens

début changement ligne :
*li est un ligne
début
transparence @ li vaut 50
Reviens

rien ligne :
*li est un ligne
début
stop_rotation vaut faux
// créer uniquement pour faire marcher clic droit souris (rotation) dans les évènements
reviens

rotation ligne :
*li est un ligne
texte_recu est un texte
début
vide touche
stop_rotation vaut vrai
tant que stop_rotation , lis
texte_recu vaut touche
temporise
affiche texte_recu
x2 @ li = sourisx
y2 @ li = sourisy
si texte_recu = "Clique" ,affiche "clique l"
ferme
Reviens
[/php]
Je vais maintenant regarder si c'est un problème ou un comportement normal.

descriptionProbleme de rotation d'une ligne EmptyRE: Probleme de rotation d'une ligne

more_horiz
Je viens de trouver le problème, tu avais inversé les lignes suivantes :
[php]
temporise
texte_recu vaut touche
[/php]

Voici ton programme corrigé :
[php]
globale
ecran est une toile, visible vaut "oui", couleur vaut "blanc"
ligne_passe est une ligne, visible vaut "oui", couleur vaut "bleu", x1 vaut 450, y1 vaut 50, x2 vaut 500, y2 vaut 50, taille vaut 10
Liste_ligne est un casier de ligne valant ligne_passe
ligne_casier est un casier de ligne
programme_encours est un drapeau valant vrai
texte1 est un texte

Principale :
début
projette ecran
pour chaque Liste_ligne,lis
projette joker
// Fais réagir joker à "glisser-déposer" pour test
Fais réagir joker à "clic souris" pour crea
ferme
Tant que programme_encours, lis
/*boucle infinie*/
Temporise
texte1 vaut touche
si texte1 est non vide, lis
// texte de affichage vaut texte1
// affiche texte1
si texte1 = "Echap", programme_encours = faux
ferme
Vide touches
Vide texte1
Ferme

crea :
*li est un ligne
début
parcours creation avec #li
reviens

creation :
*li est un ligne

début
visible @ li vaut "oui"
y1 @ li vaut y1 @ li + 100
y2 @ li vaut y2 @ li + 100
angle @ li vaut 0
projette li
ajoute li dans ligne_casier
Fais réagir li à "glisser-déposer" pour changement ligne
Fais réagir li à "début glisser-déposer" pour début changement ligne
Fais réagir li à "clic souris" pour rien ligne
Fais réagir li à "clic droit souris" pour rotation ligne
Reviens

changement ligne :
*li est un ligne
début
transparence @ li vaut 100
Reviens

début changement ligne :
*li est un ligne
début
transparence @ li vaut 50
Reviens

rien ligne :
*li est un ligne
début
// créer uniquement pour faire marcher clic droit souris (rotation) dans les évènements
reviens

rotation ligne :
*li est un ligne
b est un nombre
texte_recu est un texte
début
vide touche
b = 1
tant que b , lis
temporise
texte_recu vaut touche
affiche texte_recu
x2 @ li = sourisx
y2 @ li = sourisy
si texte_recu = "Clique" , b = 0
ferme
Reviens
[/php]

Bravo pour ton programme en tout cas.

descriptionProbleme de rotation d'une ligne EmptyRE: Probleme de rotation d'une ligne

more_horiz
Merci beaucoup.
Aussi bien pour tes encouragements que pour ta correction.
Je cherche un moyen d'afficher différent styles de lignes. lignes pointillé, lignes en zigzag.
j'ai déjà eu un retour pour le zigzag en megalithe (voir [url=ligne pointillé et zigzag][/url]), mais je ne peux pas le manipuler comme une ligne (x1,y1;
x2,y2).
Avez-vous des solutions (programmation d'un nouveau type, autre langage, etc...) ?.

C'est pour réaliser un programme de création d'exercices de basket pour entraîneur (la préparation).
A la fin il devra être possibles d'ajouter différents personnages et différentes lignes.
Au début uniquement des lignes droites, puis des courbes, puis d'ajouter des flèches aux bouts des droites.
Je ne sais pas encore tous ce qu'il sera possible de faire.
Ensuite j'aimerais créer un sauvegarde et un rechargement (je pense qu'il faut sauvegarder les casiers où seront les objets et les lignes pour les recharger et les ré-afficher sur la toile).

Edit : Le problème persiste même en inversant les lignes. A mon avis il y a collision entre le premier temporise et le second?

descriptionProbleme de rotation d'une ligne EmptyRE: Probleme de rotation d'une ligne

more_horiz
Ce que tu demandes est assez compliqué et quelque soit le langage que tu vas utiliser, la solution sera compliquée !

Il existe un exemple d'un tel outil créé il y a quelque temps par $imon (Le paint pour Linotte (ppl.liv) mais je l'ai pas encore converti en Linotte 2.0.
Il faut passer en Linotte 1.X pour l'utiliser...

Linotte peut manipuler le format SVG. ça peut être la solution ?

descriptionProbleme de rotation d'une ligne EmptyRE: Probleme de rotation d'une ligne

more_horiz
Bonsoir à tous,

j'ai réussi en modifiant un peu et grâce à la nouvelle version du tutoriel de Wam.
Ce n'est pas des plus fonctionnel mais cela fonctionne en insistant un peu sur le clique droit (2 ou 3 fois et ça bouge tout seule).

Code:


globale
fenetre est un formulaire, largeur vaut 900, hauteur vaut 900, titre vaut "Ma première fenêtre"
vue est une xtoile, x vaut 0, y vaut 0, visible vaut "oui"
ecran est une toile, visible vaut "oui", couleur vaut "blanc", largeur vaut 800, hauteur vaut 800
ligne_passe est une ligne, visible vaut "oui", couleur vaut "vert", x1 vaut 500, y1 vaut 50, x2 vaut 450, y2 vaut 50, taille vaut 10
Liste_ligne est un casier de ligne valant ligne_passe
ligne_casier est un casier de ligne
programme_encours est un drapeau valant vrai
texte1 est un texte
b1 est un bouton, couleurfond vaut "bleu france", couleurtexte vaut "noir", texte vaut "Quitter!", touche vaut "echap", visible vaut "oui", x vaut 800, y vaut 850

Principale :

début
Ajoute b1 & vue dans fenetre
Fais réagir b1 à "clic souris" pour fermer_fenêtre
Fais réagir fenetre à "clic souris" pour fermer_fenêtre
pour chaque Liste_ligne,lis
Projette joker
// Fais réagir joker à "glisser-déposer" pour test
Fais réagir joker à "clic souris" pour crea
ferme
// Boucle infinie
Tant que vrai, lis
Temporise
ferme

fermer_fenêtre :

* bout est un bouton
début
// attends 1 seconde
vide ecran
termine
reviens

crea :

*li est un ligne
début
parcours creation avec #li
reviens

creation :

*li est un ligne
début
visible @ li vaut "oui"
y1 @ li vaut y1 @ li + 100
y2 @ li vaut y2 @ li + 100
angle @ li vaut 0
projette li
ajoute li dans ligne_casier
Fais réagir li à "glisser-déposer" pour changement ligne
Fais réagir li à "début glisser-déposer" pour début changement ligne
Fais réagir li à "clic souris" pour rien ligne
Fais réagir li à "clic droit souris" pour rotation ligne
Reviens

changement ligne :

*li est un ligne
début
transparence @ li vaut 100
Reviens

début changement ligne :

*li est un ligne
début
transparence @ li vaut 50
Reviens

rien ligne :

*li est un ligne
début
// créer uniquement pour faire marcher clic droit souris (rotation) dans les évènements
reviens

rotation ligne :

*li est un ligne
b est un nombre valant 1
texte_recu est un texte
début
tant que b , lis
vide touche
temporise
texte_recu = touche
affiche texte_recu
x2 @ li = sourisx
y2 @ li = sourisy
si texte_recu = "Clique" , b = 0
vide touche
ferme
Reviens


AdminCPC, pour le SVG je vais avoir les même problèmes que pour les objets et les mégalithes.
La rotation central n'est pas envisageable dans ce cas car la personne doit cliquer et déplacer la deuxième extrémité (facilité d'utilisation).
Je voudrais juste savoir comment la ligne s'affiche (en code) et si il n'est pas possible de modifier cette fonction pour afficher d'autre type de ligne, voir des extrémités qui changent ?
Je vous remercie de votre soutien.

PS : une image du projet sur lequel je travail : [attachment=153]

descriptionProbleme de rotation d'une ligne EmptyRE: Probleme de rotation d'une ligne

more_horiz
Super, je vais regarder ça et analyser cette problématique avec le "clique" et proposer une correction si bogue.

descriptionProbleme de rotation d'une ligne EmptyRE: Probleme de rotation d'une ligne

more_horiz
En centralisation la gestion du clique sur la toile en un seul endroit, je trouve que c'est plus simple et ça semble marcher :

[php]
globale
fenetre est un formulaire, largeur vaut 900, hauteur vaut 900, titre vaut "Ma première fenêtre"
vue est une xtoile, x vaut 0, y vaut 0, visible vaut "oui"
ecran est une toile, visible vaut "oui", couleur vaut "blanc", largeur vaut 800, hauteur vaut 800
ligne_passe est une ligne, visible vaut "oui", couleur vaut "vert", x1 vaut 500, y1 vaut 50, x2 vaut 450, y2 vaut 50, taille vaut 10
Liste_ligne est un casier de ligne valant ligne_passe
ligne_casier est un casier de ligne
programme_encours est un drapeau valant vrai
texte1 est un texte
b1 est un bouton, couleurfond vaut "bleu france", couleurtexte vaut "noir", texte vaut "Quitter!", touche vaut "echap", visible vaut "oui", x vaut 800, y vaut 850
// On utilise ce drapeau pour gérer le clique sur la toile
traitement est un drapeau valant faux

Principale :
début
Ajoute b1 & vue dans fenetre
Fais réagir b1 à "clic souris" pour fermer_fenêtre
Fais réagir fenetre à "clic souris" pour fermer_fenêtre
pour chaque Liste_ligne,lis
Projette joker
// Fais réagir joker à "glisser-déposer" pour test
Fais réagir joker à "clic souris" pour crea
ferme
// Boucle infinie et gestion du clique sur la toile :
Tant que vrai, lis
Temporise
si touche = "Clique" , traitement vaut faux
ferme

fermer_fenêtre :
//* bout est un bouton
début
// attends 1 seconde
vide ecran
termine
reviens

crea :
*li est un ligne
début
parcours creation avec #li
reviens

creation :
*li est un ligne
début
visible @ li vaut "oui"
y1 @ li vaut y1 @ li + 100
y2 @ li vaut y2 @ li + 100
angle @ li vaut 0
projette li
ajoute li dans ligne_casier
Fais réagir li à "glisser-déposer" pour changement ligne
Fais réagir li à "début glisser-déposer" pour début changement ligne
Fais réagir li à "clic souris" pour rien ligne
Fais réagir li à "clic droit souris" pour rotation ligne
Reviens

changement ligne :
*li est un ligne
début
transparence @ li vaut 100
Reviens

début changement ligne :
*li est un ligne
début
transparence @ li vaut 50
Reviens

rien ligne :
*li est un ligne
début
// créer uniquement pour faire marcher clic droit souris (rotation) dans les évènements
reviens

rotation ligne :
*li est un ligne
b est un nombre valant 1
texte_recu est un texte
début
traitement vaut vrai
tant que traitement , lis
temporise
x2 @ li = sourisx
y2 @ li = sourisy
ferme
Reviens
[/php]

descriptionProbleme de rotation d'une ligne EmptyRe: Probleme de rotation d'une ligne

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