2017-10-10 104 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