问题代码
from .. components import info,player
import pygame
from .. import constants as C
from .. import setup,tools
import pygame
class Level1:
def __init__(self):
self.finished = False
self.next = None
self.info = info.Info('level1')
self.setup_background()
self.setup_player()
def setup_background(self):
self.background = setup.GRAPHICS['level_1']
rect = self.background.get_rect()
self.background_rect = rect
self.background = pygame.transform.scale(self.background,(int(self.background_rect.width*C.BG_MULTI),
int(self.background_rect.height*C.BG_MULTI)))
self.game_window = setup.SCREEN.get_rect()
self.game_ground = pygame.Surface((self.background_rect.width,self.background_rect.height))
def setup_player(self):
self.player = player.Player('mario')
self.player.rect.x = 300
self.player.rect.y = 490
def update(self,surface,keys):
self.player.update(keys)
self.update_player_position()
self.update_game_window()
self.draw(surface)
def update_player_position(self):
self.player.rect.x += self.player.x_vel
self.player.rect.y += self.player.y_vel
def update_game_window(self):
third = self.game_window.x + self.game_window.width / 3
if self.player.x_vel > 0 and self.player.rect.centerx > third:
self.game_window.x += self.player.x_vel
def draw(self,surface):
self.game_ground.blit(self.background,self.game_window,self.game_window)
self.game_ground.blit(self.player.image,self.player.rect)
surface.blit(self.game_ground, (0, 0), self.game_window)
self.info.draw(surface)
from source import tools
from source.states import main_menu,load_screen,level
def main():
state_dirc = {
'main_menu':main_menu.MainMenu(),
'load_screen':load_screen.LoadScreen(),
'level1':level.Level1()
}
game = tools.Game(state_dirc,'main_menu')
game.Run()
if __name__ == "__main__":
main()
运行结果
我想要达到的结果*
检查图像绘制的顺序是否正确,后绘制的图像会遮盖先绘制的。
补充一下 这是tools.py
python
import pygame
import sys
import os
class Game:
def __init__(self,state_dirc,start_state):
self.screen = pygame.display.get_surface()
self.clock = pygame.time.Clock()
self.keys = pygame.key.get_pressed()
self.state_dirc = state_dirc
self.state = self.state_dirc[start_state]
def update(self):
if self.state.finished:
next_state = self.state.next
self.state.finished = False
self.state = self.state_dirc[next_state]
self.state.update(self.screen,self.keys)
def Run(self):
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
self.keys = pygame.key.get_pressed()
elif event.type == pygame.KEYUP:
self.keys = pygame.key.get_pressed()
self.update()
self.clock.tick(160)
pygame.display.update()
def load_graphics(path,accept = ('.jpg','.png','.bmp','gif')):
graphics = {}
for pic in os.listdir(path):
name,ext = os.path.splitext(pic)
if ext in accept:
img = pygame.image.load(os.path.join(path,pic))
if img.get_alpha():
img.convert_alpha()
else:
img.convert()
graphics[name] = img
return graphics
def get_image(sheet, x, y, width, height, colorkey, scale):
image = pygame.Surface([width, height])
image.blit(sheet, (0, 0), (x, y, width, height))
image.set_colorkey(colorkey)
image = pygame.transform.scale(image,(int(width*scale), int(height*scale)))