首页 > 解决方案 > 在pyglet中滚动背景图像

问题描述

我是 pyglet 的新手。我想拥有一个无缝滚动的背景。我已经尝试了我在堆栈和谷歌上能找到的一切。我关闭了垂直同步,因为它提高了我电脑的性能。我什至使用批处理在我的屏幕上绘图。使用 preload 函数加载我的图像,并在我的 Game 类中将其转换为 sprite。我还能做些什么来使我的背景滚动顺畅?提前致谢。

这是我的代码:

import pyglet
from pyglet.gl import *

glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_LINE_SMOOTH)
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE)

pyglet.clock.set_fps_limit(60)

WIDTH = 800
HEIGHT = 600
TITLE = 'Bunny'

def preload_image(img):
    pyglet.resource.path = ['../res']
    pyglet.resource.reindex()
    image = pyglet.resource.image(img)
    return image    

class main(pyglet.window.Window):
    def __init__(self):
        super(main, self).__init__(800, 600, fullscreen=False, vsync=False)
        self.x, self.y = 0, 0
        self.sprites = {}
        self.batches = {}
        self.subgroups = {}

        self._handles = {}

        self.batches['main'] = pyglet.graphics.Batch()
        self.subgroups['base'] = pyglet.graphics.OrderedGroup(0)

        self.background = preload_image('mountains.png')
        self.background.width = WIDTH
        self.background.height = HEIGHT
        self.background_sprite = pyglet.sprite.Sprite(self.background, 0, 0, batch=self.batches['main'])
        self.background_sprite1 = pyglet.sprite.Sprite(self.background, WIDTH, 0, batch=self.batches['main'])
        self.speed = 30
        self.frame_rate = 60.0
        pyglet.clock.schedule_interval(self.run, 1.0 / self.frame_rate)
        pyglet.clock.set_fps_limit(self.frame_rate)

        self.alive = 1

    def on_draw(self):
        self.render()

    def on_close(self):
        self.alive = 0

    def render(self):
        self.clear()

        for batch_name, batch in self.batches.items():
            batch.draw()

        for sprite_name, sprite in self.sprites.items():
            sprite._draw()

        self.flip() 

    def run(self):
        while self.alive == 1:
            self.render()
            dt = 1/pyglet.clock.get_fps_limit()
            print(1/dt)
            self.background_sprite.x -= self.speed * dt
            self.background_sprite1.x -= self.speed * dt
            if self.background_sprite1.x < -WIDTH: self.background_sprite1.x = WIDTH
            if self.background_sprite.x < -WIDTH: self.background_sprite.x = WIDTH

            event = self.dispatch_events()


x = main()
x.run()

正如您在图像中看到的,两个背景滚动图像之间有一条小黑线

标签: pythongame-developmentpyglet

解决方案


推荐阅读