2017-10-10 44 views
2

我試圖讓物體像地球一樣墜落。我已經讓他們知道我想要他們的位置,但我似乎無法制作他們的動畫。Pygame:我如何讓我的形象下降?

這是我欲墜

import pygame 

class circle(): 

    def __init__(self, screen): 
     planet_color = (255,0,0) 
     planet_radius = 20 
     self.screen = screen 
     ev = pygame.event.get() 

     self.image = pygame.image.load('../images/jupiter.bmp') 
     self.image = pygame.transform.scale(self.image, (80, 80)) 


    def blitme(self): 
     self.x = pygame.mouse.get_pos() 
     self.rect = self.image.get_rect() 
     self.rect.center = self.x 
     self.screen.blit(self.image, self.rect) 

對象,這是運行它的代碼。當鼠標被點擊時,木星的一張小圖片被點擊鼠標。我如何獲得這張圖片?

import pygame 
import gravfunc as gf 
from gravfunc import circle 
import sys 


def run_game(): 
    screen_height = 670 
    screen_width = 1270 
    pygame.init() 
    screen = pygame.display.set_mode((screen_width, screen_height)) 
    screen.fill((10,10,30)) 
    running = True 

    circ = circle(screen) 


    while running: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       sys.exit() 
      elif event.type == pygame.KEYDOWN: 
       if event.key == pygame.K_q: 
        sys.exit() 
      elif event.type == pygame.MOUSEBUTTONDOWN: 
       circ.blitme() 


     pygame.display.flip() 


run_game() 

回答

2

給你的類self.speed_y屬性,並添加GRAVITY它每幀加速的對象。我還添加了self.pos_y屬性,因爲pygame.Rect s不能將浮點數作爲它們的座標。所以,

  1. 增長速度
  2. 的速度添加到位置(self.pos_y
  3. 分配self.pos_yself.rect.y

既然你已經在使用一個類,我建議使它成爲一個pygame精靈子類(繼承自pygame.sprite.Sprite)。然後,您可以將所有圈子添加到pygame.sprite.Group,並通過致電sprite_group.update()sprite_grop.draw(screen)進行更新和繪製。

import pygame 


GRAVITY = .2 # Pretty low gravity. 

class Circle(pygame.sprite.Sprite): 

    def __init__(self, pos, screen): 
     super().__init__() 
     self.screen = screen 
     self.image = pygame.Surface((80, 80), pygame.SRCALPHA) 
     pygame.draw.circle(self.image, (30, 90, 150), (40, 40), 40) 
     self.rect = self.image.get_rect(center=pos) 
     self.pos_y = pos[1] 
     self.speed_y = 0 

    def update(self): 
     self.speed_y += GRAVITY 
     self.pos_y += self.speed_y 
     self.rect.y = self.pos_y 

     if self.pos_y > self.screen.get_height(): 
      self.kill() # Remove off-screen circles. 


def run_game(): 
    pygame.init() 
    screen = pygame.display.set_mode((1270, 670)) 
    clock = pygame.time.Clock() 
    running = True 
    circles = pygame.sprite.Group(Circle((600, 0), screen)) 

    while running: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       return 
      elif event.type == pygame.MOUSEBUTTONDOWN: 
       circles.add(Circle(event.pos, screen)) 

     circles.update() 

     screen.fill((10, 10, 30)) 
     circles.draw(screen) 

     pygame.display.flip() 
     clock.tick(60) 


run_game() 
pygame.quit() 
+1

這裏的一個[pygame的子畫面子畫面和組教程(http://programarcadegames.com/index.php?chapter=introduction_to_sprites&lang=en#section_13)。 – skrx