[Hollywood] Scroll paralax
15 sujets de 1 à 15 (sur un total de 18)
- 1
- 2
-
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
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
{
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.
Bonjour henes
Merci pour l’info, c’est sympa
Grace a cet commande je pourrais afficher mes sources plus clairement
Respect
c’est fou comme c’est proche des instructions du basic.
https://www.youtube.com/@sayasupa
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
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
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
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…
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.
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
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.
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
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