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 : -45%
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre ...
Voir le deal
339 €

descriptionProblème pipette et greffon clavier EmptyProblème pipette et greffon clavier

more_horiz
Je dispose d'une image de 677 x 425.
Je positionne dans le coin de l'image un carré de 22 x 22.
Je récupère chaque pixel de l'image contenue dans le carré à l'aide de la pipette.
Je fais alors correspondre chaque pixel à un tile que j'affiche.

Mais j'ai un problème avec la pipette :
L'image est en noir et blanc : les valeurs des couleurs obtenues sont donc 255 255 255 ou 0 0 0.
Hors, de temps en temps, je me retrouve avec comme valeur : 255 127 127
Ceci, de façon complètement aléatoire.

J'ai un second problème :
J'essaye de coder un système de scrolling pour pouvoir déplacer le rectangle et ainsi afficher les tiles correspondants.

Mon code fonctionne mais plus j'utilise le clavier, plus mon programme ralenti.
Voici un extrait de 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

"pos_x_fenêtre_scrolling : " + pos_x_fenêtre_scrolling !
"pos_y_fenêtre_scrolling : " + pos_y_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 = 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()

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 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

(" 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, 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)
("sauvegarde_tile !")
ferme

évoque c.fermer()

Va vers Attente_clavier2

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
Si joker == "Gauche" alors déplace fenêtre_scrolling vers la gauche de 1
Si joker == "Haut" alors déplace fenêtre_scrolling vers le haut de 1
Si joker == "Bas" alors déplace fenêtre_scrolling vers le bas de 1

joker !

("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 Sauvegarde_automatique
ferme
ferme
Reviens
[/php]

descriptionProblème pipette et greffon clavier EmptyRE: Problème pipette et greffon clavier

more_horiz
Wam,

L'utilisation de la méthode clavier.commencer() ne doit être effectuée qu'une seule fois par livre. J'ai l'impression que tu l'appelles plusieurs fois ?

ça peut expliquer la lenteur.

descriptionProblème pipette et greffon clavier EmptyRE: Problème pipette et greffon clavier

more_horiz
Je regarde ce problème avec la pipette.
j'ai mon idée.
ça doit être un problème de synchronisation entre le moment où tu demandes la couleur d'un pixel et l'état d'affichage de la toile.

descriptionProblème pipette et greffon clavier EmptyRE: Problème pipette et greffon clavier

more_horiz
Pour la pipette j'ai rajouter un "attends 30 millisecondes" entre le moment où je déplace mon rectangle et celui où je prélève les pixels.
Depuis, plus de problème.

descriptionProblème pipette et greffon clavier EmptyRE: Problème pipette et greffon clavier

more_horiz
Parfait,

ça me laisse le temps de trouver une solution ... :dodgy:

descriptionProblème pipette et greffon clavier EmptyRe: Problème pipette et greffon clavier

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