2017-10-10 7 views
2

私は、地球上のようにオブジェクトを落とそうとしています。私はすでに彼らに私が望んでいたところでblitしましたが、私はそれらをアニメートすることはできません。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を追加します。 pygame.Rectは座標として浮動小数点数を持つことができないので、self.pos_y属性も追加しました。だから、

  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のスプライトとスプライト基チュートリアル]'S(http://programarcadegames.com/index.php?chapter=introduction_to_sprites&lang=en#section_13)。 – skrx

関連する問題