Python 我想用Pygame做一个游戏。但是我的箭可以';不要从正确的位置射击
Python版本:3.8.1 系统:Windows7-32位 看标题,我想做一个游戏,但我遇到了一个问题。玩家发射的箭不会出现在正确的位置。无论玩家的位置如何变化,箭总是从一个位置射出。 我没有使用团队,因为我发现这还不足以制作游戏。 请帮帮我 有一些代码: steve_vs_monsters.pyPython 我想用Pygame做一个游戏。但是我的箭可以';不要从正确的位置射击,python,pygame,Python,Pygame,Python版本:3.8.1 系统:Windows7-32位 看标题,我想做一个游戏,但我遇到了一个问题。玩家发射的箭不会出现在正确的位置。无论玩家的位置如何变化,箭总是从一个位置射出。 我没有使用团队,因为我发现这还不足以制作游戏。 请帮帮我 有一些代码: steve_vs_monsters.py import pygame from settings import Settings import key_event from steve import Steve from update_sc
import pygame
from settings import Settings
import key_event
from steve import Steve
from update_screen import screen_update
from arrow import Arrow
def run_game():
""" """
--snip--
#
steve = Steve(a_settings,screen)
arrow = Arrow(a_settings,screen,steve)
#
arrows = []
#
while True:
#
key_event.check_events(steve,arrow,arrows)
#
update_screen(a_settings,screen,steve,arrow,arrows)
run_game()
import pygame
class Arrow():
""" """
def __init__(self,a_settings,screen,steve):
""" """
--snip--
#
self.rect.centerx = steve.rect.centerx
self.rect.bottom = steve.rect.top
self.rect.left = steve.rect.right
#
self.center = float(self.rect.centerx)
def draw_arrow(self,arrows):
""" """
for a_arrow in arrows:
self.screen.blit(self.image,a_arrow[0:2])
def update_rect(self,steve,arrows):
for a_arrow in arrows:
a_arrow[0] += float(self.a_settings.arrow_speed)
if a_arrow[0] > self.screen_rect.right:
arrows.remove(a_arrow)
import pygame
def update_screen(a_settings,screen,steve,arrow,arrows):
""" """
screen.fill(a_settings.bg_color)
steve.update_rect()
arrow.update_rect(steve,arrows)
steve.draw_steve()
arrow.draw_arrow(arrows)
#
pygame.display.flip()
import sys
import pygame
def check_keydown_events(event,steve,arrow,arrows):
""" """
if event.key == pygame.K_t:
sys.exit()
--snip--
elif event.key==pygame.K_SPACE and len(arrows)<=4:
arrows.append([arrow.center,arrow.rect.bottom,arrow.rect.left])
--snip--
def check_events(steve,arrow,arrows):
""" """
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event,steve,arrow,arrows)
--snip--
箭头.py
import pygame
from settings import Settings
import key_event
from steve import Steve
from update_screen import screen_update
from arrow import Arrow
def run_game():
""" """
--snip--
#
steve = Steve(a_settings,screen)
arrow = Arrow(a_settings,screen,steve)
#
arrows = []
#
while True:
#
key_event.check_events(steve,arrow,arrows)
#
update_screen(a_settings,screen,steve,arrow,arrows)
run_game()
import pygame
class Arrow():
""" """
def __init__(self,a_settings,screen,steve):
""" """
--snip--
#
self.rect.centerx = steve.rect.centerx
self.rect.bottom = steve.rect.top
self.rect.left = steve.rect.right
#
self.center = float(self.rect.centerx)
def draw_arrow(self,arrows):
""" """
for a_arrow in arrows:
self.screen.blit(self.image,a_arrow[0:2])
def update_rect(self,steve,arrows):
for a_arrow in arrows:
a_arrow[0] += float(self.a_settings.arrow_speed)
if a_arrow[0] > self.screen_rect.right:
arrows.remove(a_arrow)
import pygame
def update_screen(a_settings,screen,steve,arrow,arrows):
""" """
screen.fill(a_settings.bg_color)
steve.update_rect()
arrow.update_rect(steve,arrows)
steve.draw_steve()
arrow.draw_arrow(arrows)
#
pygame.display.flip()
import sys
import pygame
def check_keydown_events(event,steve,arrow,arrows):
""" """
if event.key == pygame.K_t:
sys.exit()
--snip--
elif event.key==pygame.K_SPACE and len(arrows)<=4:
arrows.append([arrow.center,arrow.rect.bottom,arrow.rect.left])
--snip--
def check_events(steve,arrow,arrows):
""" """
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event,steve,arrow,arrows)
--snip--
更新屏幕.py
import pygame
from settings import Settings
import key_event
from steve import Steve
from update_screen import screen_update
from arrow import Arrow
def run_game():
""" """
--snip--
#
steve = Steve(a_settings,screen)
arrow = Arrow(a_settings,screen,steve)
#
arrows = []
#
while True:
#
key_event.check_events(steve,arrow,arrows)
#
update_screen(a_settings,screen,steve,arrow,arrows)
run_game()
import pygame
class Arrow():
""" """
def __init__(self,a_settings,screen,steve):
""" """
--snip--
#
self.rect.centerx = steve.rect.centerx
self.rect.bottom = steve.rect.top
self.rect.left = steve.rect.right
#
self.center = float(self.rect.centerx)
def draw_arrow(self,arrows):
""" """
for a_arrow in arrows:
self.screen.blit(self.image,a_arrow[0:2])
def update_rect(self,steve,arrows):
for a_arrow in arrows:
a_arrow[0] += float(self.a_settings.arrow_speed)
if a_arrow[0] > self.screen_rect.right:
arrows.remove(a_arrow)
import pygame
def update_screen(a_settings,screen,steve,arrow,arrows):
""" """
screen.fill(a_settings.bg_color)
steve.update_rect()
arrow.update_rect(steve,arrows)
steve.draw_steve()
arrow.draw_arrow(arrows)
#
pygame.display.flip()
import sys
import pygame
def check_keydown_events(event,steve,arrow,arrows):
""" """
if event.key == pygame.K_t:
sys.exit()
--snip--
elif event.key==pygame.K_SPACE and len(arrows)<=4:
arrows.append([arrow.center,arrow.rect.bottom,arrow.rect.left])
--snip--
def check_events(steve,arrow,arrows):
""" """
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event,steve,arrow,arrows)
--snip--
关键事件.py
import pygame
from settings import Settings
import key_event
from steve import Steve
from update_screen import screen_update
from arrow import Arrow
def run_game():
""" """
--snip--
#
steve = Steve(a_settings,screen)
arrow = Arrow(a_settings,screen,steve)
#
arrows = []
#
while True:
#
key_event.check_events(steve,arrow,arrows)
#
update_screen(a_settings,screen,steve,arrow,arrows)
run_game()
import pygame
class Arrow():
""" """
def __init__(self,a_settings,screen,steve):
""" """
--snip--
#
self.rect.centerx = steve.rect.centerx
self.rect.bottom = steve.rect.top
self.rect.left = steve.rect.right
#
self.center = float(self.rect.centerx)
def draw_arrow(self,arrows):
""" """
for a_arrow in arrows:
self.screen.blit(self.image,a_arrow[0:2])
def update_rect(self,steve,arrows):
for a_arrow in arrows:
a_arrow[0] += float(self.a_settings.arrow_speed)
if a_arrow[0] > self.screen_rect.right:
arrows.remove(a_arrow)
import pygame
def update_screen(a_settings,screen,steve,arrow,arrows):
""" """
screen.fill(a_settings.bg_color)
steve.update_rect()
arrow.update_rect(steve,arrows)
steve.draw_steve()
arrow.draw_arrow(arrows)
#
pygame.display.flip()
import sys
import pygame
def check_keydown_events(event,steve,arrow,arrows):
""" """
if event.key == pygame.K_t:
sys.exit()
--snip--
elif event.key==pygame.K_SPACE and len(arrows)<=4:
arrows.append([arrow.center,arrow.rect.bottom,arrow.rect.left])
--snip--
def check_events(steve,arrow,arrows):
""" """
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
check_keydown_events(event,steve,arrow,arrows)
--snip--
导入系统
导入pygame
def check_keydown_事件(事件、史蒂夫、箭头、箭头):
""" """
如果event.key==pygame.K\u t:
sys.exit()
--剪断--
elif event.key==pygame.K_SPACE and len(arrows)看起来代码最初创建了一个
箭头,该箭头位于steve
的矩形中。当按下K_SPACE
时,该箭头将用作创建新箭头的基本位置
我认为应该使用当前的steve
矩形来创建Arrow
的新实例,而不是现有实例
例如:
def check_keydown_events(event,steve,arrow,arrows):
""" """
if event.key == pygame.K_t:
sys.exit()
--snip--
elif event.key==pygame.K_SPACE and len(arrows)<=4:
#arrows.append( [arrow.center, arrow.rect.bottom, arrow.rect.left] )
arrows.append( [steve.center, steve.rect.top, steve.rect.right] )
然后它更灵活:
if ( steve_facing_left ):
# facing left
x_start = steve.rect.x # start on Steve's left side
arrows.append( Arrow( left_arrow_image, x_start, steve.rect.centery, -1 ) )
else:
# facing right
x_start = steve.rect.x + steve.rect.width # start on Steve's right side
arrows.append( Arrow( right_arrow_image, x_start, steve.rect.centery, 1 ) )
随后:
arrows.append( Arrow( super_arrow_image, x_start, y_start, 3 ) )