[Hollywood] Scroll paralax

15 sujets de 1 à 15 (sur un total de 18)

  • 1
  • 2
  • Anonyme

      #8063

      Bonjour,

      Idem que pour le scroll horizontale, mais la, c’est du paralax (en simple, pas de mask)

      Comme d’hab, copier/coller avec un editeur, sauver et lancer le fichier avec hollywood

      Respect

      @VERSION 4,0

      /*Petite config, passer en 320*256 en n’oubliant pas de modifier les valeurs y*/

      @display{width=640,height=480}

      %displaycolor=$000000

      /* Bonjour tous le monde, voici un petit scrolling paralax horyzontale en hollywood*/

      /* D’abord je créé mes 3 brush qui agrémenterons le scroll*/

      Createbrush(1,32,32,#blue)

      Createbrush(2,32,32,#red)

      createbrush(3,32,32,#green)

      /* ici c’est le mask qui permet de créé un faux relief*/

      createbrush(4,28,28,#white)

      /*La je mix mes 3 brush avec le mask*/

      mixbrush(1,4,128) /*le mix brush est géniale, sa permet de créé des effets de lumières sympathiques

      sans manger trop de ressources, 128 représente le niveau de mixage des 2 brush, la valeur va

      de 0 à 256, excelent aussi quand on n’a un sprite de base que l’on veu faire évoluer, style rpg

      ou on met un casque ou épée ou

      bouclier ou armure*/

      mixbrush(2,4,128)

      mixbrush(3,4,128)

      /*je prépare mes variables et mes tableau */

      local x1=0 /*variable qui scroll le fond bleu*/

      local x2=0 /*variable qui scroll le haut rouge*/

      local x3=0 /*variable qui scroll le bas vert*/

      /*avec un petit peux de recherche, on peut créé 1 seul tableau, imaginer cette fonction comme un tableau excel, map1 est la colonne A de la feuille 1, map2 est la colonne A de la feuille 2, et map3 est la colonne A de la feuille 3, mais on peut tout mettre dans la meme feuille sous excel, la pareil grace a Map[A][C]=1 tableau de 3 colonne, super si vous voulez faire une Bdd sous hollywood*/

      map1={} /*init Bdd fond bleu*/

      map2={} /*init Bdd fond rouge*/

      map3={} /*init Bdd fond vert*/

      /* dans le tableau Map, 1 est le numéro de brush 1 et 2 est le numéro de brush 2, ces 2 chiffres représente l’image des brush, donc je fais un tableau d’adresse d’image*/

      Map1={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}

      Map2={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}

      Map3={3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}

      /*un nouveau tableau de coordonnées des brush des tableau du dessus*/

      coor={}

      /* j’insère come valeur dans mon tableau de 40 case des valeur allant de 32 à 32*40-32, pourquoi -32, car la premère brush doit être afficher à 0, mais comme mon test démarre à 1, 1*32=32, la soustraction permet de fair, 1*32-32=0*/

      For cpt=1 to 40

      Coor[cpt]=cpt*32-32

      next

      /*Fonction scroling*/

      Function s_roll()

      flip

      cls

      /*test clavier*/

      if iskeydown(« left »)=true

      x1=x1+4 /*scroll les cases bleus de 4 pixels*/

      x2=x2+2 /*Scroll les cases rouges de 2 pixels*/

      x3=x3+6 /*Scroll les cases vertes de 6 pixels*/

      endif

      If iskeydown(« Right »)=true

      x1=x1-4

      x2=x2-2

      x3=x3-6

      endif

      /*Création de mon écran, je répéte 12 fois ma ligne afin de remplir l’écran de cases bleus*/

      for y=32 to 416 step 32

      For c=1 to 40

      /*j’affiche le tout en m’aidant de mes 2 tableaux et de x1 pour le scroll*/

      Displaybrush(Map1[c],Coor[c]+x1,y) /*12 lignes de bleu*/

      displaybrush(map2[c],coor[c]+x2,0) /*1ligne a y=0 de rouge*/

      displaybrush(map3[c],coor[c]+x3,448) /*1 ligne a y =448 de vert*/

      next

      next

      endfunction

      setinterval(1,s_roll,1)

      begindoublebuffer

      repeat

      waitevent

      forever

      /*C’est cadeau, un petit scroll horizontale parallax, si vous êtes sages vous aurez le scroll rotatif comme dans seek and destroy ;-), vous avez remarquez que les 3 bases contenaient les mêmes chiffres, j’en vois déjà qui disent, mooo c’est nul, il suffisait de mettre 1 et 2 et 3 au displaybrush, ok, mais un scroll ou il y à toujours le meme dessin de 32×32 pixels, c’est pas le must pour faire un jeu, la dans la minibase, mettai se que vous voulais, pour créé un véritable scroll de jeux avec vos propres brush. Vous avez remarquer que c’est moins bordélique que la première routine, c’est normal, en même temp, je vous montre les erreurs à ne pas commettre, maintenant, variable local… ooooh, plus tard, je montrerai comment on optimise le scroll en ressoure gfx afin de gagner en rapidité, je travail comme un tailleur de pierre, je fais d’abord un truc qui fonctionne, puis j’affine et j’optimise, je trouve que c’est une bonne technique*/

      code sans commentaire, majuscule=commande hollywood:

      @VERSION 4,0

      @DISPLAY{WIDTH=640,HEIGHT=480}

      %DISPLAYCOLOR=$000000

      CREATEBRUSH(1,32,32,#blue)

      CREATEBRUSH(2,32,32,#red)

      CREATEBRUSH(3,32,32,#green)

      CREATEBRUSH(4,28,28,#white)

      MIXBRUSH(1,4,128)

      MIXBRUSH(2,4,128)

      MIXBRUSH(3,4,128)

      local y=0

      local x1=0

      local x2=0

      local x3=0

      local cpt=0

      map1={}

      map2={}

      map3={}

      coor={}

      Map1={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}

      Map2={2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}

      Map3={3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}

      For cpt=1 to 40

      Coor[cpt]=cpt*32-32

      next

      Function s_roll()

      flip

      cls

      IF ISKEYDOWN("LEFT")=TRUE

      x1=x1+4

      x2=x2+2

      x3=x3+6

      ENDIF

      IF ISKEYDOWN("RIGHT")=TRUE

      x1=x1-4

      x2=x2-2

      x3=x3-6

      ENDIF

      FOR y=32 TO 416 STEP 32

      FOR c=1 TO 40

      DISPLAYBRUSH(map1[c],coor[c]+x1,y)

      DISPLAYBRUSH(map2[c],coor[c]+x2,0)

      DISPLAYBRUSH(map3[c],coor[c]+x3,448)

      NEXT

      NEXT

      ENDFUNCTION

      SETINTERVAL(1,s_roll,1)

      BEGINDOUBLEBUFFER

      REPEAT

      WAITEVENT

      FOREVER

      AmiDARK

        #124626

        Salut,

        il y a pas un moyen avec des balises de rendre le code plus clair et lisible ? Parce que là … l’initiative est cool … mais le résultat peut rebuter …

        @ +

        AmiDARK.

        Anonyme

          #124627

          salut,

          oups… lol, je reste malgrès tout un barbare en code, j’ai mis que le code après avec des majuscule pour les commandes hollywood. Pendant que je te tien, si je mets un code 3D que j’ai fais avec hollywood, tu pourra vérifier si je m’y prend bien… j’essaierai d’être claire sur le code.

          Merci

          Respect

          henes

            #124628

            {
            printf("coucou");
            {
            printf("coucou aussi");
            }
            }
            [/code ]

            Les balises code (sans l’espace final !) préservent l’indentation d’un source.
            [code ]

            {

            printf(« coucou »);

            {

            printf(« coucou aussi »);

            }

            }

            [/code ]

            Les balises code (sans l’espace final !) préservent l’indentation d’un source.

            Anonyme

              #124629

              Bonjour henes

              Merci pour l’info, c’est sympa

              Grace a cet commande je pourrais afficher mes sources plus clairement

              Respect

              sayasupacrew

                #124630

                c’est fou comme c’est proche des instructions du basic.

                https://www.youtube.com/@sayasupa

                Anonyme

                  #124631

                  Bonjour sayasupacrew,

                  Oui, c’est même très proche… Et le mieux, c’est que développer, c’est extremment simple.

                  Rejoint nous sur hollywood ;-)

                  Respect

                  Tarzin

                    #124632

                    Hello Artblink,

                    Quand je bricolais sous amos, j’utilisais une autre technique pour faire du scroll parallax, en cherchant un peu tu pouvais faire des scrolls sur 15 plans sans bouffer de temps machine.

                    Le principe:

                    – tu crées 4 écrans logiques (donc non visibles)

                    – sur le 1er, tu affiches tous tes sprites pour la position 1 de ton scroll parallax

                    – sur le 2ème, tu décales tes sprites et affiches donc la position 2

                    – sur le 3ème, tu décalles encore ta position 2 et crées donc la position 3

                    – sur le 4 ème du décales encore la position 4 ce qui dois aussi te permettre de reboucler avec la position 1

                    Une fois cela fini, tu crées une routine qui fait cylcer les 4 écrans logiques vers l’écran physique en une VBL. Si tu as bien goupillé ton coup, ça te fera un scroll parallax super fluide qui ne prend rien en temps machine.

                    A noter que cette technique peut être utilsée également pour des sprites infinis, des Shaded bobs (mais là, il faut activer la transparence), etc…

                    Je n’ai pas encore tenté de convertir ce principe sous Hollywood mais ça devrait fonctionner (sous réserve de trouver les bonnes commandes)

                    Voilà ma petite contribution ;-)

                    Anonyme

                      #124633

                      Bonjour,

                      Tu te rappel de kid chaos, le fond de scroll été en zoom, se qui donnée de la profondeur, bin, je crois que j’ai trouvé. En faite je chercher à faire un scroll comme seek and destroy, et j’ai trouvé une sorte de scroll avec effet de zoom par pur hasard, comme quoi le hasard fais bien les choses, je fais quelque test pour qu’il soit bon et je poste, car la il y a des accrocs et des erreurs d’affichage.

                      Pour l’infos écran, je pense que sous hollywood, y’a pas besoin, le problème c’est que je connais pas le hardware, la seul solution, testé tout avec un maximum de graph/brush/couleur, va falloir du temp. Par contre, le multi écran, je sais pas si hollywood gère sa! Je planche

                      Merci

                      Respect

                      critonsgate

                        #124634

                        Euh bonne question, je ne sais pas si hollywood gère les multiécrans, au mieux il le cache mais dans tous les cas il faut tout calculer pour les positions avant d’afficher ? Ou j’ai peut être rien compris…

                        Tarzin

                          #124635

                          mais dans tous les cas il faut tout calculer pour les positions avant d’afficher

                          Oui, tu fais précalculer toutes tes positions de sprites au préalable sur chaque écran et ensuite tu ne fais qu’un affichage des écrans.

                          C’est un peu comme si tu faisais finalement un slideshow de 4 écrans pour créer une animation.

                          Quand je dis écrans, ça peut être une zone mémoire qui est affichée par la suite à l’écran. J’ai cru voir une commande de ce type mais faut que je reprenne la doc.

                          Anonyme

                            #124636

                            Bonjour,

                            YEs, il y a des commandes mémoire, je ne les aient pas en tête mais pour optimiser tes ressources, tu peux effacer des images de la mémoire ou bank de sprite quand tu n’en n’a plus besoin

                            La commande Begindoublebuffer fais déjà un double écran, mais sa reste à vérifier.

                            Respect

                            critonsgate

                              #124637

                              Je confirme pour la commande begindoublebuffer, ça crée bien deux écrans (un vu en facade et l’autre en arriere plan).

                              Pour les mémoires il y a les memblock mais j’avoue que j’ai pas encore regardé de plus près ces commandes.

                              Anonyme

                                #124638

                                Salut citronsgate,

                                Pour moi sa change pas beaucoup, déjà du temp du basic locomotive, il y avait peek/call/poke, des commandes présentent dans hollwood. Par contre hollywood va plus loin avec le stockage en ram direct, on controle le niveau de la mémoire. On peux effacer de l’image, du son et même du code gourmand afin de libéré de la mémoire pour d’autre routine, mais celle qui ont été effacer peuvent être rappeler plus tard dans le programme. Pour info, tu peux créé une image avec Dpaint de plusieur milier de pixel de long et faire scroller l’image en lisant directement le fichier sur le disque dur, a toi de définir quand tu veux lire une partie de l’image. Si tu veux je te mets le code, tu verra, c’est hyper simple.

                                Respect

                                AmiDARK

                                  #124639

                                  Et une technique encore plus sympa permettait en refaisant ton copper toi même sous Amos de faire des scrollings parallaxes et différentiels sur autant de plans que tu veux sans que cela ne bouffe ni en ressources CPU ni en mémoire ;)

                                  Techniquement, il doit toujours être possible de créer un écran plus grand que la partie visible (avec un modulo) et en modifiant l’adresse mémoire dans les layers, de scroller … histoire de n’afficher que 2 paste image par frame rendu ;)

                                  Enfin, théorie … car jamais vérifié avec les SDK actuels si c’est possible.

                                  @+

                                  AmiDARK.

                                15 sujets de 1 à 15 (sur un total de 18)

                                • 1
                                • 2
                                • Vous devez être connecté pour répondre à ce sujet.

                                Forums AmigaOS, MorphOS et AROS Développement [Hollywood] Scroll paralax

                                Amiga Impact