0 Members and 4 Guests are viewing this topic.
If touches de déplacement ou autre:If A:copier écran dans l'appvar:0=>A:End:.code si touches de déplacement ou autre:Else:1=>A:End
@Hayleia : je viens de penser à un truc pour une option "annuler action". En gros on sauve l'écran dans l'appvar à un seul moment, c'est quand on appuie sur une touche pour déplacer ou dessiner ou faire apparaître le menu (une option que je viens d'inventer :p). Dans un code :Code: [Select]If touches de déplacement ou autre:If A:copier écran dans l'appvar:0=>A:End:.code si touches de déplacement ou autre:Else:1=>A:EndJe vais tester un truc pour copier l'écran dans l'appvar. (pas sûr que ça marche)
:getCalc("appvAPPV")=>APPV:For(I,0,63):96*256+1=>{I*12-2+L6}r:.Après comme on affiche l'appvar directement sur l'écran on verra pas les trucs modifiés:Bitmap(0,0,I*12+L6,I+X*32+Y+APPV,1):End
.ISCROLL Image scrolling testData(256,192)[|vIMG]->^^oIMGDiagnosticOffFnOff ClrDrawBitmap(~80→X,~64→Y,^^oIMG)While 1 DispGraph If getKey(1) !If Y-1<~128 Y-- Vertical - 63:DrawY() End End If getKey(2) If X +1→X Horizontal + .0:DrawC() DrawL() End End If getKey(3) !If X-1<~160 X-- Horizontal - .95:DrawC() DrawR() End End If getKey(4) If Y +1→Y Vertical + 0:DrawY() End EndEndIf getKey(15)ReturnLbl DrawY Copy(→r1-Y*32+^^oIMG+2,L1+2,32) Fill(r1*12+L6,12,|E0100→{L1}r) Bitmap(X,r1,L1)ReturnLbl DrawR 11+L6→r3 |E01→r4 95 Goto Draw0Lbl DrawL L6→r3 |E80→r4 and 0 Lbl Draw0 Select(-X,{^8+^^oMasks}→r2) *32/256-(Y*32)+^^oIMG+2 For(64) not({→r1} and r2-1/256) and r4 or {r3}→{r3}+12→r3 r1+32 EndReturn[8040201008040201]→^^oMasksGenerated by the BBify'r (http://clrhome.org/resources/bbify/)
:Lbl DrawY:Copy(→r1-Y*32+°IMG+2,L1+2,32):Fill(r1*12+L6,12,ᴱ0100→{L1}r):Bitmap(X,r1,L1):Return
.PIXELM Map scrolling test"|vSAVE"→^^oSAVEL5→^^oIMGReturn!If GetCalc(^^oSAVE)→IMGDiagnosticOffFnOff ClrDraw.Affichage de la mapBitmap(~80→X,~64→Y,IMG)...Petites explications :Les coordonnées X et Y sont compris entre ~160 et 0 (les deux)Car 160+96=256Y-1 c'est une ligne en dessous, et X-1 une colonne à droiteAutre optimisation-X sera donc positif (de même pour -Y)....Boucle principaleWhile 1DispGraphIf getKey(1).Si il n'y a pas le bout de la map en bas!If Y-1<~160Y--.On décale en basVertical -.Pour afficher la ligne 63 manquante63:DrawY()EndEndIf getKey(2).Si il n'y a pas le bout de la map à gaucheIf X+1→X.On décale à gaucheHorizontal +.Pour afficher la colonne de gauche (L comme left) manquanteDrawL()EndEndIf getKey(3).Si il n'y a pas le bout de la map à droite!If X-1<~160X--.On décale à droiteHorizontal -.Pour afficher la colonne de droite (R comme right) manquanteDrawR()EndEndIf getKey(4).Si il n'y a pas le bout de la map en hautIf Y+1→Y.On décale en hautVertical +.Pour afficher la ligne 0 manquante0:DrawY()EndEndEndIf getKey(15)Return.Affiche les lignesLbl DrawY.On copie les 256 pixels d'une ligne de l'appvar dans L1+2Copy(→r1-Y*32+IMG+2,L1+2,32)...On efface la ligne à remplacer parce que la commande vertical +/- ne le fait pasautant faire une optimisation pour remplir les deux premier octets de L1correspondant à la taille de la bitmap à afficher...Fill(r1*12+L6,12,|E0100→{L1}r).Et la c'est magique, la ligne s'affiche Bitmap(X,r1,L1)Return.Pour la colonne de droiteLbl DrawR.Dans cette octet on est en haut à droite de l'écran (buffer)11+L6→r3.Ici le masque de l'écran est 00000001, parce que c'est bit tout à droite que l'on veut modifier|E01→r495Goto Draw0.Pour la colonne de gaucheLbl DrawL.Dans cette octet on est en haut à gauche de l'écran (buffer)L6→r3.Le masque de l'écran est 10000000, parce qu'on veut modifier le bit tout à gauche|E80→r4 and 0 .Affiche les colonnesLbl Draw0...Rappel : HL-X vaut le nombre de colonnesOptimisation assez tordue, nombre de colonnes^8 correspond au nombre de bits qui séparent ledernier octet du bord de l'écran en valeur numériqueDonc quand ça vaut 0, r2 vaut le premier Masks10000000Donc quand ça vaut 1, r2 vaut le deuxième Masks01000000Donc quand ça vaut 2, r2 vaut le troisième Masks00100000Donc quand ça vaut 3, r2 vaut le quatrième Masks00010000Donc quand ça vaut 4, r2 vaut le cinquième Masks00001000Donc quand ça vaut 5, r2 vaut le sixième Masks00000100Donc quand ça vaut 6, r2 vaut le septième Masks00000010Donc quand ça vaut 7, r2 vaut le huitième Masks00000001...Select(-X,{^8+^^oMasks}→r2).le nombre de colonnes/8 + le nombre de lignes (en octet) + le début de pointeur de la map dans HL*32/256-(Y*32)+IMG+2.Pour les 64 lignesFor(64)...Le plus chaud :On masque octet trouvé dans l'appvar pour garder que le bit qu'il nous fautQuand on soustrais par 1 et qu'on divise par 256 :si aucun bit ne correspondait au mask, 0-1=65355 puis /256 ça fait 255Si un bit correspondait au mask alors ça renvoie un nombre en 1 et 128 dans HLHL-1/256 vaudra toujours 0 dans ce cas là (logique)En inversé on créé un nouveau mask qui est soit 255 (un bit correspond au masksoit 0 (aucun bit correspond au mask)En fait cette manip sert juste à aligner le bit trouvé dans l'appvar, au bonemplacement sur l'écran, donc là vient r4 le masque de l'écranEnsuite un or logique permet d'ajouter le bit (ou non) dans le buffer (pointé par r3)Et après il y a une dròle d'optimisation {r3}+12->r3 car ça fait r3+12->r3 en réalité o_o...not({→r1} and r2-1/256) and r4 or {r3}→{r3}+12→r3.On passe la ligne suivante ^^r1+32EndReturn[8040201008040201]→^^oMasksGenerated by the BBify'r (http://clrhome.org/resources/bbify/)
"L'enregistrement dans l'appvar marchait très bien (bravo hayleia), mais maintenant c'est optimisé pour. "Optimisé pour... pour quoi ?
"il me semble que les fonctions d'affichage sont pas très optimisées."Celles que j'ai faites ou les fonctions de l'Axe ?
:Lbl Initialisation:.Chargement de la map dans l'appvar (sauf si on garde celle déjà présente dans l'appvar):.Apparition des worms aléatoire sur le terrain (partie blanche de la map) + gravité (voir moteur physique)::Lbl déplacement:.caméra centré sur un worm:.gestion des sauts à l'aide du moteur physique (seulement lors d'un saut):.Visé avant de tirer (on pourra utiliser des cos et sin préalablement enregistrés dans une liste)::Lbl phase de tire:.Explosions, flammes:.Bref, tout ce qui risque de lagger :)::Lbl caméra:.S'occupe du déplacement de la map::Lbl Moteur physique:.Caméra centré sur l'action:.Gravité + chute:.frottements:.Gestion des dégâts (sauf à l'initialisation):
Après avoir testé pas mal l'éditeur de dessin, je me suis rendu compte qu'il n'éditais pas la map à cause de la barre d'option en bas (je vais donc régler ça).