📜  PYGLET——形状位置(1)

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

Pyglet——形状位置

Pyglet是一个Python的跨平台多媒体库,其中包含了处理音频、视频、图像以及OpenGL 3D运行库的功能。Pyglet中的gl模块提供了OpenGL 2D/3D渲染的接口和图形管理工具。在本文中,我们将重点介绍Pyglet中如何操作和调整2D形状的位置和大小。

1. 创建一个显示窗口

在开始操作之前,需要先创建一个游戏窗口。下面是一个简单的创建游戏窗口的示例程序。

import pyglet

win = pyglet.window.Window(width=640, height=480)
pyglet.app.run()

在这个程序中,我们首先导入pyglet模块,然后创建一个大小为640x480的win窗口,并调用pyglet.app.run()函数使窗口继续运行。

2. 绘制形状

在创建了一个窗口之后,我们可以在窗口中绘制不同的形状,比如矩形、圆形等等。下面是一个简单的绘制矩形的示例程序。

import pyglet

win = pyglet.window.Window(width=640, height=480)

@win.event
def on_draw():
    pyglet.graphics.draw(4, pyglet.gl.GL_QUADS,
        ('v2i', (100, 100, 150, 100, 150, 150, 100, 150)),
        ('c3B', (255, 0, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0))
    )

pyglet.app.run()

在这个程序中,我们通过pyglet.graphics.draw()函数在窗口中绘制了一个矩形,矩形的四个顶点分别为(100, 100)(150, 100)(150, 150)(100, 150),并分别填充了红色的颜色。

3. 移动形状

在绘制形状之后,我们可以通过操作形状的位置来实现移动。在Pyglet中,可以使用pyglet.graphics.vertex_list()函数和pyglet.graphics.draw()函数来操作形状的位置。下面是一个简单的移动矩形的示例程序。

import pyglet

win = pyglet.window.Window(width=640, height=480)

vertices = ('v2i', (100, 100, 150, 100, 150, 150, 100, 150))
colors = ('c3B', (255, 0, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0))

batch = pyglet.graphics.Batch()
rect = batch.add(4, pyglet.gl.GL_QUADS, None, colors)
rect.vertices = vertices

@win.event
def on_draw():
    batch.draw()

def update(dt):
    rect.vertices = (rect.vertices[0] + 1, rect.vertices[1] + 1,
                    rect.vertices[2] + 1, rect.vertices[3] + 1,
                    rect.vertices[4] + 1, rect.vertices[5] + 1,
                    rect.vertices[6] + 1, rect.vertices[7] + 1)

pyglet.clock.schedule_interval(update, 1/120.0)
pyglet.app.run()

在这个程序中,我们使用pyglet.graphics.Batch()函数和batch.add()函数创建了一个矩形,并将矩形的顶点坐标和颜色分别存储在verticescolors中。然后我们将矩形添加到了batch中,并通过batch.draw()函数在窗口中绘制了矩形。

在绘制矩形之后,我们可以通过update()函数每秒钟将矩形的顶点坐标向右移动1个像素,并不断重绘来实现矩形的移动效果。

4. 改变形状大小

在Pyglet中,可以通过调整形状的顶点坐标来改变形状的大小。下面是一个简单的改变矩形大小的示例程序。

import pyglet

win = pyglet.window.Window(width=640, height=480)

vertices = ('v2i', (100, 100, 150, 100, 150, 150, 100, 150))
colors = ('c3B', (255, 0, 0, 255, 0, 0, 0, 255, 0, 0, 255, 0))

batch = pyglet.graphics.Batch()
rect = batch.add(4, pyglet.gl.GL_QUADS, None, colors)
rect.vertices = vertices

@win.event
def on_draw():
    batch.draw()

def update(dt):
    rect.vertices = (rect.vertices[0], rect.vertices[1],
                    rect.vertices[2] + 1, rect.vertices[3],
                    rect.vertices[4] + 1, rect.vertices[5] + 1,
                    rect.vertices[6], rect.vertices[7] + 1)

pyglet.clock.schedule_interval(update, 1/120.0)
pyglet.app.run()

在这个程序中,我们使用了与之前相同的方法创建了矩形,并将矩形的顶点坐标存储在vertices中。在每次更新中,我们将矩形的右侧和下侧顶点向外扩展1个像素,以实现矩形大小的改变效果。

以上就是Pyglet中操作和调整2D形状位置和大小的简单示例。通过操作和调整形状的位置和大小,我们可以轻松地实现丰富的图像效果。