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