2017-08-04 5 views
1

私はpygame/python/codingと初めてのクラスを使って初めてです。私は既にボールを飛び跳ねて重力で加速するパイゲームプログラムを作った。しかし、クラスを使用するようになったので、ボールは一定の速度で動いているように見えます。私が間違ってやっていることを教えてください。 私のコードを変更する必要があります。前もって感謝します!クラスを使用しているときにパイグムボールが加速しないのはなぜですか?

import pygame, sys 


pygame.init() 

red = (255,0,0) 
black = (0,0,0) 
white = (255,255,255) 
blue = (0,0,255) 

pygame.mouse.set_visible(0) 
clock = pygame.time.Clock() 

displaySize = (800,600) 

screen = pygame.display.set_mode(displaySize) 

g = 30 
dt = 0.05 

class ball: 
    def __init__(self, x, y, vx, vy, r,ax,ay, color): 

     dt = 0.05 

     Cd = 0.01 
     m = 5 

     self.ay = ay 
     self.ax = ax 

     self.x = x 
     self.y = y 
     self.r = r 
     self.color = color 

     self.vx = vx 
     self.vy = vx 

def update(self, x, y): 


    x, y = physics() 
    pygame.draw.circle(screen, self.color, (int(round(x)),int(round(y))), self.r) 
    pygame.display.update() 

    def physics(self): 


     self.Dy = Cd*self.vy*abs(self.vy) 
     self.Dx = Cd*self.vx*abs(self.vx) 

     self.Fy = self.m*g - self.Dy 
     self.Fx = -self.Dx 

     self.ay = self.Fy/m 
     self.ax = self.Fx/m 

     self.vy += self.ay*dt 
     self.vx += self.ax*dt 

     self.x +=self.vx*dt 
     self.y +=self.vy*dt 

     return self.x, self.y 

one = ball(100,100,0,0,0,0,30,red) 

while 1: 
    clock.tick(30) 
    screen.fill(blue) 
    one.update() 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
+0

アクセラレーションコードはどこですか?これを[mcve]に減らす必要があります。ここのコードの半分は無関係です。 – Carcigenicate

答えて

1

self.vxとself.vyは、そうでなければ、それらの値が得られ、50及び0物理法は、ゲームループ内で呼び出されるたびに戻って設定され、代わりに物理方法のコンストラクタメソッド内であるべきです一定の速度で

+0

さて、あなたが意味することを理解しています。コンストラクタにself.vxとself.vyを追加するだけで問題が解決しなかったので、もっと多くのものを追加しようとしました。上記のコードを、私は今のようにするべきだと思ったものに変更しました。今すぐ動作させる方法はありますか? – Jeroen

関連する問題