【发布时间】:2019-05-06 18:51:27
【问题描述】:
我的问题是如何在我的游戏中提高我的射击功能。我正在尝试使其到达玩家可以朝其移动方向射击的位置(例如向上、向下、向左、向右)以及在移动时射击和在空闲时射击。
玩家和导弹都是使用 pygame 形状的矩形,以便我更容易理解游戏开发背后的逻辑。
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])
这里是游戏代码,有助于更好地理解我在说什么。我注释掉的小部分是我尝试过的。我目前只将它设置为从其初始起点向左移动的 x 方向。
import pygame #####IMPORTING PYGAME MODULE###########################
pygame.init() #####INITIALIZING PYGAME##################################
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)
red = (255,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 enemies():
return
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 = -6
#if event.key == pygame.K_SPACE and pygame.K_RIGHT:
#mx_change = 6
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
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(100)
pygame.quit()
quit()
gameloop()
【问题讨论】:
-
我不知道你为什么用按键来改变导弹的位置。它应该自行改变位置 - 始终沿选定方向移动。
-
您可以使用
pygame.Rect()来保持玩家和导弹的位置和大小。 Rect() 可用于draw(..., missille_rect)和blit(..., missille_rect)并具有检查碰撞的功能player_rect.colliderect(missille_rect) -
添加了整个代码以便更好地理解问题。
-
当你按下空格键时,你应该创建导弹并设置它的方向,而不是用其他键改变它。并且不要在 KEYUP SPACE 时重置它。您应该在一段时间或几帧后杀死/删除/重置它,这样它就不会取决于玩家的位置。
-
我认为你应该阅读一些关于真正基本游戏架构的文章/tuts。从我的角度来看,您的代码毫无意义。