GAMOPAT
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Flipper 2D et sa physique

+5
Urbinou
Ricco59_59
Dobro
Tryphon
drfloyd
9 participants

Page 5 sur 5 Précédent  1, 2, 3, 4, 5

Aller en bas

Flipper 2D et sa physique - Page 5 Empty Re: Flipper 2D et sa physique

Message par drfloyd Dim 22 Déc 2019 - 14:37

@Tryphon a écrit:Pour la suite Doc, ça t'embête si j'écris des classes avec des méthodes ? Si oui, je peux transformer le code pour m'en débarrasser, mais c'est un poil moins "joli"...


c'est un peu chiant pour la compréhension..... le moins joli est plus compréhensible  Mr. Green

drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Nombre de messages : 169152
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Flipper 2D et sa physique - Page 5 Empty Re: Flipper 2D et sa physique

Message par Urbinou Dim 22 Déc 2019 - 14:53

...par toi. L’objet est bien plus élégant ! (D’ailleurs tu confirmes ? Possible en pure ?)
Mais bon vu que ça t’est destiné Wink
Urbinou
Urbinou
Docteur agrégé **
Docteur agrégé **

Masculin Nombre de messages : 12615
Age : 53
Localisation : Liège, Belgique
Date d'inscription : 12/02/2013

http://cambouisdelatari.wordpress.com

Revenir en haut Aller en bas

Flipper 2D et sa physique - Page 5 Empty Re: Flipper 2D et sa physique

Message par Tryphon Dim 22 Déc 2019 - 14:58

D'après wikipedia, non, PureBasic n'est pas orienté objet, par la volonté de son créateur.

Mais plusieurs utilisateurs ont créé des préprocesseurs pour permettre la POO.

Du coup je vais pas faire d'objet. Par contre je ferai des structures...
Tryphon
Tryphon
Docteur *
Docteur *

Masculin Nombre de messages : 26166
Age : 44
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Flipper 2D et sa physique - Page 5 Empty Re: Flipper 2D et sa physique

Message par drfloyd Dim 22 Déc 2019 - 16:24

ce n'est pas pour moi

c'est pour la science

C'est aussi pour cela qu'il faut réaliser ce tuto eu pseudo code, adaptable à n'importe quel langage

_______________________________________________________
Flipper 2D et sa physique - Page 5 Giphy10
Ma brocante de poilu :
https://www.gamopat-forum.com/t113082-le-retour-de-la-brocante-du-doc
Mon profil Gamopat Advisor :
https://www.gamopat-forum.com/t94659-dr-floyd-advisor





drfloyd
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 169152
Age : 52
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Flipper 2D et sa physique - Page 5 Empty Re: Flipper 2D et sa physique

Message par Tryphon Dim 22 Déc 2019 - 18:32

Du coup j'utilise des structures. Pure le fait. Une structure, c'est comme un tableau sauf que chaque élément peut être d'un type différent, et s'appelle par un nom (et non un indice). Par exemple :

Code:
struct Bidule:
    truc
    muche
machin = Bidule()

machin contient donc deux éléments, que tu peux affecter et lire en écrivant machin.truc pour le premier, et machin.muche pour le second.

En Pure, j'ai cru voir que c'était machin\truc et machin\muche, mais bon, je garde le point, c'est plus courant...


Bon, la gestion de la balle maintenant.

Je représente la vitesse de la balle par un vecteur speed. Un vecteur, mathématiquement, ça représente un déplacement dans une direction, d'un certain nombre de pixel. En général on le décompose en ses coordonnées x et y (horizontales et verticales), mais on pourrait le décomposer sur d'autres axes (et on le fera).

On peut ajouter des vecteurs, ou les multiplier par un nombre. J'ai mis tout ça dans une classe, avec quelques fonctions :

Code:
struct Vector:
    x
    y

def add_vectors(v1, v2):
    # somme de deux vecteurs
    return Vector(v1.x + v2.x, v1.y + v2.y)

def mul_vector(v, k):
    # multiplication d'un vecteur v par un nombre k
    return Vector(k*v1.x, k*v1.y)

def norm(v):
    # norme d'un vecteur, càd sa "longueur" :
    return sqrt(v.x^2 + v.y^2)

La balle est elle-même une structure qui contient plusieurs attributs :

Code:
struct Ball:
    pos # vecteur position
    speed # vecteur vitesse
    delta # vecteur vitesse réduit, voir plus loin
    n_steps # le nombre de fois où il faut rajouter delta, voir plus loin
    current_step # lié au précédent, voir plus loin
    radius # rayon de la balle
    sprite # image de la balle


À chaque tick (1 tick = 1/60ème de seconde), je mets à jour la vitesse en lui ajoutant le vecteur gravity. C'est un vecteur qui pointe vers le bas, ses coordonnées sont (0, 0.1) dans ma démo, mais comme on m'a fait remarquer, la balle a l'air flottante donc il faudrait certainement augmenter le y :

Code:
ball.speed = add_vectors(ball.speed, gravity)

Ça donne des déplacements en forme de parabole.

Ensuite, je mets à jours la position, mais pas tout d'un coup, car sinon je risque de rater une collision.

Par exemple, si le vecteur speed mesure 10 pixels, j'ajoute 10 fois le dixième du vecteur speed, et je teste les collisions à chaque étape, comme ça je sais que je parcours tous les pixels sur la trajectoire.
Ce n'est pas parfait, parce que théoriquement on peut passer à travers une diagonale, mais en pratique ça a l'air d'aller. Je calcule donc la longueur du vecteur (on dit norme en maths) puis je calcule un vecteur delta qui représente un vecteur d'(à peu près) un pixel dans la direction de la vitesse :

Code:
ball.n_steps = int(norm(speed)) + 1
ball.delta = mul_vector(speed, 1/n)

Je rajoute 1 à norm(speed) parce qu'a priori, c'est un nombre à virgule, et avec l'arrondi je risque d'avoir un vecteur speed qui fait plus d'un pixel.

Ensuite, j'ajoute n_steps le vecteur delta, en vérifiant s'il y a collision à chaque étape :

Code:
ball.current_step = 0
while ball.current_step < ball.nb_steps:
    check_collisions(ball, collision_map, flips)
    ball.current_step += 1

Je fais pas une bête boucle "for" parce que, s'il y a une collision, ça va changer le vecteur speed, donc le vecteur delta, nb_steps et current_step.

La fonction check_collisions s'occupe de rajouter le vecteur delta à la position de la balle s'il n'y a pas de collision, sinon elle gère le rebond.

Bon, prochain message : la collision entre la balle et un obstacle. Y'aura de la trigo Razz
Tryphon
Tryphon
Docteur *
Docteur *

Masculin Nombre de messages : 26166
Age : 44
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Flipper 2D et sa physique - Page 5 Empty Re: Flipper 2D et sa physique

Message par drfloyd Sam 28 Déc 2019 - 16:23

bordel, il a osé les structures... il veut me perdre  Mr. Green

_______________________________________________________
Flipper 2D et sa physique - Page 5 Giphy10
Ma brocante de poilu :
https://www.gamopat-forum.com/t113082-le-retour-de-la-brocante-du-doc
Mon profil Gamopat Advisor :
https://www.gamopat-forum.com/t94659-dr-floyd-advisor





drfloyd
drfloyd
DOYEN ET PROFESSEUR FOU DE L'HOPITAL

Masculin Nombre de messages : 169152
Age : 52
Localisation : Dpt 62
Date d'inscription : 05/12/2004

http://www.gamopat.com

Revenir en haut Aller en bas

Page 5 sur 5 Précédent  1, 2, 3, 4, 5

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum