首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当角色没有接住球时,我希望球被随机放置,然后再掉下来,但这种情况没有发生,为什么?

当角色没有接住球时,我希望球被随机放置,然后再掉下来,但这种情况没有发生,为什么?
EN

Stack Overflow用户
提问于 2020-09-30 19:52:59
回答 1查看 34关注 0票数 1

1.捕获it.py --这是主要的python文件

代码语言:javascript
运行
复制
 import sys
 import pygame
 from settings import Settings
 from character import Character
 from ball import Ball
 import game_functions as gf
 def run_game():
    ai_settings=Settings(1200,700,(230,230,230))
    screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
    pygame.display.set_caption('catch it')

    boy=Character(screen,ai_settings)
    ball=Ball(screen,ai_settings)
    while True:
       gf.check_events(screen,ai_settings,boy)
       gf.update_ball(screen,ai_settings,ball,boy)
       boy.update()
    
       gf.update_screen(screen,ai_settings,boy,ball)
 run_game()

2.settings.py这个文件有屏幕的所有设置,球的速度和字符的速度。

代码语言:javascript
运行
复制
 class Settings():
    def __init__(self,screen_width,screen_height,screen_bg_color):
      self.screen_width=screen_width
      self.screen_height=screen_height
      self.screen_bg_color=screen_bg_color
      self.speed_ball=0.1
      self.speed_character=2

3.ball.py更新方法将球向下移动一个像素,并在球到达底部后检查球底是否到达screen.Here底部,我试着将另一个球随机落地,但我的球没有落下,我可以看到一个随机的球形成但没有移动,然后消失,然后又出现了另一个球等等。

代码语言:javascript
运行
复制
from time import sleep
import pygame
from random import randint
class Ball():
   def __init__(self,screen,ai_settings):
    self.screen=screen
    self.screen_rect=screen.get_rect()
    self.ai_settings=ai_settings


    self.image=pygame.image.load('/Users/WIN-10/Desktop/game/catching ball/ball.bmp')
    self.rect=self.image.get_rect()
    '''randomly initialize position of ball'''
    self.rect.x=randint(0,self.ai_settings.screen_width)
    self.rect.y=randint(0,self.ai_settings.screen_height)

    self.y=float(self.rect.y)

   def update(self):
    '''check if ball reached bottom of screen'''
    
    
    self.y+=self.ai_settings.speed_ball
    self.rect.y=self.y
    if self.rect.bottom>=self.screen_rect.bottom:
      self.rect.x=randint(0,self.ai_settings.screen_width)
    sleep(1)
   def blitme(self):
    self.screen.blit(self.image,self.rect)

4.character.py

代码语言:javascript
运行
复制
from random import randint
import pygame
class Character():
  def __init__ (self,screen,ai_settings):
    self.screen=screen
    self.ai_settings=ai_settings
    self.image=pygame.image.load('/Users/WIN-10/Desktop/game/catching ball/boy.bmp ')
    self.rect=self.image.get_rect()
    self.screen_rect=self.screen.get_rect()

    '''initializing position'''
    self.rect.x=self.screen_rect.centerx
    self.rect.bottom=self.screen_rect.bottom

    
    
    self.moving_left=False
    self.moving_right=False
    self.x=float(self.rect.x)
    
    
  def update(self):
    if self.moving_left and self.x>0:
        self.x-=self.ai_settings.speed_character
    if self.moving_right and self.x<self.screen_rect.right:
        self.x+=self.ai_settings.speed_character
    self.rect.x=self.x

  def blitme(self):
      self.screen.blit(self.image,self.rect)

5.game_functions.py

代码语言:javascript
运行
复制
   import pygame
   import sys
   from random import randint
   def check_key_down(event,screen,ai_settings,boy):

      if event.key==pygame.K_LEFT:
         boy.moving_left=True
      elif event.key==pygame.K_RIGHT:
        boy.moving_right=True





   def check_key_up(event,screen,ai_settings,ship):
      if event.key==pygame.K_LEFT:
         ship.moving_left=False
      elif event.key==pygame.K_RIGHT:
        ship.moving_right=False


   def check_events(screen,ai_settings,boy):

      for event in pygame.event.get():
        if event.type==pygame.K_q:
           sys.exit()
        elif event.type==pygame.KEYUP:
           check_key_up(event,screen,ai_settings,boy)
        elif event.type==pygame.KEYDOWN:
           check_key_down(event,screen,ai_settings,boy)


   def check_ball_character_collision(screen,ai_settings,ball,boy):
       collisions=pygame.sprite.collide_rect(ball, boy)
       return collisions

   def ball_caught(ball):
       ball.rect.x=randint(0,ball.ai_settings.screen_width)
       ball.rect.y=randint(0,ball.ai_settings.screen_height-200)
 
   def update_ball(screen,ai_settings,ball,boy):
     ball.update()

    
     if check_ball_character_collision(screen,ai_settings,ball,boy):
        ball_caught(ball)
   

    


   def update_screen(screen,ai_settings,boy,ball):
      screen.fill(ai_settings.screen_bg_color)
      ball.blitme()
      boy.blitme()
      pygame.display.flip()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-30 20:10:36

Ball实例的Ballself.y更新。因此,您必须更改ball.y而不是ball.rect.y

代码语言:javascript
运行
复制
def ball_caught(ball):
    
    ball.rect.x = randint(0,ball.ai_settings.screen_width)
    
    # ball.rect.y = randint(0,ball.ai_settings.screen_height-200) <--- DELETE

    ball.y = randint(0,ball.ai_settings.screen_height-200)      # <--- ADD

从类sleep(1)中删除Ball。如果您想延迟游戏,那么使用pygame.time模块。

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

https://stackoverflow.com/questions/64144797

复制
相关文章

相似问题

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