Tank hunter

5 réflexions au sujet de “Tank hunter”

  1. Merci beaucoup pour ton devlog flashjaysan !

    Cela va peut-être m’enlever une épine du pieds !

    En effet, j’ai la même problématique que toi je dois faire tourner le décor au tour de mon personnage, et je n’arrive pas à faire cela avec love.graphics.draw en essayant de positionner les paramètres ox et oy, pourtant cela devrait marcher … je dois mal m’y prendre.

    Avais-tu essayé également ?

  2. Salut,
    J’ai regardé tes sources.
    Ton code est super bien modularisé.
    Tellement propre, qu’on peut se passer de commentaire pour le comprendre.
    A prendre en exemple.

    Pour une rotation de la scène autour d’un point (le tank).
    On peut faire simple :.
    Comment ferait-on avec du papier et un cadre ?
    On dessine la scène (décors et sprites) à l’endroit sur la feuille. (Sans rotation)
    Et on tourne la feuille dans le cadre.
    Il faut juste prévoir une feuille un peu plus grande que le cadre.

    Et en Love2D ? Les Canvas.
    Il faut utiliser le canvas comme un feuille de dessin, qu’on va placer dans le cadre (l’écran).
    Le canvas permet de rediriger les commandes graphiques dans un écran caché.

    0) Créer un canvas en dehors de la boucle draw, au début du programme
    canvas = love.graphics.newCanvas(800, 600)

    Dans le draw, ça se fait en 2 temps :

    1) on envoie les commandes graphiques dans le canvas
    love.graphics.setCanvas(canvas)
    — ici tout est dessiné dans le canvas
    love.graphics.clear()
    love.graphics.setBlendMode(« alpha »)
    love.graphics.setColor(1, 0, 0, 0.5)
    love.graphics.rectangle(‘fill’, 0, 0, 100, 100)
    2) on redirige les commandes graphiques vers l’écran et
    love.graphics.setCanvas()
    — ici tout est dessiné à l’écran (comme normalement)
    — jouer sur les paramètres (x,y,r) ou changer la couleur
    love.graphics.draw(canvas, x, y, r, sx, sy, ox, oy, kx, ky)
    — c’est l’endroit idéal pour afficher un HUD

    En bref, entre le 2 commandes setCanvas, tout est dessiné dans le canvas.
    Ensuite on peut l’afficher comme on veut (taille angle couleur transparence )

    J’espère vous donner l’envie d’utiliser des canvas.
    Je ne code pas en Lua, donc je ne sais pas si le code est bon.
    Mais le principe est le même dans beaucoup de moteurs.

    C’est très pratique pour ne pas se prendre la tête avec des calculs compliqués.
    A utiliser aussi pour le zoom, le screenshake, et effets en tout genre

    Inconvénient : peut-être moins rapide

    voir la doc Love2D ici

  3. J’ai justement détaillé la procédure pour ceux qui en auraient besoin par la suite. J’espère juste que ça pourra te servir.
    non, je n’ai justement pas voulu utiliser les origines de chaque image car je souhaitais apprendre à utiliser les transformations et les appliquer globalement plutôt que modifier chaque image individuellement. Mais attention, il faut voir selon les cas. Dans mon projet, c’est tout qui tourne c’est pourquoi les transformations sont utiles. Si tu veux appliquer pour quelques images seulement, tu peux sauvegarder l’état, faire tes transformations, afficher tes images et rétablir l’état ou bien si c’est plus simple, ne modifier l’état que de certaines images. Il faut voir ce qui est le plus logique.

  4. Merci d’avoir pris le temps de jeter un oeil aux sources. Ca fait plaisir.
    Oui, on m’avait soufflé l’idée des canvas que je garde sous le coude lors de projets plus gros car ça simplifie grandement les choses. Ici, l’objectif était de comprendre comment faire avec les transformations graphiques.

  5. Merci beaucoup doumdoum pour avoir partagé toutes ces informations avec nous !

    Si je comprends bien l’intérêt des canvas est de fluidifier les affichages et de minimiser les draw inutiles pour des éléments statiques c’est ça ? Y-t-il d’autres intérêts ?

Laisser un commentaire

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.