我一直在尝试学习pygame,更具体地说是如何在pygame中使用精灵。然而,经过一点实验,下面的代码是我最终得到的,我想知道为什么我的player类没有出现。你知道吗
from pygame.locals import *
import pygame
pygame.init()
size = width, height = 500, 700
screen = pygame.display.set_mode(size)
plr_g = pygame.sprite.Group()
blue = (0,206,209)
class player(pygame.sprite.Sprite):
def __init__(self, s_x, s_y):
pygame.sprite.Sprite.__init__(self, plr_g)
self.s_x = 300
self.s_y = 300
self.image.fill(blue)
#self.plr_img = pygame.image.load("Xpic.png")
plr_g.add(self)
self.image = pygame.screen([s_x, s_y])
self.rect = self.image.get_rect()
plr_g.update()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
plr_g.draw(screen)
screen.fill((50, 50, 50))
#player.draw(screen)
plr_g.draw(screen)
pygame.display.flip()
首先,您没有正确地使用sprite类。当你定义一个新的精灵时,你至少需要两样东西:一个图像和一个矩形。图像是将要显示的内容,矩形定义了在屏幕上绘制时图像的放置位置。你知道吗
对于图像,要使用一个简单的矩形,只需创建一个pygame曲面并填充它。然后只需使用内置的get\ rect()命令来定义矩形:
然后,实际上需要创建对象的实例。Python标准是用大写字母命名类,以区别于变量:
然后创建一个玩家精灵的实例,如下所示:
在您的游戏循环中,您在精灵组上调用draw两次,一次是在填充屏幕之前,一次是在填充屏幕之后-您只需要执行一次,第一次就被绘制出来了。您也可以对组调用update(),不过在您的sprite上定义update方法之前,它不会执行任何操作。你知道吗
下面是一些注释/清理过的代码:
现在,尝试在sprite中定义一个update方法,例如,通过改变rect坐标使其移动
您还应该查看http://www.pygame.org/docs/ref/time.html#pygame.time.Clock以了解如何设置帧速率。你知道吗
相关问题 更多 >
编程相关推荐