Open Zer0zer0x opened 7 years ago
Je pense que je n'ai pas très bien compris ta demande :S.
En gros, tu voudrais une commande similaire à camera_scroll_towards(x, y, nb_steps, easing_function, position
-- genre camera_move_style(nb_steps, easing_function, position)
-- mais qui ne soit pas bloquante et qui définisse la manière dont la caméra bouge lorsque le héros se déplace ? C'est bien ça ?
Lorsque le héros se déplace, oui. :) http://rpgmakersource.com/freebies/systems/enhanced-camera/
Ce script est cool, mais il buggue un peu avec les animations de combat sur la map... (pour ça, y'a un patch, qui fonctionne bien, mais bon...)
En fait on peut déjà le faire avec camera_scroll_towards(x, y, nb_steps, *easing_function, *position)
...
En mettant :InOutQuad
ou :OutQuad
en easing_function par exemple... Il faut que je documente les easing_functions.
Tu as aussi :
camera_scroll_towards_player(nb_steps, *easing_function, *position)
camera_scroll_towards_event(id, nb_steps, *easing_function, *position)
Typiquement, les easing_functions, tu as :
Linear
Quad
Cubic
Quart
Quint
Sine
Circ
Back
Elastic
Bounce
Pour chacune de ces fonctions, tu dois mettre devant soit :
:In
:Out
:InOut
Par exemple: :OutElastic
Ca se comporte comme le HTML5 : http://easings.net/fr
...Qui est le gros débile qui a mit :top_left
par défaut pour "*position
" ??? O_o Putain...
J'ai testé pour faire une caméra qui suit le héros avec du retard, mais tant que la caméra suit la position square_x square_y de l'id donné et non la position screen_x screen_y ou pixel_x/pixel_y, ça ne marchera pas, c'est dégueulasse. Il faut changer ça.
Sachant que j'ai implémenté la commande, il doit s'agir de moi :S. Je crois me souvenir qu'il s'agissait de la valeur par défaut : déplacer la caméra vers un point A positionne automatiquement ce point en haut à gauche de l'écran.
Parcontre, j'ai du mal à cerner le problème que ça cause :(.
@Jauke : les reproches formulés sur le ton "un peu trop agressif" de @Zer0zer0x s'applique...aussi à toi :) merci.
Ben quand on veut déplacer la caméra vers un personnage... On ne pense pas à le mettre tout en haut à gauche de l'écran... on centre la caméra dessus. x) Du coup dans 90% des cas l'utilisateur sera obligé de renseigner le easing function et la position car il ne voudra pas la valeur par défaut de la position qui est... peu naturelle.
Pour le problème d'avoir un scrolling qui cible le square_x / y et non le screen / pixel_x / y, c'est que ça fonctionne très bien si on veut une caméra qui se déplace vers tel ou tel événement fixe, mais très mauvais si on veut que la caméra suive cet événement en temps réel. La caméra suivra chaque changement en square_x / y et donc attendra chaque fois que l'événement soit à plus de la moitié de son déplacement d'une case, pour bouger... En gros ça saccade net.
Le problème si on a un scrolling qui cible à l'inverse le screen / pixel_x / y et non le square_x / y, c'est qu'on peut se retrouver avec une caméra qui ne se retrouve pas centrée sur les carreaux... Est-ce un problème ?
Avec les commandes actuelles, j'imagine que ça enregistre et utilise la position de l'événement ou héros au moment ou on lance la commande, mais pendant le temps de scrolling si l'événement ou le héros s'est déplacé, le scrolling se termine à la position où se trouvait le héros ou l'événement et n'aura pas suivi son déplacement. Faut-il actualiser le x/y de la cible du scrolling pendant le scrolling ? (ça se trouve c'est déjà le cas, je n'ai pas vérifié)
Autre chose qui me dérange, c'est le paramètre "nb_steps"... Quand bien même ce serait nommé comme ça dans les scripts par défaut (j'en doute puisqu'on parle de "speed"), "nb_steps" ne correspondrait pas plutôt à "duration", qui est un terme bien plus clair ?
Dans la documentation, ça serait bien de donner des exemples pour le paramètre speed
, je suppose que ça correspond aux vitesses possibles des événements (comme le défilement d'écran par défaut) alors il faut les lister, et dire si on peut donner une vitesse supérieure à celles par défaut, que ça correspond à une vitesse de pixels par frame, et aussi qu'on peut donner une vitesse plus précise en float. (ce qui doit être le cas, si non ce serait pratique.)
En plus de mettre position
en :centered
par défaut, ce qui me paraîtrait plus logique, on pourrait ajouter la possibilité de donner pour valeur un tableau [dx, dy], la position relative en pixel de la caméra par rapport à la cible. Par exemple si on met [0, -50], la caméra serait centrée 50px au dessus de la cible.
Il n'y a pas de wait_flag optionnel dans ces commandes ?
Au final ça serait effectivement pas mal d'ajouter camera_follow_event(id, *speed_min, *speed_max, *deceleration, *acceleration, *position)
et camera_follow_player(*speed_min, *speed_max, *deceleration, *acceleration, *position)
... Ce qui permettrait d'ignorer les problèmes 2. et 3. et répondre à la demande initiale.
speed_min
: Vitesse de départ et fin du mouvement de la caméra. Jamais comptée pour supérieure à la vitesse actuelle de la cible.speed_max
: Vitesse intermédiaire atteinte pour scroller vers la cible quand elle est loin de la position actuelle de la caméra. Jamais comptée pour inférieure à la vitesse actuelle de la cible.deceleration
: La valeur de décélération de la caméra quand elle rattrape la cible qui s'est arrêtée.acceleration
: La valeur d'accélération de la caméra quand elle rattrape la cible qui commence à se déplacer.camera
.@xvw : Je suis désolé, mais seul un gros débile va mettre :top_left par défaut... Il suffit de tester la commande pour se dire "ok..."
En gros, si je suis pas trop fatigué, ça donnerait un truc comme ça :
(speed < target_speed) ? speed += acceleration : speed -= deceleration
speed = [[[target_speed, speed_max].max, speed].min, speed_min].max
camera_pixel_x = [camera_pixel_x + speed, target_pixel_x].min if camera_pixel_x < target_pixel_x
camera_pixel_x = [camera_pixel_x - speed, target_pixel_x].max if camera_pixel_x > target_pixel_x
camera_pixel_y = [camera_pixel_y + speed, target_pixel_y].min if camera_pixel_y < target_pixel_y
camera_pixel_y = [camera_pixel_y - speed, target_pixel_y].max if camera_pixel_y > target_pixel_y
avec target_speed = 0 si la cible est immobile.
Salut ! Dans pas mal de projets RPG Maker XP, des gens utilisaient un script pour que la caméra défile légèrement en retard... ce qui tombe mal, c'est que personne ne l'a codé proprement sur VX Ace (quand on affiche une anim' de combat sur la map, c'est la merde, et quand on déplace la caméra puis qu'on la recentre sur le héros ce n'est jamais recentré correctement, etc.).
https://www.youtube.com/watch?v=wYQ90ed2ZNk
Serait-il possible de créer une commande comme "camera_move_style" ?
Désolé, c'est un peu HS... :D
Have fun.