如何解决如何删除绘制的项目符号并添加图像作为项目符号,一次发射一个项目符号?
我是编码方面的大傻瓜!我实际上有3件事要问!我看了一些使用python制作游戏的教程,从中我制作了一个游戏类型的东西!在其中我要绘制图像的子弹画上了一下,它可以一击即发,我也想一次一次地发射1枚子弹,我也想让我的角色进行一次双跳。谢谢访问!请帮助我!
import pygame
pygame.init()
class projectile(object):
def __init__(self,x,y,radius,color,facing):
self.x = x
self.y = y
self.radius = radius
self.color = color
self.facing = facing
self.vel = 8 * facing
def draw(self,win):
pygame.draw.circle(win,self.color,(self.x,self.y),self.radius)
def redrawGameWindow():
win.blit(bg,(0,0))
man.draw(win)
for bullet in bullets:
bullet.draw(win)
pygame.display.update()
#mainloop
man = player(200,410,64,64)
bullets = []
run = True
while run:
clock.tick(27)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
for bullet in bullets:
if bullet.x < 500 and bullet.x > 0:
bullet.x += bullet.vel
else:
bullets.pop(bullets.index(bullet))
keys = pygame.key.get_pressed()
if keys[pygame.K_c]:
if man.left:
facing = -1
else:
facing = 1
if len(bullets) < 3:
bullets.append(projectile(round(man.x + man.width //2),round(man.y + man.height//2),6,0),facing))
if keys[pygame.K_a] and man.x > man.vel:
man.x -= man.vel
man.left = True
man.right = False
man.standing = False
elif keys[pygame.K_d] and man.x < 500 - man.width - man.vel:
man.x += man.vel
man.right = True
man.left = False
man.standing = False
else:
man.standing = True
man.walkCount = 0
if not(man.isJump):
if keys[pygame.K_SPACE]:
man.isJump = True
if man.left:
facing = -1
else:
facing = 1
man.walkCount = 0
else:
if man.jumpCount >= -8:
neg = 1
if man.jumpCount < 0:
neg = -1
man.y -= (man.jumpCount ** 2) * 0.5 * neg
man.jumpCount -= 1
else:
man.isJump = False
man.jumpCount = 8
redrawGameWindow()
pygame.quit()
解决方法
如果要在按下 c 时只发射一枚子弹,请实施KEYDOWN
事件(请参见pygame.event
):
while run:
# [...]
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_c:
facing = -1 if man.left else 1
if len(bullets) < 3:
startPos = round(man.x + man.width //2),round(man.y + man.height//2)
bullets.append(projectile(startPos,6,(0,0),facing))
# [...]
# DELETE
#if keys[pygame.K_c]:
# if man.left:
# facing = -1
# else:
# facing = 1
#
# if len(bullets) < 3:
# bullets.append(...)
只要按住键,状态keys[pygame.K_c]
为True
。只要按下该键,就会在每一帧中发射1发子弹。 KEYDOWN
事件仅在按下一个键时执行一次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。