En faisant ceci, il n'y a pas de problèmes :
- la création du quadrillage est rapide
- il n'y a pas de ralentissements de l'atelier
[php]
Editeur de cartes :
Grands rôles :
("Fenêtre principale")
Fenêtre_principale est un formulaire, hauteur vaut 828, largeur vaut 1600, titre vaut "Editeur de cartes"
("Fenêtre nouveau quadrillage")
Fenêtre_nouveau_quadrillage est un formulaire, hauteur vaut 140, largeur vaut 300, titre vaut "Nouveau quadrillage", visible vaut "non", x vaut 450, y vaut 255
txt_Fnq1 est une étiquette, texte vaut "Nombre de cases en largeur :", x vaut 10, y vaut 10
txt_Fnq2 est une étiquette, texte vaut "Nombre de cases en hauteur :", x vaut 10, y vaut 30
txt_Fnq3 est une étiquette, texte vaut "Largeur des cases :", x vaut 10, y vaut 50
txt_Fnq4 est une étiquette, texte vaut "Hauteur des cases :", x vaut 10, y vaut 70
choix_case_largeur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 10
choix_case_hauteur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 30
choix_taille_largeur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 50
choix_taille_hauteur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 70
bouton_valider_Fnq est un bouton, texte vaut "Valider", x vaut 70, y vaut 110
bouton_annuler_Fnq est un bouton, texte vaut "Annuler", x vaut 160, y vaut 110
("Menus")
menu2 est un menu, texte vaut "Carte"
menu2s1 est un sousmenu, texte vaut "Nouveau quadrillage"
("Toile")
fond est une toile, hauteur vaut 800, largeur vaut 1600, couleur vaut "blanc", pointeur vaut "flèche"
xtoile est une xtoile, x vaut 0, y vaut 0
bordure_gauche est un rectangle, x = 0, y = 0, position vaut 1, hauteur vaut hauteur de fond, largeur vaut 150, plein vaut "oui", couleur vaut "blanc"
("Quadrillage")
taille_largeur_case est un nombre
taille_hauteur_case est un nombre
nombre_case_largeur est un nombre
nombre_case_hauteur est un nombre
nombre_case_largeur_effectif est un nombre
nombre_case_hauteur_effectif est un nombre
nombre_case est un nombre
grille4 est un casier de rectangle
grille5 est un casier de rectangle
Fenêtre_principale :
Rôles :
Actions :
("Construction des fenêtres")
Tu ajoutes txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & txt_Fnq4 & choix_case_largeur & choix_case_hauteur & choix_taille_largeur_case & choix_taille_hauteur_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage
Tu fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_valider_Fnq à "clic souris" pour Générer_quadrillage
("Début du programme")
Tu ajoutes xtoile dans Fenêtre_principale
visible de Fenêtre_principale vaut "oui"
Tu ajoutes menu2 dans Fenêtre_principale
Tu ajoutes menu2s1 dans menu2
Tu fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Tu fais réagir menu2s1 à "clic souris" pour Fenêtre_nouveau_quadrillage
Tu fais réagir menu2s1 à "clic souris" pour Affichage_toile
tant que 1 est différent de 2, lis
temporise
ferme
Fenêtre_nouveau_quadrillage :
Rôles :
§ i est un nombre
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "oui"
Pour i de 1 à 100, lis
Tu ajoutes i +"|" dans valeurs@choix_case_largeur
Tu ajoutes i +"|" dans valeurs@choix_case_hauteur
Tu ajoutes i +"|" dans valeurs@choix_taille_largeur_case
Tu ajoutes i +"|" dans valeurs@choix_taille_hauteur_case
Tu fermes
Fermer_fenêtre_principale :
Rôles :
*f :: formulaire
Actions :
Efface la toile
Tu termines
Fermer_fenêtre_nouveau_quadrillage :
Rôles :
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "non"
Tu reviens
Affichage_toile :
Rôles :
Actions :
Efface la toile
Projette le fond & bordure_gauche
Tant que vrai, lis
Temporise
Ferme
Générer_quadrillage :
Rôles :
§ valeur1 est un texte
§ valeur2 est un texte
§ valeur3 est un texte
§ valeur4 est un texte
Actions :
valeur1 = valeur@choix_case_largeur
Tu convertis valeur1 en nombre_case_largeur
valeur2 = valeur@choix_case_hauteur
Tu convertis valeur2 en nombre_case_hauteur
valeur3 = valeur@choix_taille_largeur_case
Tu convertis valeur3 en taille_largeur_case
valeur4 = valeur@choix_taille_hauteur_case
Tu convertis valeur4 en taille_hauteur_case
nombre_case_largeur_effectif = entier ((largeur de fond - largeur de bordure_gauche) / taille_largeur_case)
nombre_case_hauteur_effectif = entier (hauteur de fond / taille_hauteur_case)
Si nombre_case_largeur_effectif >
nombre_case_largeur alors nombre_case_largeur_effectif = nombre_case_largeur
Si nombre_case_hauteur_effectif >
nombre_case_hauteur alors nombre_case_hauteur_effectif = nombre_case_hauteur
nombre_case = nombre_case_hauteur_effectif*nombre_case_largeur_effectif
visible de Fenêtre_nouveau_quadrillage vaut "non"
Tu vas vers Affichage_quadrillage
Affichage_quadrillage :
Rôles :
§ case est un rectangle, couleur vaut "blanc", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 1, plein vaut "oui"
§ contour_case est un rectangle, couleur vaut "noir", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 100, plein vaut "non"
xx est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy est un nombre <
- (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
Actions :
("ici on dessine des cases pleines")
pour chaque nombre_case, lis
ajoute #case dans grille4
déplace grille4{joker} vers xx et yy
projette grille4{joker}
xx = xx + taille_largeur_case
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) - taille_largeur_case alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy = yy + taille_hauteur_case
ferme
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
ferme
ferme
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
("ici on dessine le contour des cases")
pour chaque nombre_case, lis
ajoute #contour_case dans grille5
déplace grille5{joker} vers xx et yy
Projette grille5{joker}
xx = xx + taille_largeur_case
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) - taille_largeur_case alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy = yy + taille_hauteur_case
ferme
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
ferme
ferme
[/php]
C'est donc mon système de scrolling qui pose problème.
Voici mon code :
[php]
Editeur de cartes :
Grands rôles :
("Fenêtre principale")
Fenêtre_principale est un formulaire, hauteur vaut 800, largeur vaut 1400, titre vaut "Editeur de cartes"
("Fenêtre nouveau quadrillage")
Fenêtre_nouveau_quadrillage est un formulaire, hauteur vaut 140, largeur vaut 300, titre vaut "Nouveau quadrillage", visible vaut "non", x vaut 450, y vaut 255
txt_Fnq1 est une étiquette, texte vaut "Nombre de cases en largeur :", x vaut 10, y vaut 10
txt_Fnq2 est une étiquette, texte vaut "Nombre de cases en hauteur :", x vaut 10, y vaut 30
txt_Fnq3 est une étiquette, texte vaut "Largeur des cases :", x vaut 10, y vaut 50
txt_Fnq4 est une étiquette, texte vaut "Hauteur des cases :", x vaut 10, y vaut 70
choix_case_largeur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 10
choix_case_hauteur est un sélecteur, valeurs vaut "", x vaut 200, y vaut 30
choix_taille_largeur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 50
choix_taille_hauteur_case est un sélecteur, valeurs vaut "", x vaut 200, y vaut 70
bouton_valider_Fnq est un bouton, texte vaut "Valider", x vaut 70, y vaut 110
bouton_annuler_Fnq est un bouton, texte vaut "Annuler", x vaut 160, y vaut 110
("Menus")
menu2 est un menu, texte vaut "Carte"
menu2s1 est un sousmenu, texte vaut "Nouveau quadrillage"
("Toile")
fond est une toile, hauteur vaut 800, largeur vaut 1400, couleur vaut "blanc", pointeur vaut "flèche"
xtoile est une xtoile, x vaut 0, y vaut 0
bordure_gauche est un rectangle, x = 0, y = 0, position vaut 1, hauteur vaut hauteur de fond, largeur vaut 150, plein vaut "oui", couleur vaut "blanc"
("Fenêtre de scrolling")
cadre est un rectangle, couleur vaut "blanc", hauteur vaut 330, largeur vaut 330, position vaut 1, plein vaut "non", x = 0, y = 0
indice_horizontal est un nombre <
- 0
indice_vertical est un nombre <
- 0
("Quadrillage")
taille_largeur_case est un nombre
taille_hauteur_case est un nombre
nombre_case_largeur est un nombre
nombre_case_hauteur est un nombre
nombre_case_largeur_effectif est un nombre
nombre_case_hauteur_effectif est un nombre
nombre_case est un nombre
grille4 est un casier de rectangle
grille5 est un casier de rectangle
carte est un casier de nombre
Fenêtre_principale :
Rôles :
Actions :
("Construction des fenêtres")
Tu ajoutes txt_Fnq1 & txt_Fnq2 & txt_Fnq3 & txt_Fnq4 & choix_case_largeur & choix_case_hauteur & choix_taille_largeur_case & choix_taille_hauteur_case & bouton_valider_Fnq & bouton_annuler_Fnq dans Fenêtre_nouveau_quadrillage
Tu fais réagir Fenêtre_nouveau_quadrillage à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_annuler_Fnq à "clic souris" pour Fermer_fenêtre_nouveau_quadrillage
Tu fais réagir bouton_valider_Fnq à "clic souris" pour Générer_quadrillage
("Début du programme")
Tu ajoutes xtoile dans Fenêtre_principale
visible de Fenêtre_principale vaut "oui"
Tu ajoutes menu2 dans Fenêtre_principale
Tu ajoutes menu2s1 dans menu2
Tu fais réagir Fenêtre_principale à "clic souris" pour Fermer_fenêtre_principale
Tu fais réagir menu2s1 à "clic souris" pour Affichage_toile
Tu fais réagir menu2s1 à "clic souris" pour Fenêtre_nouveau_quadrillage
tant que 1 est différent de 2, lis
temporise
ferme
Fenêtre_nouveau_quadrillage :
Rôles :
§ i est un nombre
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "oui"
Pour i de 1 à 100, lis
Tu ajoutes i +"|" dans valeurs@choix_case_largeur
Tu ajoutes i +"|" dans valeurs@choix_case_hauteur
Tu ajoutes i +"|" dans valeurs@choix_taille_largeur_case
Tu ajoutes i +"|" dans valeurs@choix_taille_hauteur_case
Tu fermes
Fermer_fenêtre_principale :
Rôles :
*f :: formulaire
Actions :
Efface la toile
Tu termines
Fermer_fenêtre_nouveau_quadrillage :
Rôles :
Actions :
visible de Fenêtre_nouveau_quadrillage vaut "non"
Tu reviens
Affichage_toile :
Rôles :
Actions :
Efface la toile
Projette le fond & bordure_gauche
Tant que vrai, lis
Temporise
Ferme
Générer_quadrillage :
Rôles :
§ valeur1 est un texte
§ valeur2 est un texte
§ valeur3 est un texte
§ valeur4 est un texte
Actions :
valeur1 = valeur@choix_case_largeur
Tu convertis valeur1 en nombre_case_largeur
valeur2 = valeur@choix_case_hauteur
Tu convertis valeur2 en nombre_case_hauteur
valeur3 = valeur@choix_taille_largeur_case
Tu convertis valeur3 en taille_largeur_case
valeur4 = valeur@choix_taille_hauteur_case
Tu convertis valeur4 en taille_hauteur_case
nombre_case = nombre_case_hauteur*nombre_case_largeur
("on calcule le nombre de cases à afficher en fonction des dimensions de la fenêtre de scrolling")
nombre_case_largeur_effectif = entier (largeur de cadre / taille_largeur_case)
nombre_case_hauteur_effectif = entier (hauteur de cadre / taille_hauteur_case)
Si nombre_case_largeur_effectif >
nombre_case_largeur alors nombre_case_largeur_effectif = nombre_case_largeur
Si nombre_case_hauteur_effectif >
nombre_case_hauteur alors nombre_case_hauteur_effectif = nombre_case_hauteur
visible de Fenêtre_nouveau_quadrillage vaut "non"
Tu vas vers Création_quadrillage
Création_quadrillage :
Rôles :
§ case est un rectangle, couleur vaut "blanc", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 1, plein vaut "oui"
§ contour_case est un rectangle, couleur vaut "noir", hauteur vaut taille_hauteur_case, largeur vaut taille_largeur_case, position vaut 100, plein vaut "non"
Actions :
("ici on créer des cases pleines")
pour chaque nombre_case, lis
ajoute #case dans grille4
ferme
("ici on créer le contour des cases")
pour chaque nombre_case, lis
ajoute #contour_case dans grille5
ferme
("ici on indique que le quadrillage est vide")
pour chaque nombre_case, lis
ajoute 0 dans carte
ferme
Va vers Affichage_quadrillage
Affichage_quadrillage :
Rôles :
§ x_case_min est un nombre <
- x de cadre / taille_largeur_case
§ y_case_min est un nombre <
- y de cadre / taille_hauteur_case
§ x_case_max est un nombre
§ y_case_max est un nombre
§ numéro_case_grille est un nombre
§ i est un nombre
§ j est un nombre
xx est un nombre <
- (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy est un nombre <
- (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
§ pos_x est un nombre
§ pos_y est un nombre
Actions :
("ici on calcule le numéro des cases de la grille4 à afficher, en fonction de la position de la fenêtre de scrolling")
x_case_min = x_case_min + (y_case_min * nombre_case_largeur)
y_case_min = (y_case_min * nombre_case_largeur) + (x de cadre / taille_largeur_case)
x_case_max = x_case_min + (nombre_case_largeur_effectif - 1)
y_case_max = y_case_min + ((nombre_case_hauteur_effectif - 1) * nombre_case_largeur)
("ici on dessine des cases pleines")
Pour i de y_case_min à y_case_max suivant i + nombre_case_largeur, lis
Pour j de x_case_min à x_case_max, lis
numéro_case_grille = i + j - ((y de cadre / taille_hauteur_case) * nombre_case_largeur) - (x de cadre / taille_largeur_case)
déplace grille4{numéro_case_grille} vers xx et yy
projette grille4{numéro_case_grille}
xx = xx + taille_largeur_case
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) - taille_largeur_case alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy = yy + taille_hauteur_case
ferme
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
ferme
ferme
ferme
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
("ici on dessine le contour des cases")
Pour i de y_case_min à y_case_max suivant i+nombre_case_largeur, lis
Pour j de x_case_min à x_case_max, lis
numéro_case_grille = i + j - ((y de cadre / taille_hauteur_case) * nombre_case_largeur) - (x de cadre / taille_largeur_case)
déplace grille5{numéro_case_grille} vers xx et yy
projette grille5{numéro_case_grille}
xx = xx + taille_largeur_case
si xx est plus grand que largeur de bordure_gauche + (nombre_case_largeur_effectif * taille_largeur_case) + (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) - taille_largeur_case alors lis
xx = (((largeur de fond - largeur de bordure_gauche) - (nombre_case_largeur_effectif * taille_largeur_case))/2) + largeur de bordure_gauche
yy = yy + taille_hauteur_case
ferme
si yy est plus grand que (((hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2) + (nombre_case_hauteur_effectif * taille_hauteur_case)) - taille_hauteur_case alors lis
yy = (hauteur de fond - (nombre_case_hauteur_effectif * taille_hauteur_case))/2
ferme
ferme
ferme
Va vers Attente_clavier2
Attente_clavier2 :
Rôles :
clavier :: clavier
§i est un nombre
Actions :
évoque clavier.commencer()
tant que vrai, lis
attends 100 millisecondes
parcours Scrolling avec clavier.touches(), clavier
ferme
Scrolling :
Rôles :
*liste :: casier de nombre
*clavier :: clavier
Actions :
Si liste est non vide alors lis
Pour chaque liste, lis
Si joker == "Droite" alors lis
si indice_horizontal <
(nombre_case_largeur - nombre_case_largeur_effectif) alors lis
"droite" !
déplace cadre vers la droite de taille_largeur_case
incrémente indice_horizontal
évoque clavier.stop()
va vers Affichage_quadrillage
ferme
ferme
Sinon si joker == "Gauche" alors lis
si indice_horizontal >
0 alors lis
"gauche" !
déplace cadre vers la gauche de taille_largeur_case
décrémente indice_horizontal
évoque clavier.stop()
va vers Affichage_quadrillage
ferme
ferme
Sinon si joker == "Haut" alors lis
si indice_vertical >
0 alors lis
"haut" !
déplace cadre vers le haut de taille_hauteur_case
décrémente indice_vertical
évoque clavier.stop()
va vers Affichage_quadrillage
ferme
ferme
Sinon si joker == "Bas" alors lis
si indice_vertical <
(nombre_case_hauteur - nombre_case_hauteur_effectif) alors lis
"Bas" !
déplace cadre vers le bas de taille_hauteur_case
incrémente indice_vertical
évoque clavier.stop()
va vers Affichage_quadrillage
ferme
ferme
ferme
ferme
Reviens
[/php]
J'ai voulu séparer la création des cases de leur affichage, me permettant ainsi de créer mon quadrillage en entier et d'en afficher qu'une partie.
Cependant, cette façon de faire se révèle beaucoup plus lente que celle au-dessus.
De plus, elle ralenti énormément l'inspecteur et la lecture des livres.
Comment puis-je faire pour réparer ça ?