微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按下空间时球不动

如何解决按下空间时球不动

有人在这代码中看到问题了吗?试图使球/子弹离开左桨,并在碰到右桨时消失,但是当我尝试运行代码时,通常看不到球。我认为它隐藏在左桨后面,但是当我有空间时它也不动。我正在尝试制作一个游戏,其中左边的玩家应该使用子弹,而右边的玩家则希望躲避子弹。现在,我陷入困境。请帮忙。谢谢!

import pygame 

pygame.init()

screen_width = 1280
screen_height = 720
window = pygame.display.set_mode((screen_width,screen_height),0)

pygame.display.set_caption("PongGame")

clock = pygame.time.Clock()
#background
background = pygame.image.load("C:/Users/teamb/Desktop/PythonWorkspace/myGame/background.png")

#paddle image
paddle = pygame.image.load("C:/Users/teamb/Desktop/PythonWorkspace/myGame/paddle.png")
paddle_size = paddle.get_rect().size

#left paddle
left_paddle_width = paddle_size[0]
left_paddle_height = paddle_size[1]
left_paddle_xpos = 10
left_paddle_ypos = (screen_height/2 - left_paddle_height/2)

to_x = 0
to_y = 0

character_speed = 10

#right paddle
right_paddle_width = paddle_size[0]
right_paddle_height = paddle_size[1]
right_paddle_xpos = screen_width - right_paddle_width - 10
right_paddle_ypos = (screen_height/2 - left_paddle_height/2)

to_y_2 = 0
# ball
bullet = pygame.image.load("C:/Users/teamb/Desktop/PythonWorkspace/myGame/ball.png")
bullet_size = bullet.get_rect().size
bullet_width = bullet_size[0]
#make the bullet be able to shoot multiple at the same time
bullets = []
#bulllet speed
bullet_speed = 15


running = True
while running:
   dt = clock.tick(60)
   
   for event in pygame.event.get():
      if event.type == pygame.QUIT:
         running = False
   #left paddle
      if event.type == pygame.KEYDOWN:
         if event.key == pygame.K_w:
            to_y -= character_speed
         elif event.key == pygame.K_s:
             to_y += character_speed
         elif event.key == pygame.K_SPACE:
            bullet_ypos = left_paddle_ypos
            bullet_xpos = left_paddle_xpos
            bullets.append([bullet_xpos,bullet_ypos])

      if event.type == pygame.KEYUP:
         if event.key == pygame.K_w or event.key == pygame.K_s:
            to_y = 0
   #right paddle
      if event.type == pygame.KEYDOWN:
         if event.key == pygame.K_UP:
            to_y_2 -= character_speed
         elif event.key == pygame.K_DOWN:
             to_y_2 += character_speed

      if event.type == pygame.KEYUP:
         if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
            to_y_2 = 0

   left_paddle_ypos += to_y
   right_paddle_ypos += to_y_2

   bullets = [ [w[0] - bullet_speed,w[1]] for w in bullets] #shoot the bullet 

   bullets = [ [w[0],w[1]] for w in bullets if w[0] == right_paddle_xpos and w[1] == right_paddle_ypos]

   #barrier for the paddles to not go outside the screen.
   if left_paddle_ypos < 0:
      left_paddle_ypos =  0
   
   if left_paddle_ypos > screen_height - left_paddle_height:
      left_paddle_ypos = screen_height - left_paddle_height

   window.blit(background,(0,0))
   
   window.blit(paddle,(left_paddle_xpos,left_paddle_ypos))
   window.blit(paddle,(right_paddle_xpos,right_paddle_ypos))

   for bullet_xpos,bullet_ypos in bullets:      
      window.blit(bullet,(bullet_xpos,bullet_ypos))

   pygame.display.update()

pygame.quit()

解决方法

需要两项更改:

  • 删除此行。在项目符号显示之前,它会清除项目符号列表。

    #bullets = [ [w[0],w[1]] for w in bullets if w[0] == right_paddle_xpos and w[1] == right_paddle_ypos]

  • 更改此行(从-+)。它会向错误的方向发送子弹。

    bullets = [ [w[0] + bullet_speed,w[1]] for w in bullets] #shoot the bullet

,

试图使球/子弹击中右桨后消失

因此,我假设这是要产生这种效果的行:

bullets = [ [w[0],w[1]] for w in bullets if w[0] == right_paddle_xpos and w[1] == right_paddle_ypos]

请仔细阅读:对于每个子弹位置,我们将检查if的位置准确位于右桨的位置(即左上角重合!),如果是这样,请保留该一个未修改的内容; 其他所有东西都被丢弃

您需要use proper collision logic,并且需要保持弹 未与吸收体碰撞的子弹。

偶然地:

     elif event.key == pygame.K_SPACE:
        bullet_ypos = left_paddle_ypos
        bullet_xpos = left_paddle_xpos
        bullets.append([bullet_xpos,bullet_ypos])

相对于左桨,您究竟想如何定位新子弹?这段代码如何表明他们将被定位?

子弹= [[w [0]-bullet_speed,w [1]]表示子弹中的w]#拍摄子弹

如果子弹的速度为正,您希望哪种方式移动子弹?根据这种逻辑,它实际上将以哪种方式移动?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。