Pygameのテキスト入力

授業でPygameを触り、グループワーク時にタイピングゲームを作ったので、その時に面倒だったテキスト入力の備忘録。 Pygame 1.9.5(SDL2.0.0)以降のテキスト入力 Pygame1.9.5以降、新たなイベントが加わり、テキスト入力が比較的楽になったようです(多分)。とはいえ、Pygameの日本語のドキュメントにそれがまだ載ってない上に、公式のテキスト入力のサンプル(この記事の執筆時の最新コミット)も分かりづらかったので、改めて書くことにしました。テキスト入力系で追加されたのは、TEXTINPUTとTEXTEDITINGの2つです。TEXTINPUTは直接入力モード時に受け取るイベント、TEXTEDITINGがIMEを使っている時に受け取るイベントらしいです。また、SDLのバグの関係で、IMEの予測変換は使えないので今回はそれを扱っていません。 プログラム ライブラリ化したものを上げておきました。ご活用ください。 以下がテキストの処理をするロジック(text.py) from typing import List class Text: """ PygameのINPUT、EDITINGイベントで使うクラス カーソル操作や文字列処理に使う """ def __init__(self) -> None: self.text = ["|"] # 入力されたテキストを格納していく変数 self.editing: List[str] = [] # 全角の文字編集中(変換前)の文字を格納するための変数 self.is_editing = False # 編集中文字列の有無(全角入力時に使用) self.cursor_pos = 0 # 文字入力のカーソル(パイプ|)の位置 def __str__(self) -> str: """self.textリストを文字列にして返す""" return "".join(self.text) def edit(self, text: str, editing_cursor_pos: int) -> str: """ edit(編集中)であるときに呼ばれるメソッド 全角かつ漢字変換前の確定していないときに呼ばれる """ if text: # テキストがあるなら self....

January 30, 2021 · Eisuke Okazaki