はじめに
ゲーム画面というのは、突き詰めれば「四角形(地形)」や「画像(キャラ)」の集まりです。 つまり、「好きな場所に、好きな色で、好きな図形を描く」ことができれば、画面作りは8割完了したも同然です。今回は、PySide6の描画職人である「QPainter」を使って、ウィンドウに絵を描いてみましょう。
§1. 座標系を知ろう:Y軸は「下」へ
コードを書く前に、ゲームの世界の「地図(座標)」を理解する必要があります。 学校の数学とは少し違います。
(0, 0) 原点: ウィンドウの「左上」です。
X軸: 右に行くと増えます(数学と同じ)。
Y軸: 「下」に行くと増えます(数学と逆!)。
「Yが増える=下に落ちる」とイメージしてください。
§2. 描画のルール:「paintEvent」
ここが少し難しいポイントです。 PySide6では、「描きたいときに勝手に描く」ことはできません。 「OSから『画面を更新していいよ』と言われたタイミング」でのみ描画が許されています。
そのタイミングで自動的に呼ばれる関数(イベント)が、paintEvent です。
私たちは、この paintEvent の中身を書き換える(オーバーライドする)ことで、絵を描きます。
§3. 実践!赤と青の図形を描く
では、実際にコードを書いてみましょう。 今回は「ただのウィンドウ(QWidget)」ではなく、「お絵かき機能付きのウィンドウ(MyGameWindow)」という自作クラスを作ります。
pythonコード
はじまり---------------------------------------------
import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtGui import QPainter, QColor, QPen, QBrush
from PySide6.QtCore import Qt
# 1. QWidgetを改造して、自分だけのウィンドウクラスを作る
class MyGameWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("お絵かきテスト")
self.resize(400, 300)
# 2. 画面描画のタイミングで自動的に呼ばれる関数
def paintEvent(self, event):
# 画家(Painter)を呼ぶ
painter = QPainter(self)
# --- ここからお絵かきタイム ---
# ■ 四角形を描く(枠線:黒、中身:赤)
painter.setPen(QPen(Qt.black, 3)) # ペン(枠線)の設定:黒色、太さ3px
painter.setBrush(QBrush(Qt.red)) # ブラシ(塗りつぶし)の設定:赤色
painter.drawRect(50, 50, 100, 100) # (x=50, y=50)に、幅100, 高さ100の四角を描く
# ● 円を描く(枠線:なし、中身:青)
painter.setPen(Qt.NoPen) # ペンなし(枠線を描かない)
painter.setBrush(QBrush(Qt.blue)) # 青色で塗りつぶす
painter.drawEllipse(200, 50, 100, 100) # (x=200, y=50)に、幅100, 高さ100の円を描く
# --- ここからメイン処理 ---
app = QApplication(sys.argv)
window = MyGameWindow() # 自作したクラスを使う
window.show()
sys.exit(app.exec())
おわり---------------------------------------------
ウィンドウに図形が出現!!
なお、ウィンドウはまだ動かない...
§4.コードの解説
なお、ウィンドウはまだ動かない...
重要なのは paintEvent の中身です。
painter = QPainter(self)
「私(このウィンドウ)に絵を描くための筆をください」という宣言です。
painter.setPen(...)
「枠線」の色や太さを決めます。
Qt.NoPenにすると枠線が消えます。
painter.setBrush(...)
「中身(塗りつぶし)」の色を決めます。
painter.drawRect(x, y, w, h)
指定した座標とサイズで四角形(Rectangle)を描きます。
painter.drawEllipse(x, y, w, h)
指定した四角形の中に収まるような楕円(Ellipse)を描きます。正方形なら円になります。
次回予告
静止画を描くことはできました。 しかし、ゲームは「動いて」ナンボです。 次回は、この描いた四角形をアニメーションさせてみましょう。
0 件のコメント:
コメントを投稿