📜  PYGLET – 形状 X、Y 坐标(1)

📅  最后修改于: 2023-12-03 15:33:50.335000             🧑  作者: Mango

PYGLET – 形状 X、Y 坐标

Pyglet是一个Python库,专门用于在窗口中进行游戏和多媒体应用程序的开发。它支持OpenGL,可以在多个平台上使用,并且易于使用。

对于游戏或多媒体应用程序,在屏幕上放置、移动和管理图像和形状是一项基本操作。为此,我们需要知道如何设置和更新图像或形状的位置。Pyglet 允许我们通过矩形坐标系来设置 X 和 Y 坐标。

设置形状 X、Y 坐标
  • Pyglet 窗口默认的坐标系为左下角为原点 (0,0),右上角为 (width, height)

  • 可以使用 batch 实例化一个或多个形状图像,然后将其添加到 GroupOrderedGroup 中。这既可以减少大量形状图像的性能影响,又可以管理各种形状对象 :

    import pyglet
    
    window = pyglet.window.Window(width=400, height=400)
    batch = pyglet.graphics.Batch()
    
    @window.event
    def on_draw():
        pyglet.gl.glClearColor(1, 1, 1, 1)  # 黑色背景
        window.clear()
    
        image = pyglet.image.load('bird.png')  # 加载图像
        x, y = 50, 50
        sprite = pyglet.sprite.Sprite(image, x, y, batch=batch)  # 创建精灵
        sprite.draw() # 绘制精灵
    
        circle = pyglet.shapes.Circle(x=200, y=200, radius=50, color=(255,0,0), batch=batch) #创建圆形
        circle.draw() # 绘制圆形
    
    pyglet.app.run()
    

    在这个例子中,我们创建了一个 batch,并将 bird.png 图像加载成了一个 Sprite 对象并添加到 batch 容器中,并将其在 (x, y) = (50, 50) 的位置显示。同时,在 (x, y) = (200, 200) 的位置画一个直径为 100 的红圆。

  • 精灵的 X 和 Y 坐标决定了它显示的位置。我们可以对视图中显示的形状进行位置和大小调整,而不改变原始图像的属性。

  • 也可以直接创建一个形状对象来绘制,例如:RectagleCircleEllipseLineTriangle等。

    import pyglet
    
    window = pyglet.window.Window(width=400, height=400)
    
    @window.event
    def on_draw():
        pyglet.gl.glClearColor(1, 1, 1, 1)  # 黑色背景
        window.clear()
    
        rectangle = pyglet.shapes.Rectangle(x=50, y=50, width=100, height=100, color=(0,255,0)) #创建矩形
        rectangle.draw() # 绘制矩形
    
        circle = pyglet.shapes.Circle(x=200, y=200, radius=50, color=(255,0,0)) #创建圆形
        circle.draw() # 绘制圆形
    
    pyglet.app.run()
    

其中,我们绘制了一个矩形,坐标为 (x, y) = (50, 50),大小为 (w, h) = (100, 100)。同时,我们绘制了一个圆形,坐标为 (x, y) = (200, 200),半径为 50

这些形状对象也可以用 batch 同时显示。

Pyglet 提供了丰富的形状对象以及丰富的位置和坐标管理方式。开发者可以根据自己的需求选择合适的工具来进行开发。同时,还可以进一步了解 GroupOrderedGroup 的用法。

总结

本文介绍了 Pyglet 中如何设置形状对象的 X、Y 坐标,以及如何使用 batch 容器来同时显示多个形状对象。Pyglet 提供了丰富的形状对象,还可以使用 GroupOrderedGroup 进一步扩展功能。