Python 外星人游戏速成班 - 用背景 .bmp 图像替换背景颜色
Python Crash Course Alien Game - Replace background colour with background .bmp image
我有一个来自 Python 速成课程书籍的外星人入侵游戏。但是,我正在应用修改。我正在尝试替换 bg_color
的值来表示存储在我的项目文件夹中的背景图像而不是颜色,即
self.bg_color = pygame.image.load('images/space.bmp')
目前,AlienInvasion class 从 class 调用的设置中导入背景颜色,该设置存储在名为 settings.py
的 sep 文件中
class Settings:
"""A class to store all settings for Alien Invasion."""
def __init__(self):
"""Initialize the game's static settings."""
# Screen settings
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230,230,230)
AlienInvasion 是主游戏class,它设置了游戏。
class AlienInvasion:
"""Overall class to manage game assets and behavior."""
def __init__(self):
"""Initialize the game, and create game resources."""
pygame.init()
"""create a settings object using the imported settings class"""
self.settings = Settings()
"""initialise the game display using the settings saved within the settings file"""
self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))
""" assign the imported ship attributes to a new ship instance - "Self" in the call references to a call of AlienInvasion as a class """
self.ship = Ship(self)
""" run the game in full screen mode """
pygame.display.set_caption("Alien Invasion")
# Set the background color.
self.bg_color = (230, 230, 230)
Update_screen 随着游戏的进行不断更新屏幕,并在游戏进行时处理背景颜色 运行
def _update_screen(self):
"""Update the images on the screen and flip to the new screen"""
# Redraw the screen during each pass through the loop. Use the settings file here
self.screen.fill(self.settings.bg_color)
我认为我的问题与仅应用于颜色值 (230、230、230) 的 .fill() 有关。但我基本上希望屏幕使用背景图像而不是静态颜色进行更新。有人可以帮忙吗?我应该使用另一个函数来代替 .fill() 吗?
使用:
self.screen.blit(your_image, (0, 0))
而不是:
self.screen.fill((0, 0, 0))
your_image应该是屏幕的大小,元组是位置
更改 Settings
中的背景:
class Settings:
def __init__(self):
# [...]
self.bg_color = pygame.image.load('images/space.bmp')
从AlienInvasion
的构造函数中的Settings
对象获取背景。如果背景图像与显示大小不同,我建议使用 pygame.transform.smoothscale()
将背景缩放到正确的大小:
class AlienInvasion:
"""Overall class to manage game assets and behavior."""
def __init__(self):
# [...]
self.settings = Settings()
# [...]
self.bg_color = pygame.transform.smoothscale(self.settings.bg_color,
self.screen.get_size())
blit
the background rather rather than fill
显示面:
class AlienInvasion:
# [...]
def _update_screen(self):
self.screen.blit(self.settings.bg_color, (0, 0))
blit
将一幅图像绘制到另一幅图像上。在这种情况下,它在与显示器关联的 Surface 上绘制背景图像 (Surface)。
请注意,名称 bg_color
具有误导性。如果您使用的是背景图片,您应该重命名它(例如 bg_image
或 bg_surface
)。
只有当你想用一些颜色填充背景时才使用 fill(),当你想更新屏幕时才使用 blit。 fill() 是一个很好的方法,但是当改变颜色时,而是使用 blit 来改变屏幕上的东西或更新它。
我有一个来自 Python 速成课程书籍的外星人入侵游戏。但是,我正在应用修改。我正在尝试替换 bg_color
的值来表示存储在我的项目文件夹中的背景图像而不是颜色,即
self.bg_color = pygame.image.load('images/space.bmp')
目前,AlienInvasion class 从 class 调用的设置中导入背景颜色,该设置存储在名为 settings.py
的 sep 文件中
class Settings:
"""A class to store all settings for Alien Invasion."""
def __init__(self):
"""Initialize the game's static settings."""
# Screen settings
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230,230,230)
AlienInvasion 是主游戏class,它设置了游戏。
class AlienInvasion:
"""Overall class to manage game assets and behavior."""
def __init__(self):
"""Initialize the game, and create game resources."""
pygame.init()
"""create a settings object using the imported settings class"""
self.settings = Settings()
"""initialise the game display using the settings saved within the settings file"""
self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))
""" assign the imported ship attributes to a new ship instance - "Self" in the call references to a call of AlienInvasion as a class """
self.ship = Ship(self)
""" run the game in full screen mode """
pygame.display.set_caption("Alien Invasion")
# Set the background color.
self.bg_color = (230, 230, 230)
Update_screen 随着游戏的进行不断更新屏幕,并在游戏进行时处理背景颜色 运行
def _update_screen(self):
"""Update the images on the screen and flip to the new screen"""
# Redraw the screen during each pass through the loop. Use the settings file here
self.screen.fill(self.settings.bg_color)
我认为我的问题与仅应用于颜色值 (230、230、230) 的 .fill() 有关。但我基本上希望屏幕使用背景图像而不是静态颜色进行更新。有人可以帮忙吗?我应该使用另一个函数来代替 .fill() 吗?
使用:
self.screen.blit(your_image, (0, 0))
而不是:
self.screen.fill((0, 0, 0))
your_image应该是屏幕的大小,元组是位置
更改 Settings
中的背景:
class Settings:
def __init__(self):
# [...]
self.bg_color = pygame.image.load('images/space.bmp')
从AlienInvasion
的构造函数中的Settings
对象获取背景。如果背景图像与显示大小不同,我建议使用 pygame.transform.smoothscale()
将背景缩放到正确的大小:
class AlienInvasion:
"""Overall class to manage game assets and behavior."""
def __init__(self):
# [...]
self.settings = Settings()
# [...]
self.bg_color = pygame.transform.smoothscale(self.settings.bg_color,
self.screen.get_size())
blit
the background rather rather than fill
显示面:
class AlienInvasion:
# [...]
def _update_screen(self):
self.screen.blit(self.settings.bg_color, (0, 0))
blit
将一幅图像绘制到另一幅图像上。在这种情况下,它在与显示器关联的 Surface 上绘制背景图像 (Surface)。
请注意,名称 bg_color
具有误导性。如果您使用的是背景图片,您应该重命名它(例如 bg_image
或 bg_surface
)。
只有当你想用一些颜色填充背景时才使用 fill(),当你想更新屏幕时才使用 blit。 fill() 是一个很好的方法,但是当改变颜色时,而是使用 blit 来改变屏幕上的东西或更新它。