Casse-Briques 64 V1

5 réflexions au sujet de “Casse-Briques 64 V1”

  1. Super !

    Et du coup, comment tu as géré l’angle de rebond sur la raquette ? et le fait que la balle rebondisse sur les bords d’une brique ?

  2. Salut Gilles,

    Pour la première question du rebond sur la raquette, j’ai fait en sorte que la trajectoire horizontale de la balle change en fonction de la distance entre le centre de la balle et le centre du pad. Comme j’ai différentes difficultés qui changent la taille du pad, j’ai fait en sorte que l’angle de la trajectoire soit plus ou moins amplifiée selon sa taille :

    balle.angle = math.rad(-90) + math.rad((150/pad.largeur)*(balle.x – pad.x))
    balle.vx = math.cos(balle.angle)

    Pour la deuxième question, en regardant le code d’origine, j’ai compris qu’on détectait si la balle touchait une brique en regardant si son centre était dans la case correspondante du tableau où sont stockées les briques. Mais le problème c’est qu’on inversait toujours la trajectoire de la balle pour la renvoyer vers le bas même si le centre de la balle entrait par la gauche ou par la droite.

    local c = math.floor((balle.x / brique.largeur)) + 1
    local l = math.floor((balle.y / brique.hauteur)) + 1

    if l > 0 and l = 1 and c = 1 and h = 1 and c = 1 then
    niveau [h][c] = niveau [h][c] – 1
    balle.vy = – balle.vy
    balle.y = h*brique.hauteur + balle.rayon
    score = score + points*multi
    if scoreMax = 1 and b = 1 and c = 1 then
    niveau [b][c] = niveau [b][c] – 1
    balle.vy = – balle.vy
    score = score + points*multi
    if scoreMax = 1 and b = 1 and l = 1 then
    niveau [l][g] = niveau [l][g] – 1
    balle.vx = – balle.vx
    balle.x = g*brique.largeur + balle.rayon
    score = score + points*multi
    if scoreMax = 1 and d = 1 and l = 1 then
    niveau [l][d] = niveau [l][d] – 1
    balle.vx = – balle.vx
    balle.x = (d-1)*brique.largeur – balle.rayon
    score = score + points*multi
    if scoreMax <= score then
    scoreMax = score
    end
    end
    end

    Ca marche plutôt bien même si je dois avouer qu'il y a encore des petits soucis, vu que du coup les collisions ne sont pas gérées exactement comme si on envoyait une balle ronde sur les briques, mais plutôt une croix ! Mais bon au bout de 4 heures de réflexion j'étais quand même bien content de ce système 🙂

    La prochaine étape c'est donc d'essayer de trouver comment calculer les collisions comme si la balle était réellement… une balle lol

  3. Oulah désolé il y a une partie de mon commentaire qui a pas été prise semble-t-il…

    En gros j’ai calculé les collisions sur les briques à partir de 4 emplacements au lieu du centre de la balle, à savoir ses extrémités : haut, bas, gauche et droite, en faisant ça :

    local h = math.floor((balle.y – balle.rayon) / brique.hauteur) + 1
    local b = math.floor((balle.y + balle.rayon) / brique.hauteur) + 1
    local g = math.floor((balle.x – balle.rayon) / brique.largeur) + 1
    local d = math.floor((balle.x + balle.rayon) / brique.largeur) + 1

    (la suite du code est déjà dans le commentaire précédent)

  4. Oh yes !!

    C’est une bonne idée ça ! Perso, j’avais poussé le vice à créer 4 masques de collisions sur chaque brique. Bord gauche, bord droit, haut ou bas de la brique, en fonction du centre de la balle. Chaque zone faisait genre 5 pixels de larges (pour les bords) ou 5 pixels de haut pour le dessus et dessous de la brique. Comme on sait sur quelle brique est rentrée en collision la balle, on sait déterminer en temps réel ses 4 zones de collisions.
    Le problème étant que si on tapait dans un coin de la brique, ça posait problème, par défaut ça prenait la tranche de la brique… il aurait aussi fallu créer 4 zones supplémentaires pour les chaque coin de la briques…

    Bien joué en tout cas et merci pour tes précisions 😉

  5. Ah oui c’est une bonne idée aussi, j’avais pas du tout pensé à calculer la collision à partir des briques !

    Merci à toi, je trouve ça cool de voir d’autres solutions que la sienne 🙂

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.