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 à ne pas rater :
Fnac : 2 Funko Pop achetées : le 3ème offert (large sélection de ...
Voir le deal

descriptionAnnuler un glisser-déposer ? EmptyAnnuler un glisser-déposer ?

more_horiz
Bonjour,
j'ai crée un quadrillage avec un système de drag&drop. Si on déplace l'élément en dehors de mon quadrillage, la fonction s'arrête.
L'élément se fige alors sur place.
Peut-on annuler la fonction "faire réagir à glisser-déposer" pour que l'élément retourne à sa place d'origine ?

descriptionAnnuler un glisser-déposer ? EmptyRE: Annuler un glisser-déposer ?

more_horiz
ça à l'air sympa ce que tu fais... je réfléchis demain ou après demain à une idée pour résoudre ton problème.

descriptionAnnuler un glisser-déposer ? EmptyRE: Annuler un glisser-déposer ?

more_horiz
Il réfléchit après demain et il trouve une solution dans un mois puis il la programme 3 mois plus tard et enfin pour finir en 2013 sort la docu pour expliquer comment utiliser sa nouvelle fonction.

Je rigole x)

descriptionAnnuler un glisser-déposer ? EmptyRE: Annuler un glisser-déposer ?

more_horiz
Bonjour Wam,

J'ai créé la fiche suivante : https://code.google.com/p/langagelinott ... tail?id=49
Du coup, Zamirh a raison, ça arrivera lors de la version 1.7 donc pas tout de suite !
Par contre, je vais faire un exemple pour le faire "programmatiquement" en Linotte !

descriptionAnnuler un glisser-déposer ? EmptyRE: Annuler un glisser-déposer ?

more_horiz
Et voici une solution 100% en Linotte (et que je trouve très élégante !):

Code:


Drag n Drop :

espèces :

copie_x & copie_y :
:
nombre
l'espèce rectangledng hérite de rectangle et contient copie_x , copie_y
grands rôles :

centre :
:
cercle, x vaut 311, y vaut 285, couleur vaut "rouge", plein vaut "oui", rayon vaut 50
boule :
:
rectangledng, largeur vaut 40, hauteur vaut 20, couleur vaut "noir", plein vaut "oui"
fond :
:
toile, couleur vaut "blanc"

Principal :

Actions :

attache fixer à boule
attache rétablir à boule
("Mémoriser la position initiale :
")
évoque boule.
fixer()
projette fond & centre & boule
fais réagir boule à "glisser-déposer" pour changement
("Boucle infinie")
Tant que vrai, temporise

Changement :

Actions :

si boule est en collision avec centre alors évoque boule.
fixer()
sinon, évoque boule.
rétablir()
reviens

Fixer :

Rôles :

*moi :
:
rectangledng
Actions :

copie_x@moi vaut x@moi
copie_y@moi vaut y@moi
retourne vrai

Rétablir :

Rôles :

*moi :
:
rectangledng
Actions :

x@moi vaut copie_x@moi
y@moi vaut copie_y@moi
retourne vrai


Le rectangle noir ne peut être déplacé que dans le cercle rouge. Ailleurs, le drag-n-drop est annulé.

descriptionAnnuler un glisser-déposer ? EmptyRE: Annuler un glisser-déposer ?

more_horiz
oups, un problème dans l'exemple... c'est corrigé !

descriptionAnnuler un glisser-déposer ? EmptyRE: Annuler un glisser-déposer ?

more_horiz
Merci pour ton exemple.
Je te montre ce que j'ai fait :

Code:


Actions :

("casier_tiles est un casier d'image à glisser-déposer")
Mesure casier_tiles dans nombre_tiles

pour i de 0 à nombre_case - 1, lis
pour chaque nombre_tiles, lis

("grille{i} est un quadrillage")
Si casier_tiles{joker} est en collision avec grille{i} alors lis
pos_x = x de (casier_tiles{joker})
pos_y = y de (casier_tiles{joker})

("ici je détermine la case du quadrillage sur laquelle mon image s'est posée")
num_x = (pos_x - ((((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche)) / taille_case
num_y = (pos_y - ((((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute)) / taille_case
numéro_case = (arrondi num_x * nombre_case_hauteur_effectif) + arrondi num_y

("si mon image dépasse de trop de mon quadrillage alors je la renvoie à sa position d'origine")
si pos_x <
pos_x_mini alors parcours Annulation avec (casier_tiles{joker}), joker - 1
Sinon, si pos_x >
pos_x_maxi alors parcours Annulation avec (casier_tiles{joker}), joker - 1
Sinon, si pos_y <
pos_y_mini alors parcours Annulation avec (casier_tiles{joker}), joker - 1
Sinon, si pos_y >
pos_y_maxi alors parcours Annulation avec (casier_tiles{joker}), joker - 1

("sinon je pose mon image dans le quadrillage")
Sinon, parcours Repositionnement avec (casier_tiles{joker}), numéro_case
ferme

numéro_case = 0
ferme
ferme
Reviens

("ici on positionne les images dans le quadrillage")
Repositionnement :

Rôles :

*tuile est un graphique
*numéro est un nombre
Actions :

x de tuile = x de (grille{numéro})
y de tuile = y de (grille{numéro})
Reviens

("ici on annule le drag&drop")
Annulation :

Rôles :

*retour_tuile est un graphique
*retour_numéro est un nombre
Actions :

x de retour_tuile = x de (casier_tiles{retour_numéro})
y de retour_tuile = y de (casier_tiles{retour_numéro})
Reviens


Sa fonctionne <img src=" title="Smile" />

En revanche je ne peut pas annuler le drag&drop si mon image n'est pas en collision avec mon quadrillage.
Par exemple, si je fait :

Code:


pour i de 0 à nombre_case - 1, lis
pour chaque nombre_tiles, lis

("grille{i} est un quadrillage")
Si casier_tiles{joker} est en collision avec grille{i} alors lis
pos_x = x de (casier_tiles{joker})
pos_y = y de (casier_tiles{joker})

("ici je détermine la case du quadrillage sur laquelle mon image s'est posée")
num_x = (pos_x - ((((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_case))/2) + largeur de bordure_gauche)) / taille_case
num_y = (pos_y - ((((hauteur de fond - (bordure_haute*2)) - (nombre_case_hauteur_effectif * taille_case))/2) + bordure_haute)) / taille_case
numéro_case = (arrondi num_x * nombre_case_hauteur_effectif) + arrondi num_y

("si mon image dépasse de trop mon quadrillage alors je la renvoie à sa position d'origine")
si pos_x <
pos_x_mini alors parcours Annulation avec (casier_tiles{joker}), joker - 1
Sinon, si pos_x >
pos_x_maxi alors parcours Annulation avec (casier_tiles{joker}), joker - 1
Sinon, si pos_y <
pos_y_mini alors parcours Annulation avec (casier_tiles{joker}), joker - 1
Sinon, si pos_y >
pos_y_maxi alors parcours Annulation avec (casier_tiles{joker}), joker - 1

("sinon je pose mon image dans le quadrillage")
Sinon, parcours Repositionnement avec (casier_tiles{joker}), numéro_case
ferme

("Si casier_tiles{joker} n'est pas en collision avec grille{i}")
Sinon, lis
x de (casier_tiles{joker}) = 1
y de (casier_tiles{joker}) = 1
ferme
numéro_case = 0
ferme
ferme
Reviens


Mon programme ne repère plus la collision et renvoie mon image dans son coin à chaque fois.

Je n'ai trouvé aucune solution pour annuler le drag&drop si mon image n'est pas dans le quadrillage.

descriptionAnnuler un glisser-déposer ? EmptyRe: Annuler un glisser-déposer ?

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