如何Pygame的移动雪碧

问题描述:

我尝试让我的图像(鸟)来上下移动屏幕上,但我不能弄清楚如何在这里做到这一点是我尝试我确定它的路要走,但我尝试以图如果任何人都可以帮助,那就太棒了!如何Pygame的移动雪碧

import pygame 
import os 

screen = pygame.display.set_mode((640, 400)) 

running = 1 

while running: 
    event = pygame.event.poll() 
    if event.type == pygame.QUIT: 
     running = 0 
    screen.fill([255, 255, 255]) 
    clock = pygame.time.Clock() 
    clock.tick(0.5) 
    pygame.display.flip() 

    bird = pygame.image.load(os.path.join('C:\Python27', 'player.png')) 
    screen.blit(bird, (0, 0)) 

    pygame.display.update() 

class game(object): 
    def move(self, x, y): 
     self.player.center[0] += x 
     self.player.center[1] += y 


    if event.key == K_UP: 
     player.move(0,5) 
    if event.key == K_DOWN: 
     player.move(0,-5) 

game() 

即时试图让它下移的向下按下按钮和最多的UP按键

+5

哇,鸟是你最担心的在这一点上。你有一个循环,每次都加载鸟。你正在调用游戏类,就像它是一个函数。你甚至还没有初始化pygame。在理解游戏循环之前,不要考虑移动和用户输入。 – ecline6 2013-04-24 04:28:45

+0

是啊我真的搞不清这一切m特很新,它 – Serial 2013-04-24 04:29:53

+1

我建议通过一些在pygame的网站上的教程去。 http://www.pygame.org/wiki/tutorials此外,在Python中,类一些清新,和控制流的想法是一个好主意了。顺便提一句,你的K_UP和K_DOWN事件永远不会被读取,因为你的游戏被卡在上面的循环中。如果注释掉while循环,脚本将不会运行。但是,不要专注于此。去找你一个教程吧! :) – ecline6 2013-04-24 04:33:07

如前所述通过ecline6,鸟是你最担心的在这一点上。

考虑阅读this book ..

现在,首先,让我们清理你的代码...

import pygame 
import os 

# let's address the class a little later.. 

pygame.init() 
screen = pygame.display.set_mode((640, 400)) 
# you only need to call the following once,so pull them out of the while loop. 
bird = pygame.image.load(os.path.join('C:\Python27', 'player.png')) 
clock = pygame.time.Clock() 

running = True 
while running: 
    event = pygame.event.poll() 
    if event.type == pygame.QUIT: 
     running = False 

    screen.fill((255, 255, 255)) # fill the screen 
    screen.blit(bird, (0, 0)) # then blit the bird 

    pygame.display.update() # Just do one thing, update/flip. 

    clock.tick(40) # This call will regulate your FPS (to be 40 or less) 

现在,您的“鸟”是不动的原因是:
当你的blit图像,即:screen.blit(bird, (0, 0))
(0,0)是恒定的,所以它不会移动。

下面是最后的代码,你想要的输出(尝试)并阅读注释:

import pygame 
import os 

# it is better to have an extra variable, than an extremely long line. 
img_path = os.path.join('C:\Python27', 'player.png') 

class Bird(object): # represents the bird, not the game 
    def __init__(self): 
     """ The constructor of the class """ 
     self.image = pygame.image.load(img_path) 
     # the bird's position 
     self.x = 0 
     self.y = 0 

    def handle_keys(self): 
     """ Handles Keys """ 
     key = pygame.key.get_pressed() 
     dist = 1 # distance moved in 1 frame, try changing it to 5 
     if key[pygame.K_DOWN]: # down key 
      self.y += dist # move down 
     elif key[pygame.K_UP]: # up key 
      self.y -= dist # move up 
     if key[pygame.K_RIGHT]: # right key 
      self.x += dist # move right 
     elif key[pygame.K_LEFT]: # left key 
      self.x -= dist # move left 

    def draw(self, surface): 
     """ Draw on surface """ 
     # blit yourself at your current position 
     surface.blit(self.image, (self.x, self.y)) 


pygame.init() 
screen = pygame.display.set_mode((640, 400)) 

bird = Bird() # create an instance 
clock = pygame.time.Clock() 

running = True 
while running: 
    # handle every event since the last frame. 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() # quit the screen 
      running = False 

    bird.handle_keys() # handle the keys 

    screen.fill((255,255,255)) # fill the screen with white 
    bird.draw(screen) # draw the bird to the screen 
    pygame.display.update() # update the screen 

    clock.tick(40) 
+2

如果你不明白这个部分,读了这本书。它将帮助你(很多) – pradyunsg 2013-04-24 07:57:41

+0

+1,因为它包括Invent with Python。如果我在开始时就已经了解这本书,那么它会回答很多问题。 – ecline6 2013-04-24 14:21:40

+0

@ ecline6就是为什么我提到它.. – pradyunsg 2013-04-24 14:22:50