python - Python中的无限滚动背景
问题描述
我正在尝试使用 python 的街机库为简单的“躲避传入对象”游戏创建无限滚动背景。我已经设法让背景移动,但我似乎无法创建另一个。我一直在看很多示例代码,我理解基本思想是我有一个列表,当 x = 0 时删除背景,然后在起始值处附加另一个。
我在执行时遇到了麻烦。:/
self.background_sprite = arcade.sprite.Sprite("resources/Background.png")
self.background_sprite.center_x = 600
self.background_sprite.center_y = 300
self.background_list.append(self.background_sprite)
for self.background_sprite in self.background_list:
self.background_sprite.change_x -= BACKGROUND_SPEED
def update_order(self):
self.background_update
self.player_update()
def on_draw(self):
""" Render the screen. """
arcade.start_render()
self.player_list.draw()
for self.background_sprite in self.background_list:
self.background_sprite.draw()
def background_update(self, delta_time):
for self.background_sprite in self.background_list:
x = self.background_sprite.center_x - BACKGROUND_SPEED
self.background_list.update()
if x == 0:
self.background_list.remove(self.background_sprite)
self.background_list.append(self.background_sprite)
repeat_count_x = 2
self.background_list.update()
解决方案
我想出了如何做到这一点,所以我会为以后用谷歌搜索它的任何人回答我自己的问题。
编辑:我想我已经尽可能地简化了代码。我还添加了方程式,所以你所要做的就是在顶部插入你的数字,在底部插入你的文件。它非常适合与窗口大小相同的背景。
import arcade
import os
# --- Constants ---
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 400
IMAGE_WIDTH = 800
SCROLL_SPEED = 5
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
file_path = os.path.dirname(os.path.abspath(__file__))
os.chdir(file_path)
def setup(self):
#first background image
self.background_list = arcade.SpriteList()
self.background_sprite = arcade.Sprite("image.file")
self.background_sprite.center_x = IMAGE_WIDTH // 2
self.background_sprite.center_y = SCREEN_HEIGHT // 2
self.background_sprite.change_x = -SCROLL_SPEED
self.background_list.append(self.background_sprite)
#second background image
self.background_sprite_2 = arcade.Sprite("image.file")
self.background_sprite_2.center_x = SCREEN_WIDTH + IMAGE_WIDTH // 2
self.background_sprite_2.center_y = SCREEN_HEIGHT // 2
self.background_sprite_2.change_x = -SCROLL_SPEED
self.background_list.append(self.background_sprite_2)
def on_draw(self):
arcade.start_render()
self.background_list.draw()
def update(self, delta_time):
#reset the images when they go past the screen
if self.background_sprite.left == -IMAGE_WIDTH:
self.background_sprite.center_x = SCREEN_WIDTH + IMAGE_WIDTH // 2
if self.background_sprite_2.left == -IMAGE_WIDTH:
self.background_sprite_2.center_x = SCREEN_WIDTH + IMAGE_WIDTH // 2
self.background_list.update()
def main():
window = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
window.setup()
arcade.run()
if __name__ == "__main__":
main()
推荐阅读
- c# - 如何在 Bing 地图上设置缩放级别?
- css - 翻转卡无法正常工作[可以选择另一侧的文本]
- javascript - 单次触发点击事件监听器
- terminal - 使用 MacPorts 安装 atom,但未显示在 Launchpad 或 Applications 文件夹中
- python-3.x - 熊猫:按两列分组并返回字符串列的差异
- unity3d - 如何使用脚本 Unity3D 旋转相机 *已回答* 2021 年 2 月 17 日
- javascript - CSS:幻灯片之间的 css 过渡,类似于示例
- flutter - 使用 simple_auth 包进行 Flutter Web Keyclock 登录
- winapi - 使用 Win32 API 的 XZip 库创建 zip 文件
- java - java.lang.RuntimeException:无法实例化活动 ComponentInfo - 不搜索活动