为什么我的子弹没有跟随我的玩家



所以我有一个问题,我正在制作射击游戏,但当我制作投射物时,子弹不会跟随玩家。顺便说一句,我在python中这样做。这是main.py:

import pygame
from player import *
pygame.init()
WIDTH, HEIGHT = 900, 600
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Shooter Game")
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLACK = (0, 0, 0)
player_x = 500
player_y = 440
PLAYER_WIDTH = PLAYER_HEIGHT = 60
PLAYER_VEL = 5
BULLET_VEL = 10
keys_pressed = pygame.key.get_pressed()
player_rect = pygame.Rect(player_x, player_y, PLAYER_WIDTH, PLAYER_HEIGHT)
player = Player(WIN, RED, player_rect, keys_pressed, PLAYER_VEL)
def draw(bullets):
WIN.fill(WHITE)
for bullet in bullets:
pygame.draw.rect(WIN, BLACK, bullet)
def handle_bullets(bullets):
for bullet in bullets:
bullet.y -= BULLET_VEL
if bullet.y > HEIGHT:
bullets.remove(bullet)
FPS = 60
clock = pygame.time.Clock()
def main():
run = True
bullets = []

while run:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LALT:
bullet = pygame.Rect(player_x + PLAYER_WIDTH//2, player_y, 5, 10)
bullets.append(bullet)
print(bullets)
draw(bullets)
player.draw_player()
player.move()
handle_bullets(bullets)
pygame.display.update()
pygame.quit()
if __name__ == "__main__":
main()

main.py是我遇到问题的脚本。因为你看我有颗子弹当子弹产生时,它在玩家的y和x处,但它不跟随玩家。就像你第一次投篮时不动一样,它会在正确的地方投篮。但一旦你移动,子弹就会停留在第一个位置。这是我的player.py脚本:

import pygame
class Player(object):
def __init__(self, surface, color, player, keys_pressed, vel):
self.surface = surface
self.color = color
self.player = player
self.keys_pressed = keys_pressed
self.vel = vel
def draw_player(self):
pygame.draw.rect(self.surface, self.color, self.player)
def move(self):
self.keys_pressed = pygame.key.get_pressed()
if self.keys_pressed[pygame.K_w] and self.player.y > self.vel:
self.player.y -= self.vel
if self.keys_pressed[pygame.K_s] and self.player.y < 600 - self.player.height:
self.player.y += self.vel
if self.keys_pressed[pygame.K_a] and self.player.x > self.vel:
self.player.x -= self.vel
if self.keys_pressed[pygame.K_d] and self.player.x < 900 - self.player.width:
self.player.x += self.vel 

您使用玩家起始坐标的硬编码值。ALT键操作下的变更行:

bullet = pygame.Rect(player.player.x + PLAYER_WIDTH // 2, player.player.y, 5, 10)

项目符号来自同一位置的原因是player_xplayer_y变量从未更新。

当你拔出子弹时,你会使用它们,这一切都很好

bullet = pygame.Rect(player_x + PLAYER_WIDTH//2, player_y, 5, 10)

但你永远不会更新玩家的位置。

我认为你的意思是在你的def move(self):方法中包括以下几行:

def move(self):
self.keys_pressed = pygame.key.get_pressed()
if self.keys_pressed[pygame.K_w] and self.player.y > self.vel:
self.player.y -= self.vel
if self.keys_pressed[pygame.K_s] and self.player.y < 600 - self.player.height:
self.player.y += self.vel
if self.keys_pressed[pygame.K_a] and self.player.x > self.vel:
self.player.x -= self.vel
if self.keys_pressed[pygame.K_d] and self.player.x < 900 - self.player.width:
self.player.x += self.vel
#Update the player's position
player_x = self.player.x
player_y = self.player.y

或者使用玩家的属性,比如:

bullet = pygame.Rect(player.player.x + PLAYER_WIDTH // 2, player.player.y, 5, 10)

最新更新