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

Python 尽管pygame中有输入,但精灵不移动

Python 尽管pygame中有输入,但精灵不移动,python,pygame,sprite,Python,Pygame,Sprite,我在pygame中遇到了一个问题,不管输入是什么,精灵都不会移动,我已经检查了好几次,但不知道它出了什么问题。共有3页,第一页包含游戏的主循环,第二页包含玩家精灵的代码,第三页包含一些游戏功能 主页------第01页 import pygame import sys from player import Player import game_functions as gf def run_game(): # Intialise the game and start the scree

我在pygame中遇到了一个问题,不管输入是什么,精灵都不会移动,我已经检查了好几次,但不知道它出了什么问题。共有3页,第一页包含游戏的主循环,第二页包含玩家精灵的代码,第三页包含一些游戏功能

主页------第01页

import pygame
import sys
from player import Player
import game_functions as gf

def run_game():
    # Intialise the game and start the screen
    pygame.init()   
    screen = pygame.display.set_mode((800, 600))
    pygame.display.set_caption("AmarCreep")
    
    player = Player(screen)
    
    # Main loop
    while True:
        # Check if user wants to quit
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
                
        # Navy screen       
        screen.fill((0,0,128))
        
        gf.responses(screen, player)
        player.p_movements()
            
        # Make the player appear
        player.draw_player()
        
        # Make the newly made screen visible
        pygame.display.flip()
    
run_game()
播放机-----------------02页

import pygame
from pygame.sprite import Sprite


class Player(Sprite):
    # Initialise the main player
    
    def __init__(self, screen):
        super(Player, self).__init__()
        
        self.screen = screen
        self.screen_rect = screen.get_rect()
        
        # Specifying the position of the player at start 
        self.rect = pygame.Rect(0, 0, 30, 30)
        self.rect.centerx = self.screen_rect.centerx
        self.rect.bottom = 590
        
        self.moving_left = False
        self.moving_right = False
        self.moving_up = False
        
    def p_movements(self):
        
        if self.moving_left:
            self.rect.x -= 5
        if self.moving_right:
            self.rect.x += 5
        if self.moving_up:
            self.rect.y -= 30   
        
    def draw_player(self):
        ''' Draw the player on the screen'''
        pygame.draw.rect(self.screen, (255,255,255), self.rect)
        
            
游戏功能-----------------第03页

import pygame


def responses(screen, player):
    ''' Check for responses'''
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                player.moving_up == True
                
            elif event.key == pygame.K_LEFT:
                player.moving_left == True
                
            elif event.key == pygame.K_RIGHT:
                player.moving_right == True
                
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_UP:
                player.moving_up == False
                
            elif event.key == pygame.K_LEFT:
                player.moving_left == False
                
            elif event.key == pygame.K_RIGHT:
                player.moving_right == False
在主事件循环中,您似乎要做的第一件事是在查找退出事件时完全清除队列。这不一定会与游戏函数文件中的第二个事件循环配合得很好

事实上,有两个事件循环是相当混乱的,其中一个会丢弃任何不是退出事件的东西——这很可能会导致丢失事件

我认为更好的方法是提供一个
响应
游戏功能,它只处理一个事件(并且根本不涉及事件队列):

def响应(屏幕、播放器、evt):
如果evt.type==pygame.KEYDOWN:
废话废话
并具有主(现在是唯一)事件循环调用,对于它不希望自己处理的事件:

pygame.event.get()中事件的
:
如果event.type==pygame.QUIT:
sys.exit()
gf.响应(屏幕、播放器、事件)


你也可以考虑当按下上下按钮时(或者左右),你会想到什么。至少,您可能希望将其作为一个测试用例:-)

很抱歉,再说一遍,但sprite仍然没有移动。我仍然在检查代码,但由于这个小错误,它没有运行,但非常感谢@paxdiablo的帮助