当前位置: 首页 > 面试题库 >

如何在pygame中创建项目符号?

桂梓
2023-03-14
问题内容

我知道有几个主题,但是我仍然不知道如何制作飞船的子弹。.我想在声音效果播放时,添加从飞船射击的MOUSEBUTTONDOWN子弹。谢谢您的帮助!

import sys, pygame, pygame.mixer
from pygame.locals import *

pygame.init()

size = width, height = 800, 600
screen = pygame.display.set_mode(size)

clock = pygame.time.Clock()

background = pygame.image.load("bg.png")
ship = pygame.image.load("ship.png")
ship = pygame.transform.scale(ship,(64,64))

shot = pygame.mixer.Sound("shot.wav")
soundin = pygame.mixer.Sound("sound.wav")

soundin.play()

while 1:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      sys.exit()

    elif event.type == MOUSEBUTTONDOWN:
      shot.play()

  clock.tick(60)

  mx,my = pygame.mouse.get_pos()

  screen.blit(background,(0,0))
  screen.blit(ship,(mx-32,500))
  pygame.display.flip()

问题答案:

您必须完成几个步骤。您将需要项目符号的图片,存储项目符号位置的方法,创建项目符号的方法,呈现项目符号的方法以及更新项目符号的方法。您似乎已经知道如何导入图片,因此我将跳过这一部分。

您可以通过多种方式存储信息。我将使用项目符号左上角的列表。在最终循环之前的任何位置创建列表bullets = []

要创建项目符号,您将需要使用鼠标的位置。加入bullets.append([event.pos[0]-32, 500])shot.play(),缩进相同的数量。

要渲染项目符号,您将在游戏循环中添加一个for循环。在该行之后screen.blit(background, (0, 0)),添加以下代码:

for bullet in bullets:
    screen.blit(bulletpicture, pygame.Rect(bullet[0], bullet[1], 0, 0)

要更新项目符号,您需要在游戏循环中的某处放置如下内容:

for b in range(len(bullets)):
    bullets[b][0] -= 10

最后,您需要在项目符号到达屏幕顶部时将其删除。在刚刚创建的for循环之后添加此内容(在切片副本上进行迭代,因为列表不应在迭代过程中进行修改):

for bullet in bullets[:]:
    if bullet[0] < 0:
        bullets.remove(bullet)

将所有内容放入代码后,它应如下所示:

import sys, pygame, pygame.mixer
from pygame.locals import *

pygame.init()

size = width, height = 800, 600
screen = pygame.display.set_mode(size)

clock = pygame.time.Clock()

bullets = []

background = pygame.image.load("bg.png").convert()
ship = pygame.image.load("ship.png").convert_alpha()
ship = pygame.transform.scale(ship, (64, 64))
bulletpicture = pygame.image.load("You know what to do").convert_alpha()

shot = pygame.mixer.Sound("shot.wav")
soundin = pygame.mixer.Sound("sound.wav")

soundin.play()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        elif event.type == MOUSEBUTTONDOWN:
            shot.play()
            bullets.append([event.pos[0]-32, 500])

    clock.tick(60)

    mx, my = pygame.mouse.get_pos()

    for b in range(len(bullets)):
        bullets[b][0] -= 10

    # Iterate over a slice copy if you want to mutate a list.
    for bullet in bullets[:]:
        if bullet[0] < 0:
            bullets.remove(bullet)

    screen.blit(background, (0, 0))

    for bullet in bullets:
        screen.blit(bulletpicture, pygame.Rect(bullet[0], bullet[1], 0, 0))

    screen.blit(ship, (mx-32, 500))
    pygame.display.flip()

如果您和我都正确地完成了所有操作,那么应该可以使您正常运行。请不要犹豫,问我任何问题,如果您不了解正在发生的事情或某些事情不起作用。

请注意,应该使用convertconvert_alpha方法转换images
/ pygame.Surfaces以提高性能。



 类似资料:
  • 嗨,我是sbt的新手,我正在学习这个教程http://www.scala-sbt.org/0.13/tutorial/Hello.html我在shell上遵循了相同的步骤,程序显示“嗨”,我很困惑,我的hello文件夹中没有这些文件 src/main/scala或src/main/java中的来源 src/test/scala或src/test/java中的测试 src/main/资源或src/t

  • 我正在开发一个电子商务应用程序。为此,我想为每个客户创建一个会话,以维护他们的购物车信息。 如果它是一个普通的JavaEE项目,我会使用并将所有购物车信息添加到该会话中。 我的问题是对于EJB项目,为上述目的创建会话的过程是什么?

  • 我正在制作一个目录来存储所有上传的文件在我的spring boot应用程序启动时。 此目录的路径存储在application.properties文件中。我正在尝试阅读这个路径,并在项目启动时创建一个目录。在启动时创建目录时,我无法获取路径。

  • 如何在IntelliJ IDEA中从头开始打开JavaFX Maven项目?由于Java项目和JavaFx项目之间没有区别,我想打开一个包含Maven模块的专用JavaFx项目(从创建项目向导中选择JavaFx)。

  • 如何在回收器视图元素之间创建项目分隔符,例如在WhatsApp中? 我尝试了下面链接中给出的SimpleItemDecorator类,但没有得到预期的结果: https://stackoverflow.com/a/41547052