我知道有几个主题,但是我仍然不知道如何制作飞船的子弹。.我想在声音效果播放时,添加从飞船射击的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()
如果您和我都正确地完成了所有操作,那么应该可以使您正常运行。请不要犹豫,问我任何问题,如果您不了解正在发生的事情或某些事情不起作用。
请注意,应该使用convert
或convert_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