问题描述
我同时在主游戏和测试文件中编写代码。但是,这一直是我移动球员时遇到的问题。我设置了标志来告诉我何时按下键,而pygame在我大多数的按键或释放键上都没有动作。有时会发生,并且我的播放器在屏幕上漂移。我在测试文件中重新编写了代码,并且效果很好!我继续以完全正确的格式将代码复制并粘贴回主游戏中,没有。同样的问题。为什么代码本身可以完美完成,而在主游戏中却不能做到?另外,为什么将播放器添加到Sprite组后仍未定义播放器。
import pygame,sys
from random import randint
pygame.init()
clock = pygame.time.Clock()
#note to self. snek_sprite is the player sprite for the game.
#birb_sprite is the purple boss sprite.
#Declare Variables Here
player_speed = 5
blue_speed = 6
red_speed = 7
purple_speed = 4
yellow_bullet_speed = 7
red_bullet_speed = 8
player_shoot_speed = 5 #shoot speed is shots per second
red_shoot_speed = 4
purple_shoot_speed = 1
yellow_shoot_speed = 10 #Yellow is high,but some will fail. Either 1/2 or 1/3 chance of firing... I'll fine tune it
level = 0
enemies = 0
screen_height = 700
screen_width = 1280
green = (0,255,0)
red = (255,0)
yellow_enemies = pygame.sprite.Group()
player_sprites = pygame.sprite.Group()
red_enemies = []
blue_enemies = []
all_sprites = pygame.sprite.Group()
enemy_bullets = pygame.sprite.Group()
player_rect = pygame.Rect((screen_width//2 - 16,screen_height//2 - 16),(32,32))
enemy_one = pygame.Rect((25,25),32))
enemy_two = pygame.Rect((screen_width//2 - 16,32))
mount = pygame.Rect((0,0),32))
#Lets load in sprites
player_sprite = pygame.image.load("snek_sprite.PNG")
yellow_sprite = pygame.image.load("yellow_sprite.PNG")
purple_sprite = pygame.image.load("purple_sprite.PNG")
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((32,32))
self.image.blit(player_sprite,mount)
self.rect = player_rect
self.x = self.rect.x
self.y = self.rect.y
self.x_speed = 0
self.y_speed = 0
all_sprites.add(self)
player_sprites.add(self)
def get_speed(self):
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.y_speed = -3
print("up")
elif event.key == pygame.K_DOWN:
self.y_speed = 3
print("down")
if event.key == pygame.K_RIGHT:
self.x_speed = 3
print("right")
if event.key == pygame.K_LEFT:
self.x_speed = -3
print("left")
elif event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
self.y_speed = 0
if event.key == pygame.K_UP:
print("Up Up")
else:
print("Down Up")
if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
self.x_speed = 0
def movement(self):
self.x = self.x + self.x_speed
self.y = self.y + self.y_speed
self.rect = pygame.Rect((self.x,self.y),32))
if self.x < 0:
self.x = 0
elif self.x > 1280 - 32:
self.x = 1280 - 32
if self.y < 0:
self.y = 0
elif self.y > 700 - 32:
self.y = 700 - 32
class Yellow_Enemy(pygame.sprite.Sprite):
def __init__(self,rect):
global enemies
super().__init__()
self.image = pygame.Surface((32,32))
self.image.blit(yellow_sprite,mount)
self.rect = rect
self.x = rect.x
self.y = rect.y
enemies = enemies + 1
all_sprites.add(self)
yellow_enemies.add(self)
def shoot(self):
bullet = Bullet(self)
all_sprites.add(bullet)
enemy_bullets.add(bullet)
for bullet in enemy_bullets:
bullet.movement()
def update(self):
screen.blit(yellow_surface,self.rect)
class Bullet(pygame.sprite.Sprite):
def __init__(self,enemy):
super().__init__()
self.image = pygame.Surface((4,4))
self.image.fill(red)
self.x = enemy.x + 16
self.y = enemy.y + 16
self.x_speed = 3
self.y_speed = 3
self.rect = ((self.x,(4,4))
self.x_direction = randint(-1,1)
self.y_direction = randint(-1,1)
self.x_speed = self.x_speed * self.x_direction
self.y_speed = self.y_speed * self.y_direction
def movement(self):
self.x = self.x + self.x_speed
self.y = self.y + self.y_speed
self.rect = ((self.x,4))
if self.x > 1280 or self.x < 0 or self.y > 700 or self.y < 0:
self.kill()
#Creates the screen
screen = pygame.display.set_mode((screen_width,screen_height))
pygame.display.set_caption("Bullet Hell Game")
def red_movement():
pass
def blue_movement():
pass
def purple_movement():
pass
def is_quit():
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
def is_clear():
global level
if enemies == 0:
level = level + 1
if level == 1:
start_level_one()
elif level == 2:
start_level_two()
elif level == 3:
start_level_three()
elif level == 4:
start_level_four()
elif level == 5:
start_level_five()
elif level == 6:
game_win()
def start_level_one():
global yellow_enemies,player
yellow_guys = 2
yellow_spawns = [enemy_one,enemy_two]
screen.fill(green)
for enemy in range(yellow_guys):
yellow_guy = Yellow_Enemy(yellow_spawns[enemy])
player = Player() #I have to redifine the player here for player movement to work. Is that where the issue might be?
while True:
is_quit()
screen.fill(green)
for event in pygame.event.get():
player.get_speed()
player.movement()
for enemy in yellow_enemies:
enemy.shoot()
all_sprites.draw(screen)
red_movement()
blue_movement()
purple_movement()
is_clear()
pygame.display.flip()
clock.tick(30)
我知道有很多代码,我表示歉意,但据我所知应该没有任何错误,所以我猜是否有错误可能在任何地方。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)