Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我想用Pygame做一个游戏。但是我的箭可以';不要从正确的位置射击_Python_Pygame - Fatal编程技术网

Python 我想用Pygame做一个游戏。但是我的箭可以';不要从正确的位置射击

Python 我想用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

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_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 ) )