我正在试着做一个接球动作,以便接住一些落下的球。球和捕手是精灵(为了使用pygame.sprite.groupcollide)。然而,捕手站着不动,不服从任何命令。我没有收到任何订单。我是个菜鸟。
我检查了每一个函数,但我找不到任何原因。
主代码:
import pygame
import sys
from pygame.sprite import Group
import game_functions as gf
from settings import Settings
from guy import Guy
def run_game():
pygame.init()
settings = Settings()
screen = pygame.display.set_mode((settings.screen_width, settings.screen_height))
pygame.display.set_caption('Catcher game')
balls = Group()
guys = Group()
guy = Guy(screen, settings)
guys.add(guy)
while True:
for guy in guys:
gf.check_events(guy)
guy.update()
gf.update_ball (settings, screen, guys, balls)
gf.check_ball_bottom (settings, balls)
gf.update_screen (screen, guys, balls, settings)
run_game()功能:
import pygame
import sys
from ball import Ball
from settings import Settings
from guy import Guy
def check_events(guy):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.display.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events (event, guy )
elif event.type == pygame.KEYUP:
check_keyup_events (event, guy)
def check_keydown_events (event, guy):
if event.key == pygame.K_RIGHT:
guy.moving_right == True
elif event.key == pygame.K_LEFT:
guy.moving_left == True
elif event.key == pygame.K_q:
pygame.display.quit()
sys.exit()
def check_keyup_events (event, guy):
if event.key == pygame.K_RIGHT:
guy.moving_right == False
elif event.key == pygame.K_LEFT:
guy.moving_left == False
def create_new_ball (screen, settings, balls):
new_ball = Ball (screen, settings)
balls.add(new_ball)
def update_ball (settings, screen, guys, balls):
#we have to check if there is any ball left
if len(balls) == 0:
create_new_ball (screen, settings, balls)
collisions = pygame.sprite.groupcollide (balls, guys, True, False)
def check_ball_bottom (settings, balls):
for ball in balls.copy():
if ball.rect.y > settings.screen_height:
balls.remove(ball)
def update_screen (screen, guys, balls, settings):
screen.fill(settings.bg_color)
for ball in balls:
ball.update()
balls.draw(screen)
for guy in guys:
guy.blitme()
pygame.display.flip()捕获器类:
import pygame
from pygame.sprite import Sprite
class Guy(Sprite):
def __init__(self, screen, settings):
super().__init__()
self.screen = screen
self.image = pygame.image.load('images/guy.bmp')
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
self.settings = settings
#set character position
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
#set flags
self.moving_right = False
self.moving_left = False
self.center = float(self.rect.centerx)
def update (self):
if self.moving_right and self.rect.right < self.setting.width:
self.center += self.settings.guy_speed
if self.moving_left and self.rect.left > 0 :
self.center -= self.settings.guy_speed
self.rect.centerx = self.center
def blitme(self):
self.screen.blit (self.image, self.rect)
#IS this method necessaire if I use guys.draw()?我没有收到任何错误消息。
发布于 2019-09-26 04:31:30
我怀疑您的问题至少有一部分是使用==而不是=为变量赋值。例如,
if event.key == pygame.K_RIGHT:
guy.moving_right == True应该是
if event.key == pygame.K_RIGHT:
guy.moving_right = True这没有显示任何错误的原因是,它仍然是有效的python自己做一个相等的比较。
https://stackoverflow.com/questions/58106112
复制相似问题