Salut
Je fait en ce moment mon premier jeu, en lua, et je me demande comment faire un gestion précise des collision balle / "paddle" comme ce jeu : http://www.ponggame.org/
Je pensais stocker le milieu du "paddle" (je ne sais plus comment on dit en français ) dans une variable ce qui donnerait 96/2 pour ensuite calculer la différence entre le point d'impact de la balle le centre du paddle (96/2).
Mais je suis un peu perdu avec tout ça, si quelqu'un pourrait m'aider cela serait sympa merci, sinon il me reste la solution des intervalles (entre 96/2 et 96 la balle rebondit vers le bas, par exemple) mais j'aimerai faire quelque chose de précis.
Merci par avance
heu .. c'est quoi 96/2 ? une coordonnée ? elle est variable ou pas ??
96 c'est la hauteur du sprite du paddle en pixel (paddleY), donc le centre : 96/2
Si tu veux un truc réaliste, utilises https://love2d.org/wiki/love.physics avec un world sans gravité ? A tester.
Si tu ne veux pas utiliser la physique, je suis trop nuls en math pour te sortir un formule qui te permettrai de simuler l'angle de sortie de la balle par rapport a l'angle d'entrée + la vitesse et la vélocité de la raquette + le point d'impacte sur la raquette
Sinon, la solution la plus simple, faire un truc cohérent mais random
je vais faire un système d'intervalle alors, je vais diviser la raquette en 5 zones (2 supérieur, le centre, 2 inférieur) et changer la vitesse de l'ordonnée en fonction de la zonne de contact balle/raquette.
sachant que le mouvement de la balle se fait comme cela :
ballX = ballX - ballSpeedX * dt
ballY = ballY + ballSpeedY * dt
Enfin je vais bien trouver
En tout cas, si tu fais ca pour t'entrainer je te conseil de faire quelque chose de simple et de finir ton jeu !
Une fois que t'as fini ton pong basic, rien ne t'empeche de le modifier et d'en faire un pong gravitationnel avec changement de gravité et tout ce qui va bien (coup spéciaux, blackhole)... :D
Oui, faire simple pour un début, c'est pour ça que je vais faire un système d'intervalle
Par contre c'est un peu le bordel dans mon code haha
Une fois le pong réussi je pensais faire un casse brique.
Si je me souviens bien, tu peux faire un simili de POO en Lua, si ca peut t'aider a organiser ton code...
http://lua-users.org/wikiwiki/ObjectOrientationTutorial
oui je sais, j'ai une une bibliothèque rxi classic(https://github.com/rxi/classic), c'est plutôt bien fait, après je sais pas si c'est bien pour débuter, j'ai commencer dimanche dernier ^^
Le lua est vraiment pas mal, même pas une semaine et j'ai déjà fait deux joueur sur le pong qui ne peuvent pas sortir de l'écran, et avec une balle qui se déplace et rebondit sur les bord supérieur et inférieur de la fenêtre.
J'ai pas fait de menu par contre, ça sera pour le prochain jeu je pense, faut surement stocker dans une variable sur quel menu du jeu on est, et exécuté les bout de codes correspondant au jeu si la variable est égale a jeu (par défaut elle est sur menu) et passé de menu a jeu en cliquant sur un bouton "jouer"... Enfin je verrais au moment voulu, je bidouillerai tout ça ^^ haha
C'est ca. Renseigne toi sur le game states managment
Le 11 janvier 2017 à 21:00:35 hself a écrit :
C'est ca. Renseigne toi sur le game states managment
j'ai vu juste alors, je vais voir ça
autre question, quand la balle sort de la fenêtre, le score du côté en question augmente de 1, mais comment on fait pour supprimer la balle ? Hier j'ai testé et le score augmentait sans s'arrêter car la balle existait encore en dehors de la fenêtre (et remplissait donc la condition pour augmenter le score).
Après quelques recherche il faudrait stocker la balle dans un tableau puis faire table.remove(ball) ainsi qu'une variable booléenne testant si la balle est "en vie" ou non, pour ensuite la faire ré-apparaitre dans le cas échant (avec un if contenant le code ballNew()) une fois la condition remplie ?
Merci
Le 11 janvier 2017 à 23:50:22 CPUGamer a écrit :
autre question, quand la balle sort de la fenêtre, le score du côté en question augmente de 1, mais comment on fait pour supprimer la balle ? Hier j'ai testé et le score augmentait sans s'arrêter car la balle existait encore en dehors de la fenêtre (et remplissait donc la condition pour augmenter le score).Après quelques recherche il faudrait stocker la balle dans un tableau puis faire table.remove(ball) ainsi qu'une variable booléenne testant si la balle est "en vie" ou non, pour ensuite la faire ré-apparaitre dans le cas échant (avec un if contenant le code ballNew()) une fois la condition remplie ?
Merci
game states managment si tu sais quand le round (aka la balle en cours) est fini tu peux en recréer un nouveau.
Donc en gros quand la balle sort de la fenêtre, tu increméntes le score, et tu reset (nil ?) le jeux... Ca commence a devenir complexe ?
Je peux plus edit donc bon...
Ne t'inquietes pas, faire un vrai jeux (et ce, peu importe la complexité de celui-ci) c'est fastidieux, long, et épuisant
Persévère, apprends et ce sera de plus en plus simple!
ça devient complex là, je pense que je vais suivre un autre tuto en plus, j'ai vu qu'il y avait une librairie pour les collision, je vais tranquillement suivre le tutot car sinon en allant trop vite je risque de faire des faux pas je pense ^^
Sinon oui, pas de problème, je suis motivé à bloc, quand je vais sur des forums anglais voir ce qu'on fait les autres ça me boost ^^
Le 11 janvier 2017 à 23:50:22 CPUGamer a écrit :
autre question, quand la balle sort de la fenêtre, le score du côté en question augmente de 1, mais comment on fait pour supprimer la balle ? Hier j'ai testé et le score augmentait sans s'arrêter car la balle existait encore en dehors de la fenêtre (et remplissait donc la condition pour augmenter le score).Après quelques recherche il faudrait stocker la balle dans un tableau puis faire table.remove(ball) ainsi qu'une variable booléenne testant si la balle est "en vie" ou non, pour ensuite la faire ré-apparaitre dans le cas échant (avec un if contenant le code ballNew()) une fois la condition remplie ?
Merci
Faut pas se prendre la tête comme ça.
balle = {x = 100, y = 100} (position de départ)
si la balle touche le haut, le bas ou un pad tu fais x = x + speed*dt (ou - ,ou y suivant la direction quoi) et si la balle touche le fond tu fais juste score +1 et ball.x = 100, ball.y = 100 (tu la remet à la position de départ).
Le 20 janvier 2017 à 19:28:20 3NI41P4C a écrit :
Le 11 janvier 2017 à 23:50:22 CPUGamer a écrit :
autre question, quand la balle sort de la fenêtre, le score du côté en question augmente de 1, mais comment on fait pour supprimer la balle ? Hier j'ai testé et le score augmentait sans s'arrêter car la balle existait encore en dehors de la fenêtre (et remplissait donc la condition pour augmenter le score).Après quelques recherche il faudrait stocker la balle dans un tableau puis faire table.remove(ball) ainsi qu'une variable booléenne testant si la balle est "en vie" ou non, pour ensuite la faire ré-apparaitre dans le cas échant (avec un if contenant le code ballNew()) une fois la condition remplie ?
Merci
Faut pas se prendre la tête comme ça.
balle = {x = 100, y = 100} (position de départ)
si la balle touche le haut, le bas ou un pad tu fais x = x + speed*dt (ou - ,ou y suivant la direction quoi) et si la balle touche le fond tu fais juste score +1 et ball.x = 100, ball.y = 100 (tu la remet à la position de départ).
sauf que ça ne fonctionnait pas le score augmentait sans s'arrêter le temps que la balle revienne.
Sinon le "jeu" est fini, un menu avec deux boutons, un score, un gagnant désigné au bout de 10 points...