pygletでline描画

ここまでで、だいぶゲームを作れそうな要素が揃ってきた感じがします。いったんテキスト描画は置いておいて、今度は描画の種類を増やしてみましょう。

テクスチャを用意してスプライトを書く流れが定番ですが、プログラマが何が大変って絵を用意することですね…。フリー素材を引っ張ってくる手もありますけれど。

ここはワイヤーフレームでしょう!

幸い、pyglet にはいろいろな shape が用意されていて簡単に描画できそうです。

pyglet.shapes — pyglet v2.0.15

早速やってみます。でも、あんまり複雑な形を手で打つのはちょっと…。シューティングゲームで使う「自機」のつもりで菱形を描くことにしました。少し小さいかな?

import pyglet
from pyglet import shapes

title = "Pyglet Shooting Game"

WINDOW_WIDTH = 640
WINDOW_HEIGHT = 480
window = pyglet.window.Window(WINDOW_WIDTH, WINDOW_HEIGHT, title)
batch = pyglet.graphics.Batch()

@window.event
def on_draw():
    window.clear()
    batch.draw()

# プレイヤー
class Player():
    def __init__(self, x, y, color):
        # プレイヤーの形
        self.lines = (
            ((0, 8), (4, 0)),
            ((4, 0), (0, -8)),
            ((0, -8), (-4, 0)),
            ((-4, 0), (0, 8))
        )

        # プレイヤーの中心位置と色
        self.x = x
        self.y = y
        self.color = color

        # プレイヤーのshapes.Lineを作成して記録
        self.line_shapes = []
        self.create_line_shapes(self.line_shapes, self.lines, self.color)

    def create_line_shapes(self, line_shapes, lines, color):
        for line in lines:
            x1 = self.x + line[0][0]
            y1 = self.y + line[0][1]
            x2 = self.x + line[1][0]
            y2 = self.y + line[1][1]
            line_shapes.append(shapes.Line(x1, y1, x2, y2, width=2, color=color, batch=batch))

def create_player():
    global player
    player = Player(WINDOW_WIDTH // 2, WINDOW_HEIGHT // 3, (0, 230, 0))

if __name__ == '__main__':
    create_player()
    pyglet.app.run()

タイトルとURLをコピーしました