2013-10-14 97 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()