Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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_Game Development - Fatal编程技术网

Python 我的pygame玩家精灵未移动和/或更新

Python 我的pygame玩家精灵未移动和/或更新,python,pygame,game-development,Python,Pygame,Game Development,我正在尝试建立一个简单的“flappy鸟”一样的游戏。我试图将所有代码分类为类和方法。如何解决此问题?是因为调用某个方法太早导致代码无法工作,还是因为缺少某些东西?如果有人能给我解释一下,我会很高兴的 sprites.py: import pygame class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.imag

我正在尝试建立一个简单的“flappy鸟”一样的游戏。我试图将所有代码分类为类和方法。如何解决此问题?是因为调用某个方法太早导致代码无法工作,还是因为缺少某些东西?如果有人能给我解释一下,我会很高兴的

sprites.py:

import pygame


class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill((255, 255, 0))
        self.rect = self.image.get_rect()
        self.rect.x = 0
        self.rect.y = (700 / 2)
        self.movex = 0
        self.movey = 0

    def control(self, x, y):
        self.movex += x
        self.movey += y

    def update(self):
        self.rect.x += self.movex
        self.rect.y += self.movey

    def animate(self):
        pass


class Obstacle(pygame.sprite.Sprite):
    def __init__(self, x, y, width, height):
        pygame.sprite.Sprite.__init__(self)
        self.x = x
        self.y = y
        self.width = width
        self.height = height
main.py:

from sprites import *
import pygame

WIDTH = 700
HEIGHT = 700


class Game:

    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
        self.clock = pygame.time.Clock()
        self.score = 0
        self.running = True

    def new(self):
        pass

    def events(self):
        self.game_on = True
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.game_on = False
                self.running = False
            if event.type == pygame.KEYDOWN:
                if event.type == pygame.K_UP:
                    self.croc.control(0, -20)

    def update(self):
        self.croc = Player()
        self.all_sprites = pygame.sprite.Group()
        self.all_sprites.add(self.croc)
        self.all_sprites.update()

    def draw(self):
        self.screen.fill((0, 0, 0))
        self.all_sprites.draw(self.screen)
        pygame.display.flip()


game = Game()

while game.running:
    game.clock.tick(60)
    game.new()
    game.events()
    game.update()
    game.draw()

谢谢

有两个错误。
Player
对象将在每一帧中重新创建。在
游戏的构造函数中而不是在方法
更新中创建玩家:

class Game:
    def __init__(self):
        # [...]

        self.croc = Player()                     # <--- ADD
        self.all_sprites = pygame.sprite.Group() # <--- ADD
        self.all_sprites.add(self.croc)          # <--- ADD

    def update(self):
        # self.croc = Player()                     # <--- DELETE
        # self.all_sprites = pygame.sprite.Group() # <--- DELETE
        # self.all_sprites.add(self.croc)          # <--- DELETE
        self.all_sprites.update()

完整代码:

导入pygame
职业玩家(pygame.sprite.sprite):
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.Surface((50,50))
self.image.fill((255,255,0))
self.rect=self.image.get_rect()
self.rect.x=0
自校正y=(700/2)
self.movex=0
self.movey=0
def控制(自身、x、y):
self.movex+=x
self.movey+=y
def更新(自我):
self.rect.x+=self.movex
self.rect.y+=self.movey
def动画(自):
通过
职业障碍(pygame.sprite.sprite):
定义初始值(自、x、y、宽度、高度):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.x=x
self.y=y
self.width=宽度
自我高度=高度
宽度=700
高度=700
班级游戏:
定义初始化(自):
pygame.init()
self.screen=pygame.display.set_模式((宽度、高度))
self.clock=pygame.time.clock()
self.score=0
self.running=True
self.croc=Player()
self.all_sprites=pygame.sprite.Group()
self.all_sprite.add(self.croc)
def新(自我):
通过
def事件(自):
self.game_on=True
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
self.game_on=False
self.running=False
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_UP:
自身鳄鱼对照(0,-20)
def更新(自我):
self.all_sprites.update()
def牵引(自):
自我筛选填充((0,0,0))
self.all_sprite.draw(self.screen)
pygame.display.flip()
游戏
在游戏运行时:
游戏。时钟。滴答声(60)
game.new()
game.events()
game.update()
比赛平局

self。每次调用
game.update()
时,也不应重新初始化所有精灵。
self.所有精灵的设置也应移到游戏构造器中。移动后,
game.update()
中剩下的唯一一件事就是调用
self.all\u sprites.update()
@glennmackinosh你完全正确,我忽略了这一点。谢谢