2013-10-14 95 views
0

我從pygame的教程此程序:pygame的簡單彈跳動畫

1 import sys, pygame 
2 pygame.init() 
3 
4 size = width, height = 320, 240 
5 speed = [2, 2] 
6 black = 0, 0, 0 
7 
8 screen = pygame.display.set_mode(size) 
9 
10 ball = pygame.image.load("ball.bmp") 
11 ballrect = ball.get_rect() 
12 
13 while 1: 
14  for event in pygame.event.get(): 
15   if event.type == pygame.QUIT: sys.exit() 
16 
17  ballrect = ballrect.move(speed) 
18  if ballrect.left < 0 or ballrect.right > width: 
19   speed[0] = -speed[0] 
20  if ballrect.top < 0 or ballrect.bottom > height: 
21   speed[1] = -speed[1] 
22 
23  screen.fill(black) 
24  screen.blit(ball, ballrect) 
25  pygame.display.flip() 

這是一個簡單的反彈球。我想要的是用一個將用pygame繪製的圓來代替ball(ball.gif),而不對代碼做大的修改。我的意思是,我想要改變的唯一事情就是用一個圓圈代替它,並用我用來製作動畫的相同代碼對該圓圈進行動畫處理。有什麼辦法可以做到嗎?謝謝。

回答

2

你只需要更換

screen.blit(ball, ballrect) 

pygame.draw.circle(screen, color, ballrect.center, radius) 

Pygame's draw module允許被繪製以及其他形狀。在上面的代碼中,你可以用你想要的值填寫colorradiuscolor是一個元組,它有三個整數,範圍爲0-255。

+0

但是,如果我這樣做,這意味着它使用圖像的矩形區域。並且,例如,如果圓直徑小於或大於矩形「球形」的長度,則圓形在到達屏幕邊緣時不會彈起。爲了做到這一點,我將不得不使用與圓相同大小的圖像......是否有一種方法可以只使用圓而不必使用圖像? – Joker

+0

如果你用pygame.draw繪製,那麼是的,如果你想使用rect進行碰撞,你的矩形尺寸需要匹配圓的大小。但是,不,你不需要一個圖像。爲了消除對矩形的需求,您需要重新編寫碰撞檢測來檢查諸如圓形平面相交之類的事情。 – kevintodisco

0

我知道這是舊的,但我無法弄清楚這一點,但是,我終於做到了。

import pygame 
pygame.init() 

window_w = 800 
window_h = 600 

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

FPS = 120 

window = pygame.display.set_mode((window_w, window_h)) 
pygame.display.set_caption("Game: ") 
clock = pygame.time.Clock() 


def game_loop(): 

    block_size = 20 

    velocity = [1, 1] 

    pos_x = window_w/2 
    pos_y = window_h/2 

    running = True 

    while running: 

     for event in pygame.event.get(): 
      if event.type == pygame.QUIT: 
       pygame.quit() 
       quit() 

     pos_x += velocity[0] 
     pos_y += velocity[1] 

     if pos_x + block_size > window_w or pos_x < 0: 
      velocity[0] = -velocity[0] 

     if pos_y + block_size > window_h or pos_y < 0: 
      velocity[1] = -velocity[1] 

     # DRAW 
     window.fill(white) 
     pygame.draw.rect(window, black, [pos_x, pos_y, block_size, block_size]) 
     pygame.display.update() 
     clock.tick(FPS) 


game_loop()