CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Lua LÖVE collision pong balle/joueur

News culture
La Planète des Singes : Le Nouveau Royaume - la révolution simienne est en marche !
DébutPage précedente
1
Page suivantePage suivante
CPUGamer CPUGamer
MP
Niveau 9
11 janvier 2017 à 18:57:14

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 :hap:) 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

nikko45 nikko45
MP
Niveau 9
11 janvier 2017 à 19:25:55

heu .. c'est quoi 96/2 ? une coordonnée ? elle est variable ou pas ??

CPUGamer CPUGamer
MP
Niveau 9
11 janvier 2017 à 19:41:34

96 c'est la hauteur du sprite du paddle en pixel (paddleY), donc le centre : 96/2

hself hself
MP
Niveau 7
11 janvier 2017 à 19:54:27

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 :fou:

Sinon, la solution la plus simple, faire un truc cohérent mais random :hap:

Message édité le 11 janvier 2017 à 19:57:27 par hself
CPUGamer CPUGamer
MP
Niveau 9
11 janvier 2017 à 20:08:15

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 :hap:

hself hself
MP
Niveau 7
11 janvier 2017 à 20:08:40

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

CPUGamer CPUGamer
MP
Niveau 9
11 janvier 2017 à 20:16:29

Oui, faire simple pour un début, c'est pour ça que je vais faire un système d'intervalle :oui:
Par contre c'est un peu le bordel dans mon code haha

Une fois le pong réussi je pensais faire un casse brique.

hself hself
MP
Niveau 7
11 janvier 2017 à 20:23:33

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

CPUGamer CPUGamer
MP
Niveau 9
11 janvier 2017 à 20:45:03

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

hself hself
MP
Niveau 7
11 janvier 2017 à 21:00:35

C'est ca. Renseigne toi sur le game states managment

CPUGamer CPUGamer
MP
Niveau 9
11 janvier 2017 à 21:02:10

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

Message édité le 11 janvier 2017 à 21:02:26 par CPUGamer
CPUGamer CPUGamer
MP
Niveau 9
11 janvier 2017 à 23:50:22

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

Message édité le 11 janvier 2017 à 23:54:22 par CPUGamer
hself hself
MP
Niveau 7
12 janvier 2017 à 00:37:52

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 ? :hap:

Message édité le 12 janvier 2017 à 00:40:20 par hself
hself hself
MP
Niveau 7
12 janvier 2017 à 00:54:13

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 :-d
Persévère, apprends et ce sera de plus en plus simple!

CPUGamer CPUGamer
MP
Niveau 9
12 janvier 2017 à 11:30:07

ç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 ^^

3ni41p4c 3ni41p4c
MP
Niveau 6
20 janvier 2017 à 19:28:20

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).

Message édité le 20 janvier 2017 à 19:29:25 par 3ni41p4c
CPUGamer CPUGamer
MP
Niveau 9
21 janvier 2017 à 00:34:46

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...

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
La vidéo du moment