如何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按键
答
如前所述通过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)
哇,鸟是你最担心的在这一点上。你有一个循环,每次都加载鸟。你正在调用游戏类,就像它是一个函数。你甚至还没有初始化pygame。在理解游戏循环之前,不要考虑移动和用户输入。 – ecline6 2013-04-24 04:28:45
是啊我真的搞不清这一切m特很新,它 – Serial 2013-04-24 04:29:53
我建议通过一些在pygame的网站上的教程去。 http://www.pygame.org/wiki/tutorials此外,在Python中,类一些清新,和控制流的想法是一个好主意了。顺便提一句,你的K_UP和K_DOWN事件永远不会被读取,因为你的游戏被卡在上面的循环中。如果注释掉while循环,脚本将不会运行。但是,不要专注于此。去找你一个教程吧! :) – ecline6 2013-04-24 04:33:07