python - 在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()
解决方案
推荐阅读
- gradle - Gradle 多模块 intellij 设置
- angular - 测试服务时如何模拟服务依赖关系?
- laravel - Laravel nova 使用 belongsTo 保存资源字段
- c# - 如何在正在运行的 Forms 应用程序中动态更改 WebBrowser 对象?
- errorprone - 如何从容易出错的情况中排除一个以上的路径?
- python - 如何从 Humminbird ChartSelect .bin 文件中获取数据
- java - 如何设置 JdbcUserDetailsManager 以使用我的表?
- r - 如何对数据框列表中的每个数据框进行分组和汇总
- amazon-web-services - Terraform - 如何为 AWS Lambda 创建 IAM 角色并部署两者?
- javascript - Tone.js - AudioContext 不允许启动