AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
Manga Chainsaw Man : où acheter le Tome 17 ...
Voir le deal
19.99 €

 

 [Résolu] Problème avec la physique

Aller en bas 
4 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 14:07

Bonjour,
Je débute en gml et particulièrement avec la physique (les pentes et l'eau surtout).  triste2
Je cherche un moteur (en gml ou extension si il est simple) facilement modulable contenant des pentes et de l'eau si possible.
Comme ma version de game maker est studio je préfère les scripts ou les .gmz
Si vous en connaissez ou si vous en avez crée un merci de le poster  hap
(j'essaye depuis quatre jours de coder ma physique)  horror

Ps:J'ai déjà essayé bon nombre de moteurs p :
Spoiler:
Merci d'avance


Dernière édition par Newoofr le Jeu 20 Aoû 2015 - 18:52, édité 1 fois
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 14:14

Postes un exemple de ce que tu veux comme "eau", car l'eau c'est bien une des choses les plus complexes a faire dans un jeu video si tu veux un truc réaliste, alors couplé aux pentes...

Du coup généralement on triche de diverses manières (genre surface dynamique mais eau statique, genre dans les mario, ou cell based via un automate cellulaire).

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 14:21

Merci Onilink (tu es rapide gha )
En fait je ne veux pas que l'eau se déplace d'elle même (excuse moi de ne pas avoir été clair) mais simplement que quand le personnage entre dans l'eau il perd de la vitesse, se déplace moins vite, la gravité est plus faible etc.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 14:35

Bon c'est déjà beaucoup moins compliqué du coup.

Par contre, ça va dépendre énormément de ton implémentation coté physique du joueur.

Généralement on crée une fonction updateVelocityOnSlopes(vitesse x, vitesse y), dedans tu gères les déplacements d'un point A et un point B. (soit de (x,y) a (x+vitessex,y+vitessey))

Sans collisions ta fonction est donc
Code:
updateVelocityOnSlopes(vx, vy) {
  x += vx
  y += vy
}
(pour que tu comprennes bien le principe)

Avec collisions c'est plus compliqué, y a de nombreuses façon de faire surtout pour les slopes.
En général on déplace d'abord le perso a l'horizontale, et si y a un obstacle mais que la place est libre par exemple 1 pixel au dessus, bah tu le décales aussi a la verticale (pendant le déplacement horizontal).
Ensuite tu fais le déplacement vertical.

Bref a coup de boucle for et place_free y a moyen d'avoir un truc sympa.


Une fois que t'as cette fonction les mouvements de ton perso se feront via deux variables: vx et vy (vitesse x et y) que tu modifieras en fonction
des appuis de touche par ex.
Du coup pour le contact avec l'eau, il suffit juste d'ajouter de la friction et le tour est joué.
Par ex friction soustractive pour la vitesse horizontale:
Code:
if(vx < 0) {
  vx += fric
  if(vx > 0) vx = 0
}
if(vx > 0) {
  vx -= fric
  if(vx < 0) vx = 0
}

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 14:49

Merci beaucoup je comprends mieux certains trucs,
mais j'avais à peu près réussi à faire en sorte qu'on puisse monter les pentes mais j'ai surtout du mal sur les pentes descendantes (à rester coller dessus)

ensuite pour l'eau j'ai fait plein de choses (vitesse divisé quand on rentre dans l'eau, on saute hors de l'eau si on à assez d'impulsion etc.) mais à force il y avait des bugs que je n'ai pas réussi à résoudre.

voilà la physique la plus aboutie que j'ai réussi à créer (basé sur le vieux moteur de shaun spalding)
par contre j'avais de bugs quand je descendais une pente mon personnage vibrait, mais il y avait aussi beaucoup de bugs mineurs avec l'eau.
Ps : Merci BEAUCOUP de m'aider mais n'essaye pas de lire tout ça à moins que tu trouve la solution du premier coup   gnii
Spoiler:
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 15:39

Pas trop le temps de me pencher sur ton code mais c'est un sacré bordel, déjà faut absolument séparer la partie physique de la partie gameplay.

Voici un vieux proto de physics engine que j'avais fait qui gère les slopes:
http://host-a.net/u/onilink_/SlopesPhysics.gmk


updateFromVelocity
Code:
/*
updateFromVelocity

Slopes physics engine by Boris Marmontel aka onilink_
Version 1
*/
var xvelocity, yvelocity;

collisionRight = false
collisionLeft = false

vx2 = vx + fracx
vy2 = vy + fracy

if(vx2 > 0) xvelocity = floor(vx2)
else xvelocity = ceil(vx2)

if(vy2 > 0) yvelocity = floor(vy2)
else yvelocity = ceil(vy2)

// 1) Mouvement horizontal
// a. Vers la droite
if(xvelocity > 0)
{
    onGround = isOnGround()
    
    // Slope qui descend
    while(xvelocity > 0 && onGround)
    {
        if(place_free(x+1, y))
        {
            x += 1
            xvelocity -= 1
            onGround = false
            for(i=0; i<=3; i+=1)
            {
                if(!place_free(x, y+i))
                {
                    onGround = true
                    y += i-1
                    break
                }
            }
        }
        else
            break
    }
    
    // Slope qui monte
    while(xvelocity > 0)
    {
        if(place_free(x+1, y))
        {
            x += 1
            xvelocity -= 1
        }
        else if(place_free(x+1, y-1))
        {
            x += 1
            xvelocity -= 1
            y -= 1
        }
        else if(place_free(x+1, y-2))
        {
            xvelocity -= 1
            y -= 1
        }
        else
        {
            break
        }
    }    
    if(xvelocity > 0)
    {
        collisionRight = true
    }
}
else if(xvelocity < 0)
{
    onGround = isOnGround()
    
    // Slope qui descend
    while(xvelocity < 0 && onGround)
    {
        if(place_free(x-1, y))
        {
            x -= 1
            xvelocity += 1
            onGround = false
            for(i=1; i<=4; i+=1)
            {
                if(!place_free(x, y+i))
                {
                    onGround = true
                    y += i-1
                    break
                }
            }
        }
        else
            break
    }
    
    // Slope qui monte
    while(xvelocity < 0)
    {
        if(place_free(x-1, y))
        {
            x -= 1
            xvelocity += 1
        }
        else if(place_free(x-1, y-1))
        {
            x -= 1
            xvelocity += 1
            y -= 1
        }
        else if(place_free(x-1, y-2))
        {
            xvelocity += 1
            y -= 1
        }
        else
        {
            break
        }
    }
    if(xvelocity < 0)
    {
        collisionLeft = true
    }
}

collisionTop = false
collisionBottom = false

// Mouvement vertical
if(yvelocity > 0)
{
    for(i=0; i<yvelocity; i+=1)
    {
        if(place_free(x, y+1))
            y+=1
        else
        {
            // grosse pente = comme si tombait normalement
            if(place_free(x-1, y+1) && place_free(x-1, y+2) && place_free(x-1, y+3))
            {
                x -= 1
                y += 1
            }
            else if(place_free(x+1, y+1) && place_free(x+1, y+2) && place_free(x+1, y+3))
            {
                x += 1
                y += 1
            }
            else
            {
                collisionBottom = true
                break
            }
        }
    }
}
else if(yvelocity < 0)
{
    for(i=0; i<-yvelocity; i+=1)
    {
        if(place_free(x, y-1))
            y-=1
        else
        {
            collisionTop = true
            break
        }
    }
}

fracx = frac(vx2)
fracy = frac(vy2)

isOnGround
Code:
return !place_free(x, y+1) // sol plat
|| (!place_free(x, y+2) && (!place_free(x+1, y) || !place_free(x-1, y))) // slopes


Exemple d'utilisation:
Player #Create
Code:
vx = 0
vy = 0
fracx = 0
fracy = 0

old_time = current_time

delta_time = 1

#step
Code:
new_delta_time = 60*(current_time - old_time)/1000
delta_time = delta_time*0.97 + new_delta_time*0.03
room_caption = string(delta_time)

if(keyboard_check(vk_right))
    vx = 3
else
if(keyboard_check(vk_left))
    vx = -3
else
    vx = 0

vy += 0.2 * delta_time

if(keyboard_check_pressed(vk_space) && isOnGround())
    vy = -7


vx_tmp = vx
vy_tmp = vy

vx *= delta_time
vy *= delta_time
updateFromVelocity()

vx = vx_tmp
vy = vy_tmp

if(collisionBottom || collisionTop) vy = 0

old_time = current_time

#begin step
Code:
if(keyboard_check_pressed(vk_numpad1)) {
    room_speed = 30
    delta_time = 60/room_speed
}
if(keyboard_check_pressed(vk_numpad2)) {
    room_speed = 60
    delta_time = 60/room_speed
}
if(keyboard_check_pressed(vk_numpad3)) {
    room_speed = 120
    delta_time = 60/room_speed
}
if(keyboard_check_pressed(vk_numpad4)) {
    room_speed = 20
    delta_time = 60/room_speed
}


Ce moteur a pour particularité d'être non dépendant du FPS (la vitesse de l'objet sera la même a 30 ou 60 ou encore 120 fps, mais plus le fps sera proche de celui de la fréquence de rafraîchissement, plus ce sera fluide), ce qui permet de gérer le cas de FPS variable (du a un lag par exemple), ou un FPS different du aux capacités de la machine.
Il a aussi pour particularité d'avoir un degrés de pentes max.
Au delà de slopes de 1x3, l'objet tombe comme s'il était sur du vide.


C'est un proto de ce que j'utilise désormais dans planet centauri, donc c'est sensé plutôt bien marcher.

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS


Dernière édition par onilink_ le Mer 19 Aoû 2015 - 15:42, édité 1 fois
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 15:42

Merci beaucoup onilink  love ,
je m'y penche tout de suite (et je vais essayer de ne plus t'embêter)
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****



Messages : 1454

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 16:10

onilink_ a écrit:
C'est un proto de ce que j'utilise désormais dans planet centauri, donc c'est sensé plutôt bien marcher.
C'est donc pour ça qu'on tombe sur des pentes 1*3 Surprised

Plus dans le sujet, c'est important le rapport aux fps, et encore plus la nécessité de séparer tes codes qui ne servent pas à la même chose (ici physique et contrôles). Ça fait moins "bordel". Smile

(je dis ça mais je devrais le faire un jour kill )

_________________
côt.
Revenir en haut Aller en bas
https://cagibi.itch.io/
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 17:22

En fait en général je commence sur un truc super propre puis après je rajoute des trucs partout et ça devient le gros bordel, et puis j'ai du mal avec les scripts nope
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 18:20

Ça a rien de bien terrible un script, c'est juste une fonction que tu peux écrire toi même.

C'est vraiment la base, va lire un tuto sur ça si tu sais pas t'en servir.

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 18:39

Après avoir lu un tuto je me rend compte à quelle point c'est basique en fait...
Au fait dans ton script tu as marqué :
Spoiler:
et l'équivalent pour la gauche,
mais est-ce-que je peux faire un seul code pour les deux côtés en utilisant des sign(vx) ?
à moins qu'il y soit plus intéressant de faire un code par côté
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyMer 19 Aoû 2015 - 21:30

Y a un léger gain de perfs sans sign, mais bon si t'as pas masse d'objets in game je doute que tu le remarques (enfin avec GM on ne sait jamais).

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 10:25

ok merci, je me doutais qu'il y avait une raison, je le saurais dorénavant happy1

Edit : J'ai un problème avec l'eau, j'aimerais que mon personnage saute lorsque il remonte à la surface et qu'il a assez d'impulsion mais ne fait que remonter à la surface puis redescendre de ~5 pixels (pour donner l'impression qu'il nage) si il lui manque de l'impulsion. Comment faire donc pour détecter si il à assez d'impulsion ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 10:33

Bah tout est dans vx et vy la.

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 10:39

Je serais toi je ferais juste un timer, du coup quand t'appuie sur espace ça génère l'impulsion, pis ça attends un peu (via le timer) avant de pouvoir recommencer d'en donner une nouvelle.

Edit: Message fantôme? x)

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 10:44

au final j'ai fait ça :
if vy > -1
vy -= 0.05
else
vy = -1
et je détecte si vy = -1 pour le saut
et oui message fantôme gnii

Edit : Il y a un bug et je ne suis pas sur qu'il vient de moi vu que je n'ai pas touché au moteur de collision.
Quand je tombe vite et que j'atteri sur le coin d'un mur le personnage se coince dedans.
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 11:27

Est-ce que il détecte le mur comme étant une slope ou c'est le code qui ne s'éxecute pas assez rapidement ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 11:37

Screen?

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 11:49

[Résolu] Problème avec la physique Screen10
Désolé pour la qualité triste2

Edit: Excuse-moi ça vient de moi je me suis trompé Embarassed
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 11:54

Bizarre moi j'ai pas de soucis, tu m'envoies le gmk que je regarde?

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 13:25

sad
Merci beaucoup de m'aider, j'espère vraiment que ce problème sera le dernier
lorsque mon personnage sort de l'eau il ne saute pas or il devrait, mais à la place il retombe dans l'eau
Voilà mon code pour l'eau (ne perds pas forcément ton temps à le lire j'ai mis des flèches aux codes importants si tu as le temps)
Spoiler:
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 13:55

Envoie le gmk plutôt ce sera plus pratique.

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 14:10

Voilà :
http://simpleupload.fr/?c=A1L8wkQ!HLDXyt2q

Edit : Tout est dans step du joueur
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 15:06

J'ai pas trouvé comment corriger ton soucis car j'ai pas eu le temps de beaucoup tester, mais plusieurs remarques:

1)
water_slowdowny = 30
y+=vy

Ceci est la cause du bug que t'as eu plus haut, le principe quand on utilise un moteur physique est de ne justement plus utiliser x et y de manière brute.
Si tu veux tu peux par contre faire une fonction moveTo comme je l'expliquais plus haut, qui se base sur la fonction updateFromVelocity.
Tant que les déplacement se font via les fonctions du moteur physique, ton objet ne se coincera jamais.

2)
if place_meeting(x,y,obj_water)
{if keyboard_check(vk_space)
{if nage_time > 8
{if tripleJump == 0
{if place_meeting(x,y-5,obj_water)
{vy = -1
}
}
}
}
}

On ne fait jamais ça.
Déjà quand tu utilises les accolades, faut indenter pour qu'il y ai un minimum de lisibilité.
Ensuite imbriquer des if ça ne sert qu'a rendre le code moche, il y a and ou && pour tester plusieurs conditions:
if(place_meeting(x,y,obj_water) && keyboard_check(vk_space) && nage_time > 8 && tripleJump == 0 &&  place_meeting(x,y-5,obj_water))
{
    vy = -1
}

Pour ce qui est du bug du saut, a premiere vue le soucis est lié a nage_time, car si tu enlèves la condition nage_time >= 6, tout fonctionne.

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 17:22

Merci beaucoup d'avoir jeter un coup d'oeil happy1 ,
Je savais que c'était y += vy qui créait le bug cependant il n'y à pas de problème si je mets !place_meeting je crois.
En tout cas j'ai mis des if comme ça parce que j'avais lu que mettre des && était plus lent (habituellement je ne mets pas d'accolades s'il n'y a pas plusieurs choses à éxecuter d'un coup) mais je voulais juste vérifier que justement il n'y avait pas de problèmes avec ça.

Et en fait j'ai fait exprès de mettre nage_time parce que je ne veut pas que le joueur puisse sauter dès qu'il touche la surface de l'eau.

Mais il n'y a que toi qui aide les débutants ??
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 18:19

Les if imbriqués ne sont plus rapide que si:
1- Les conditions sont placés dans l'ordre croissant du coût en calculs (la fonction la plus coûteuse doit toujours être la dernière testée)
2- Une des conditions est une fonction/calcul coûteux

Dans tous les cas, il est très rare de se retrouver avec une condition qui soit lourde au point de sacrifier la syntaxe pour les performances.
Alors a moins d'être dans plusieurs boucles imbriquées, et d'avoir des conditions coûteuses, ça ne sert a rien (car faire un if est aussi coûteux que de calculer un and avec une condition légère).

Pis bon c'est une bonne habitude a avoir de ne pas imbriquer les if, car dans 99% des langages les if exécutent les conditions de manière paresseuse (donc ils les optimisent a notre place en gros).


Sinon j'imagine bien que nage_time n'est pas la pour faire joli, mais dans tous les cas il ne doit pas être synchronisé comme il faut avec le bloc que tu tentes d’exécuter, étant donné que si tu l’enlèves de la condition tout marche bien.

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 18:26

Je vais rendre mon code plus propre alors...
Mais comment faudrait-il utiliser nage_time alors (je n'arrive pas snif) ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9178
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 18:42

Je viens de re regarder l'erreur est toute bête en fait:

..&& !place_meeting(x,y-vy,obj_water)

Sauf que quand tu testes ça, le joueur va vers le haut, donc vy est < 0, donc y-vy donne une valeur style y--valeur (donc ça deviens un plus, et ça check sous le joueur et non pas au dessus)

La solution:
.. && vy < 0 && !place_meeting(x,y+vy,obj_water)

_________________
[Résolu] Problème avec la physique Runningpotato1[Résolu] Problème avec la physique TvF6GED [Résolu] Problème avec la physique MdetltS
Revenir en haut Aller en bas
Bobstone
Débutant



Messages : 20

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 18:45

MERCI !
Et c'est vrai que l'erreur est idiote Embarassed
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence


Messages : 2213
Localisation : Oui

[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique EmptyJeu 20 Aoû 2015 - 19:11

Petite précision quand tu fais un if avec des &&, il s'arrête dès qu'une des conditions est fausse. Du coup même si le dernier truc à vérifier est lourd, pas besoin de faire un autre if imbriqué, suffit juste de le place en dernier, il sera exécuté que si toutes les conditions précédentes sont vérifiées. GM le fait et pleins d'autres langages même relativement basiques. Le seul langage qui fait pas ca que je connaisse c'est le sur les calculatrices TI (et ca fait bien *****).

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
Contenu sponsorisé





[Résolu] Problème avec la physique Empty
MessageSujet: Re: [Résolu] Problème avec la physique   [Résolu] Problème avec la physique Empty

Revenir en haut Aller en bas
 
[Résolu] Problème avec la physique
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: