Objet Panorama (ou fonction pour Sprite)

Bonjour,

Un autre détail qui tue (forcément).
J’aimerai avoir un décor qui boucle sur lui-même. Genre un fond de ciel qui suit les mouvements de la caméra, mais qui se raccorde à lui-même.
Ainsi avec une seule image de ciel, on a un défilement continu et fluide.

Dans RPG maker, on parle de panorama (ou Pane dans le langage ruby). C’est très pratique pour gérer les brouillards, fond de décor et autres trucs de ouf trop bien.
Y-a-t-il un moyen d’implémenter cela dans GD ?

Soit par un objet dédié, soit par une fonction supplémentaire dans Sprite.
A moins que cela ne soit à gérer dans une caméra ou un calque, avec une case à cocher. Peut être plus simple à paramétrer pour l’utilisateur de cette manière.
On crée un calque, on le marque comme panorama, et GD le fait boucler sur lui-même lorsque ses caméras bougent.

Merci d’avance. :slight_smile:

Salut,

Le truc, c’est que sur RPG Maker, il y a qu’une seule vue (l’utilisateur ne voit que un endroit de la map). Donc, l’objet créée le nombre d’image voulu pour remplir l’écran et en récréé si besoin (lors d’un mouvement).
Problème : dans GD, on peut avoir autant de vues que l’on veut dans autant de calques que l’on veut, c’est donc pas facile de faire cela. :wink:

Mais on peut toujours gérer ça manuellement.

Je crois que ça fonctionne de manière beaucoup plus maline que ça.
Quand un pixel est en dehors de l’écran, il est transposé à la coordonnée opposée. Ainsi, si une colonne de 10 pixels est hors écran à gauche, elle est reproduite sur 10 pixels à droite.
C’est le même principe que pour une texture, que l’on peut raccorder logiciellement tout en modifiant son offset. C’est comme ça que l’on simule des nuages qui passent dans le ciel.

Dans le cas de GD, s’il est possible de gérer ça manuellement avec un scrolling horizontal (une image à gauche, une image au milieu et une image à droite), c’est un peu plus compliqué sur deux axes. Et augmente nettement la conso mémoire (on passe de 3 à 9 cases, à gérer en permanence selon le sens du déplacement).
Alors qu’une gestion en dur, genre “Pour chaque pixel de image, si pixel est hors camera sur x, pixel.x = screen.width()-|pixel.x|”, résoudrait le problème.

Reste à voir si les camera permettent ce genre de manip.

Peut être qu’un objet “Arrière plan répété” ( “Tiled background” ) répondrait à la problématique ?

Il s’agirait d’un objet redimensionnable à l’envie, mais qui ne déformerait pas son image contrairement à un Sprite, mais la répéterait. Cela permettrait par exemple la création d’étendue d’herbe, de ciels qui se répètent…
Dans ton cas, il y aurait l’inconvénient de devoir spécifier la taille de l’objet, mais ça serait un moindre mal à payer : Ce sera dans tous les cas plus pratique que de gérer ça soit même avec 9 sprites, et plus modulable qu’un “calque en mode panorama”.

Ce serait toujours ça de gagner, en effet.
Mais je m’étonne qu’il n’y ait pas un moyen de tweaker la camera d’un calque pour la faire “looper” sur la même zone.

On peut toujours s’arranger : :slight_smile: TiledBack.zip (1.01 MB)
Les évènements ne sont pas du tout compliqué, j’ai juste contourné l’absence/bug du modulo dans la version actuelle avec la formule y mod n = y - (n * int(y/n)). Le principe est d’utiliser le modulo pour autoriser un déplacement de la caméra, mais qui va être borné et ainsi va faire “looper” le fond.

Ouais, c’est sympa comme effet. Mais on sent quand même un lag lors des déplacements en diagonale. Et c’est un peu dommage de devoir paver 9 images identiques alors que sous RM (encore lui) une image suffit pour obtenir le même résultat.

En piece jointe, le même projet, mais avec une texture de sol raccordable. Nettement plus bluffant.
TiledBack.zip (904 KB)

[…]

Non, RPG maker est un logiciel payant (mai souvent cracké) développé par un studo japonais ou chinois.

[…]