π
<-

Hitboxes

Pour TI-Nspire OS 3.0 ou ultérieur.

Hitboxes

Unread postby technolapin » 30 Dec 2013, 17:17

Ben le bonjour,
cela fait déjà des mois et des mois que j'essaye de coder un programme (en lua, pour ceux qui se sont perdu), avec des objets (le plus simplement possible ici, des carrés).
C'est facile, je le code habituellement en une minute, sauf que là, j'essaye de mettre en place les collisions entre les objets, et que je ne vois absolument pas comment faire!
Le code (vite fait):

Code: Select all
function on.resize ()



w = platform.window: width ()
h = platform.window: height ()

box = class ()
function box: init ()
self.x = math.random (0, w)
self.y = 0
self.mx = math.random (-4, 4)
self.my = 0
self.w = 16
self.h = 16
self.friction = 0.4
end

function box: gravity ()
self.my = self.my+1
end

function box: bounce ()
if self.x < 0 then
  self.x = 0
  self.mx = -self.mx * self.friction
  self.my = self.my * math.sqrt (self.friction)
end
if self.x + self.w > w then
  self.x = w - self.w
  self.mx = -self.mx * self.friction
  self.my = self.my * math.sqrt (self.friction)
end
if self.y < 0 then
  self.y = 0
  self.my = -self.my * self.friction
  self.mx = self.mx * math.sqrt (self.friction)
end
if self.y + self.h > h then
  self.y = h - self.h
  self.my = -self.my * self.friction
  self.mx = self.mx * math.sqrt (self.friction)
end
for a, b in pairs (obj) do
  if b == self then else
   -- c'est ici que je bloque
  end
end
end

function box: move ()
self.x = self.x + self. mx
self.y = self.y + self. my
end

function box: paint (gc)
gc: fillRect (self.x, self.y, self.w, self.h)
end






obj = {box ()}

timer.start (0.03)





function on.timer ()
platform.window: invalidate ()
end

function on.paint (gc)
for a, b in pairs (obj) do
  b: gravity ()
  b: move ()
  b: bounce ()
  b: paint (gc)
end
end

function on.enterKey ()
obj[#obj+1] = box ()
end


end



J'espère donc que quelqu'un saura m'aider.
Last edited by technolapin on 31 Dec 2013, 08:06, edited 1 time in total.
Votez Kasane Teto 2017
User avatar
technolapin
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 97.8%
 
Posts: 514
Images: 25
Joined: 31 Dec 2012, 10:48
Location: Chez moi
Gender: Male
Calculator(s):
MyCalcs profile
Class: Chui en vacance ducon

Re: Hitboxes

Unread postby Bisam » 30 Dec 2013, 23:32

Je n'ai pas bien compris si c'était un problème de Lua ou d'algorithmie...
A priori, je ne vois aucun problème algorithmique dans ce que tu as déjà tapé (même si je ne connais pas le Lua, c'est facile à comprendre)

Pour ce qui est de gérer les collisions entre objets, une façon de t'en sortir serait de modifier ta fonction "bounce" pour qu'elle prenne en argument le numéro d'un objet (avec une valeur spéciale pour la collision avec les parois).
Je pense que tu es capable de voir ce qu'il suffit de faire pour terminer...
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Hitboxes

Unread postby le solutionneur » 31 Dec 2013, 00:20

Ton implémentation ne fonctionne que pour les rectangles :p
Pour les formes plus complexes, en général beaucoup de personnes mettent dans un tableau les coordonnées du contour pour voir si l'objet est en collision ou pas.

Mais pour "entourer" des objets simples, c'est vrai que des rectangles conviennent très bien (plus rapides aussi).
User avatar
le solutionneur
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 84.6%
 
Posts: 300
Joined: 18 Dec 2011, 21:41
Gender: Male
Calculator(s):
MyCalcs profile

Re: Hitboxes

Unread postby Bisam » 31 Dec 2013, 00:28

Il a quand même écrit dès le départ qu'il se limitait à des choses les plus simples possibles (il a même dit des "carrés"...).
On ne peut raisonnablement pas lui reprocher ce fait, bien au contraire !!
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Hitboxes

Unread postby technolapin » 31 Dec 2013, 08:11

Pourquoi tout le monde répond seulement quand je dors? :p
c'est une problème d’algorithme, oui, je ne vois absolument pas comment faire une fois que le "for" est mis en place. En fait je bloque surtout sur le fait que je veux que les propriétés des objets (vitesse dans l'axe x et y) soient correctement gérées (que les objets "rebondissent". Pour l'instant, à chaque tentative que j'ai faite, il se passe absolument n'importe quoi tout le temps.

(j'ai rajouté le for dans la fonction bounce)
Votez Kasane Teto 2017
User avatar
technolapin
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 97.8%
 
Posts: 514
Images: 25
Joined: 31 Dec 2012, 10:48
Location: Chez moi
Gender: Male
Calculator(s):
MyCalcs profile
Class: Chui en vacance ducon

Re: Hitboxes

Unread postby Bisam » 31 Dec 2013, 10:57

En fait, je te disais de modifier ta fonction bounce, pour qu'elle fonctionne de la même façon pour une collision avec un mur ou une collision avec une autre boîte...
Seuls les tests et 2 ou 3 calculs doivent être modifiés, et il faut rajouter des paramètres d'appel (aussi appelés arguments) à ta fonction, pour que tu puisses l'utiliser pour chaque boîte en plus de l'utiliser pour les murs.
Ta boucle "for", il suffit d'en mettre une de plus dans "on.paint".

Cependant, je répète que je ne connais pas le Lua ! Il est possible que l'on tombe sur une impossibilité que je n'ai pas prévue... mais j'en doute fort, vu ce que tu as déjà écrit.
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Hitboxes

Unread postby technolapin » 31 Dec 2013, 11:00

Ta boucle "for", il suffit d'en mettre une de plus dans "on.paint".


Non, car la boucle for dans le on.paint sert à appeler chaque objets.=, et l'autre boucle for sert à comparer l'objet en cour à tous les autres.
Votez Kasane Teto 2017
User avatar
technolapin
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 97.8%
 
Posts: 514
Images: 25
Joined: 31 Dec 2012, 10:48
Location: Chez moi
Gender: Male
Calculator(s):
MyCalcs profile
Class: Chui en vacance ducon

Re: Hitboxes

Unread postby Bisam » 31 Dec 2013, 11:03

Ben oui, c'est keske je dis !!
J'imaginais un truc dans ce genre :
Code: Select all
function on.paint (gc)
for a, b in pairs (obj) do
  b: gravity ()
  b: move ()
  for a2, b2 in pairs (obj) do
    b: bounce (b2)
  end
  b: paint (gc)
end
end
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Re: Hitboxes

Unread postby technolapin » 31 Dec 2013, 11:04

MAIS :p : si je fais ça, un seul objet sera affecté par la collision.
Votez Kasane Teto 2017
User avatar
technolapin
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 97.8%
 
Posts: 514
Images: 25
Joined: 31 Dec 2012, 10:48
Location: Chez moi
Gender: Male
Calculator(s):
MyCalcs profile
Class: Chui en vacance ducon

Re: Hitboxes

Unread postby Bisam » 31 Dec 2013, 11:08

Ben non ! Pour CHAQUE boîte nommée b, tu testes si elle se collisionne (euh, ça se dit ? :p ) avec CHAQUE boîte b2...
User avatar
BisamAdmin
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 69.6%
 
Posts: 5670
Joined: 11 Mar 2008, 00:00
Location: Lyon
Gender: Male
Calculator(s):
MyCalcs profile

Next

Return to Nspire-Lua

Who is online

Users browsing this forum: ClaudeBot [spider] and 6 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1175 utilisateurs:
>1126 invités
>42 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)