我目前正在使用pygame创建我的第一个Python游戏,现在遇到了令我感到困惑的东西,所以我将非常感谢你的帮助。
在目前的游戏状态中,屏幕上显示的是太空船在白色背景上的图像(gameDisplay.fill(白色)),只能上下移动,位于左侧的屏幕。当点击空格键时,太空船会射出两束激光束(或者基本上会产生两个从左到右移动的薄片,改变x位置但保持y位置,使得移动只是水平)。
我遇到的问题是,不是从左向右移动,而是看起来像是激光器。向右伸展,使得矩形的左侧靠近屏幕左侧的太空船图像,而右侧的右侧移动到屏幕的右侧。
如下图所示:
在解决了这个问题之后,我发现如果我使用图像作为背景而不是用白色填充背景,那么一切都可以正常工作。
在下面的图片中,您可以看到当我使用纯白色图片作为背景图片时的外观(使用bg = pygame.image.load(" img \ white_background.png"然后blitting它)在所有其他图纸之前的游戏循环中):
我目前有4个组成游戏的文件:
import time
import pygame
from first_game.game_loop import game_loop
from first_game.space_ship import space_ship
pygame.init()
display_width = 800
display_height = 600
colors = {
'black':(0, 0, 0),
'white':(255, 255, 255),
'red':(255, 0, 0)
}
gameDisplay = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('First game')
clock = pygame.time.Clock()
gameDisplay.fill(colors['white'])
player = space_ship("img\\space_ship.png","player",103,103)
game_loop(gameDisplay,display_width,display_height,clock, player, bg)
import pygame
import first_game.methods
def game_loop(gameDisplay, display_width, display_height, clock, space_ship, bg):
space_ship_x = (display_width * 0.05)
space_ship_y = (display_height * 0.45)
space_ship_y_change = 0
both_laser_x = 0
top_laser_y = 0
bottom_laser_y = 0
both_laser_width = 50
both_laser_height = 5
laser_speed = 15
laser_adjustment_x = 70
laser_adjustment_y = 18
laser_fired = False
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
space_ship_y_change = -5
if event.key == pygame.K_DOWN:
space_ship_y_change = 5
if event.key == pygame.K_SPACE:
top_laser_y = space_ship_y + laser_adjustment_y
bottom_laser_y = space_ship_y + space_ship.height - laser_adjustment_y
both_laser_x = space_ship_x + space_ship.width - laser_adjustment_x
laser_fired = True
if event.type == pygame.KEYUP:
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
space_ship_y_change = 0
if both_laser_x>display_width:
laser_fired=False
first_game.methods.space_ship(space_ship.img_location, space_ship_x, space_ship_y, gameDisplay)
if laser_fired == True:
first_game.methods.laser(gameDisplay,both_laser_x, top_laser_y,bottom_laser_y,both_laser_width,both_laser_height)
both_laser_x += laser_speed
if space_ship_y == -20:
if space_ship_y_change<0:
space_ship_y_change=0
if space_ship_y+space_ship.height>=display_height+20:
if space_ship_y_change>0:
space_ship_y_change=0
space_ship_y = space_ship_y + space_ship_y_change
pygame.display.update()
clock.tick(60)
def space_ship(space_ship_location, x, y, gameDisplay):
space_ship_img = pygame.image.load(space_ship_location)
gameDisplay.blit(space_ship_img, (x, y))
def laser(gameDisplay,x,y1,y2,w,h):
pygame.draw.rect(gameDisplay, (255,0,0), [x, y1, w, h])
pygame.draw.rect(gameDisplay, (255,0,0), [x, y2, w, h])
class space_ship():
def __init__(self,img_location, type, width, height):
self.img_location = img_location
self.type = type
self.width = width
self.height = height