Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame,精灵不';不要出现甚至移动_Python_Pygame_Sprite_Pygame Surface - Fatal编程技术网

Python Pygame,精灵不';不要出现甚至移动

Python Pygame,精灵不';不要出现甚至移动,python,pygame,sprite,pygame-surface,Python,Pygame,Sprite,Pygame Surface,我写这段代码是因为我想用箭头键移动精灵。 我想没什么特别的 我花了很多时间搜索显示和移动简单图片的教程 下面是我的代码: 第一部分相当标准,导入库并定义程序的特征值: import sys import pygame pygame.init() #refer value border_X=800 border_Y=600 FPS=30 POS_X=300 POS_Y=300 INCREASE_X=0 INCREASE_Y=0 screen=pygame.display.set_mode((

我写这段代码是因为我想用箭头键移动精灵。 我想没什么特别的

我花了很多时间搜索显示和移动简单图片的教程

下面是我的代码:

第一部分相当标准,导入库并定义程序的特征值:

import sys
import pygame

pygame.init()

#refer value
border_X=800
border_Y=600
FPS=30
POS_X=300
POS_Y=300
INCREASE_X=0
INCREASE_Y=0

screen=pygame.display.set_mode((border_X,border_Y))
clock=pygame.time.Clock()
这里我定义了sprite类,可能是对该类的定义有误解,可能是我使用了
rect.center
的方式不正确

class Ship(pygame.sprite.Sprite):
       image = pygame.image.load("fighter_0.png")
       image = image.convert_alpha()
       def __init__(self, X_INIT, Y_INIT):         
           super(Ship, self).__init__()
           self.image = Ship.image
           self.rect = self.image.get_rect()
           self.rect.center = (X_INIT, Y_INIT)
       def update(self,x,y):
           self.rect.center = (x,y)
在这里,我创建了一个精灵组,可能一个精灵都不需要,但是这个程序的主要目的是学习

在任何情况下,我都试图在不创建组“角色”的情况下显示精灵

character = pygame.sprite.Group()
Ship.groups=character
ship=Ship(POS_X,POS_Y)
ship.add(character)
最后是循环周期,更新模式可能有错误

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:             
        if event.type == pygame.KEYUP:

        '''i've removed the if cycle of event.type 
           because it's long and unnecessary to 
           explain why the sprite doesn't appear'''  

    POS_X+=INCREASE_X
    POS_Y+=INCREASE_Y    
    ship.update(POS_X,POS_Y)
    clock.tick(FPS)
    #i've tried both, flip and update
    pygame.display.flip()
    pygame.display.update()

pygame.quit()

如果我完全错误地计算了“精灵”级的模式,有人能解释一下如何为这种情况设置“飞船”级吗?

阅读文档

和是pygame.sprite.Group提供的方法

前者将任务委托给所包含的
update
方法—您必须实现该方法。见:

对组[…]中的所有精灵调用
update()
方法

后者使用包含的
pygame.sprite.sprite
s的
image
rect
属性来绘制对象-您必须确保
pygame.sprite.sprite
s具有所需的属性。见:

将包含的精灵绘制到曲面参数。这将使用源曲面的
Sprite.image
属性和
Sprite.rect
。[……]

因此,您需要调用组
字符
的方法
draw()

为True时:
# [...]
屏幕填充((0,0,0))
字符绘制(屏幕)
pygame.display.flip()
时钟滴答声(FPS)

阅读文档

和是pygame.sprite.Group提供的方法

前者将任务委托给所包含的
update
方法—您必须实现该方法。见:

对组[…]中的所有精灵调用
update()
方法

后者使用包含的
pygame.sprite.sprite
s的
image
rect
属性来绘制对象-您必须确保
pygame.sprite.sprite
s具有所需的属性。见:

将包含的精灵绘制到曲面参数。这将使用源曲面的
Sprite.image
属性和
Sprite.rect
。[……]

因此,您需要调用组
字符
的方法
draw()

为True时:
# [...]
屏幕填充((0,0,0))
字符绘制(屏幕)
pygame.display.flip()
时钟滴答声(FPS)

您应该在其中的某个地方调用精灵组的draw方法。因此,如果您的精灵组是“character”,您可以调用character.draw(screen)来绘制该组中的所有精灵。否则,您必须单独blit每个图像。尝试在display.flip()@oxrock之前调用它,不幸的是,这是解释器的答案:[AttributeError:'Ship'对象没有属性'draw'],在代码中,“character”是您的spritegroup。老实说,你在上面的声明都很时髦。试着将你的飞船添加到你的角色群中,因为看起来你是在尝试向后操作。因此,声明精灵组。创建船,然后将船添加到组中。所以:character=pygame.sprite.Group(),然后ship=ship(POS_X,POS_Y),然后简单地character.add(ship)。现在在display.flip()之前的底部,您应该能够调用character.draw(screen)在屏幕上绘制您的飞船(以及角色中包含的所有精灵)。@oxrock,它似乎可以工作,我还解决了删除角色以更新屏幕的问题,非常感谢!没问题,快乐编码。在那里的某个地方,你应该调用精灵组的draw方法。因此,如果您的精灵组是“character”,您可以调用character.draw(screen)来绘制该组中的所有精灵。否则,您必须单独blit每个图像。尝试在display.flip()@oxrock之前调用它,不幸的是,这是解释器的答案:[AttributeError:'Ship'对象没有属性'draw'],在代码中,“character”是您的spritegroup。老实说,你在上面的声明都很时髦。试着将你的飞船添加到你的角色群中,因为看起来你是在尝试向后操作。因此,声明精灵组。创建船,然后将船添加到组中。所以:character=pygame.sprite.Group(),然后ship=ship(POS_X,POS_Y),然后简单地character.add(ship)。现在在display.flip()之前的底部,您应该能够调用character.draw(screen)在屏幕上绘制您的飞船(以及角色中包含的所有精灵)。@oxrock,它似乎可以工作,我还解决了删除角色以更新屏幕的问题,非常感谢!没问题,快乐编码。