我试图让我的代码从玩家位置在屏幕上拍摄 pygame.rect 。现在它会射击,但是当我松开空格按钮时,它不会重置矩形。我已将其设置为更改 x 坐标,但我希望在释放空格按钮后将其重置。
如果 event.key == pygame.K_SPACE: mx_change = -100
我可以使用 event.key == pygame.KEYUP: 以某种方式重置它吗?
import pygame #####IMPORTING PYGAME MODULE###########################
pygame.init()
#####INITIALIZINGPYGAME##################################
gameWindow = pygame.display.set_mode((800,600)) ###Screen Width and
Height###
clock = pygame.time.Clock() ## FRAMES PER SECOND ##
white = (255,255,255)
black = (0,0,0)
def player(px,py):
pygame.draw.rect(gameWindow,black,[px,py,30,30])
def missile(mx,my):
pygame.draw.rect(gameWindow,black,[mx,my,10,10])
def gameloop():
px = 700
py = 300
mx = 700
my = 300
px_change = 0
py_change = 0
mx_change = 0
my_change = 0
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
mx_change = -10
if event.key == pygame.K_RIGHT:
mx_change = 10
if event.key == pygame.K_UP:
my_change = -10
if event.key == pygame.K_DOWN:
my_change = 10
if event.key == pygame.K_SPACE:
mx_change = -100
if event.key == pygame.K_LEFT:
px_change = -10
if event.key == pygame.K_RIGHT:
px_change = 10
if event.key == pygame.K_UP:
py_change = -10
if event.key == pygame.K_DOWN:
py_change = 10
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
px_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
py_change = 0
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
mx_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
my_change = 0
if event.key == pygame.K_SPACE:
mx_change = 0
my_change = 0
px += px_change
py += py_change
mx += mx_change
my += my_change
gameWindow.fill(white)
player(px,py)
missile(mx,my)
pygame.display.update()
clock.tick(15)
pygame.quit()
quit()
gameloop()
请试试这个。
当你按下空格键时,你发射了导弹。它被计算为mx_change = -100
但是你第二次按下按钮,导弹从未发射过。
因为你忘记重写变量。
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
mx_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
my_change = 0
if event.key == pygame.K_SPACE:
mx_change = 0
my_change = 0
当然,你可以改变mx_change
& my_change
,但是你通过missile
函数传递。也就是说,导弹的位置是由mx
&决定的my
,如你所见。
所以我建议你写成如下。
mx = px
my = py
我为什么要设置这些点?
你的导弹是黑色的。而玩家也是黑人。导弹从玩家发射。这两个东西都是黑色的,所以很好。
如果您有任何问题,请通过评论问我。
import pygame #####IMPORTING PYGAME MODULE###########################
pygame.init()
#####INITIALIZINGPYGAME##################################
gameWindow = pygame.display.set_mode((800,600)) ###Screen Width and Height###
clock = pygame.time.Clock() ## FRAMES PER SECOND ##
white = (255,255,255)
black = (0,0,0)
def player(px,py):
pygame.draw.rect(gameWindow,black,[px,py,30,30])
def missile(mx,my):
pygame.draw.rect(gameWindow,black,[mx,my,10,10])
def gameloop():
px = 700
py = 300
mx = 700
my = 300
px_change = 0
py_change = 0
mx_change = 0
my_change = 0
gameExit = False
while not gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameExit = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
mx_change = -10
if event.key == pygame.K_RIGHT:
mx_change = 10
if event.key == pygame.K_UP:
my_change = -10
if event.key == pygame.K_DOWN:
my_change = 10
if event.key == pygame.K_SPACE:
mx_change = -100
if event.key == pygame.K_LEFT:
px_change = -10
if event.key == pygame.K_RIGHT:
px_change = 10
if event.key == pygame.K_UP:
py_change = -10
if event.key == pygame.K_DOWN:
py_change = 10
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
px_change = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
py_change = 0
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
mx_change = 0
mx = px
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
my_change = 0
my = py
if event.key == pygame.K_SPACE:
mx_change = 0
my_change = 0
mx = px
my = py
px += px_change
py += py_change
mx += mx_change
my += my_change
gameWindow.fill(white)
player(px,py)
missile(mx,my)
pygame.display.update()
clock.tick(15)
gameloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句