首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pygame "catcher“(精灵)不会移动。Python速成课程13-5

Pygame "catcher“(精灵)不会移动。Python速成课程13-5
EN

Stack Overflow用户
提问于 2019-09-26 04:28:20
回答 1查看 58关注 0票数 1

我正在试着做一个接球动作,以便接住一些落下的球。球和捕手是精灵(为了使用pygame.sprite.groupcollide)。然而,捕手站着不动,不服从任何命令。我没有收到任何订单。我是个菜鸟。

我检查了每一个函数,但我找不到任何原因。

主代码:

代码语言:javascript
复制
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()

功能:

代码语言:javascript
复制
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()

捕获器类:

代码语言:javascript
复制
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()?

我没有收到任何错误消息。

EN

回答 1

Stack Overflow用户

发布于 2019-09-26 04:31:30

我怀疑您的问题至少有一部分是使用==而不是=为变量赋值。例如,

代码语言:javascript
复制
if event.key == pygame.K_RIGHT:
    guy.moving_right == True

应该是

代码语言:javascript
复制
if event.key == pygame.K_RIGHT:
    guy.moving_right = True

这没有显示任何错误的原因是,它仍然是有效的python自己做一个相等的比较。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58106112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档