[Pygame] Problème de sauts avec la 2eme loi de Newton
Bonjour,
Je me suis lancer dans ma première programmation d'un saut grâce aux lois de Newton mais je bloque déjà :aie:
En fait je ne comprends pas très bien pourquoi mais j'ai l'impression que mon personnage se fiche royalement de la gravité …
Voici mes différentes parties:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| # -*- coding: cp1252 -*-
import pygame
from math import sqrt, cos, sin
import time as time
class Newton():
def __init__(self):
pygame.init()
self.g = 9.81
self.m = 10
def sauter(self,x,y,t,perso):
if x == 0:
a = 90
else:
a = 45
y = y/self.m
x = x/self.m
v0 = sqrt(pow(x,2) + pow(y,2))
vx = v0*cos(a)
h = 0 #Je ne sais pas comment déterminer la hauteur h ici :/
vy = self.g * t + v0* sin (a)
y = 1/2*self.g*pow(t,2)+v0*(sin(a)) *t + h
x = v0*cos(a) * t
rect = perso.move(x,y)
return rect |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| import pygame
from Newton import *
class perso():
def __init__(self):
pygame.init()
self.allie = pygame.sprite.Group()
self.ennemi = pygame.sprite.Group()
self.gravitee = Newton()
def princi(self,coord):
self.perso = pygame.sprite.Sprite()
self.perso.image = pygame.image.load("Images/Mob/Perso/dk_bas.png").convert_alpha()
self.perso.rect = self.perso.image.get_rect()
self.perso.rect = self.perso.rect.move(coord)
self.allie.add(self.perso)
def avancer(self,coord,typ):
if typ == "princi":
self.perso.rect = self.perso.rect.move(coord)
def saut(self,x,y,t,perso):
if perso == "princi":
self.perso.rect = self.gravitee.sauter(x,y,t,self.perso.rect)
def afficher(self,fen):
try:
self.allie.draw(fen)
except AttributeError:
pass |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| import pygame
from perso import *
import time as time
class moteur():
def __init__(self):
pygame.init()
self.pers = perso()
taille_x = 500
taille_y = 500
self.fenetre = pygame.display.set_mode((taille_x,taille_y),pygame.RESIZABLE)
self.decor = pygame.sprite.Group()
def add(self, typ,coord):
if typ == "mur":
self.mur = pygame.sprite.Sprite()
self.mur.image = pygame.image.load("Images/Decor/Objets/mur.png").convert_alpha()
self.mur.rect = self.mur.image.get_rect()
self.mur.rect = self.mur.rect.move(coord)
self.decor.add(self.mur)
if typ == "perso":
princi = self.pers.princi(coord)
def add_fond(self,fond):
self.fond = pygame.image.load(fond).convert()
def partie(self):
boucle = True
fin = time.time() + 20
x = 0
y = 10
while boucle:
pygame.time.Clock().tick(30)
debut = time.time()
t = fin - debut
if fin - debut > 0:
fin = fin - 1
self.pers.avancer((x,y),"princi")
self.pers.saut(x,y,t,"princi")
for event in pygame.event.get():
if event.type == pygame.QUIT:
boucle = False
self.fenetre.blit(self.fond,(0,0))
self.decor.draw(self.fenetre)
self.pers.afficher(self.fenetre)
pygame.display.flip() |
Quelqu'un pourrait m'aider a corriger mes calculs ?
Merci d'avance pour votre aide :)