0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pygameをいじっていて、早めに理解したかったこと

Posted at

chat GPTとかの回答をそのまま貼り付けることがあります。
作りながら気づいたことを随時追加していきます。
認識違いや追記などございましたら、ご指摘いただけると嬉しいです。

surfaceとdisplay surfaceの違い

pygameにおいて、'surface'と 'display surface'は異なるものですか?

はい、Pygameにおいて「surface」と「display surface」は異なる概念ですが、両者は関連しています。

Surface: Pygameでは、Surfaceは画像や図形を描画するための基本的なオブジェクトです。これは基本的にピクセルの2次元配列で、いかなるグラフィカルコンテンツもこのSurfaceに描画されます。あなたは多くのSurfaceオブジェクトを作成し、それらに異なるグラフィック(スプライト、テキスト、図形など)を描画することができます。

Display Surface: display surfaceは特別なSurfaceで、これはPygameウィンドウまたはスクリーン上に表示されるメインの画面です。pygame.display.set_mode()関数を使って初期化され、これにより画面のサイズと特性が設定されます。他のすべてのSurfaceオブジェクトは、このdisplay surfaceに描画されるか、あるいはdisplay surface自体に直接描画されます。

簡単に言うと、Surfaceはキャンバスのようなもので、display surfaceはそのキャンバスを展示するギャラリーの壁のようなものです。他のSurfaceオブジェクトはdisplay surfaceに描画されることで、最終的にユーザーのスクリーン上に表示されます。

色々やって、display surfaceに描きこむ→display 画面を更新してdisplay surfaceのと同期する、の流れ

文字であれば、
文字を描く
→その文字用のサイズの小さなsurfaceができる
→そのsurfaceをdisplay surfaceに描きこむ
→画面を更新して、現在のdisplay surfaceの内容に更新する

実際の描画の部分は、OSの機能を呼び出していて、場合によっては不思議な挙動はそっちが関係する

参照:https://github.com/pygame/pygame/issues/251#issuecomment-619552646

pygame.display.update(rect)を呼び出した後、色々あってSDL_UpdateWindowSurfaceRects関数を呼び出す
そこから、OSのグラフィック描写ライブラリが呼び出される

これによって生じた環境起因の分かりにくい挙動:
https://teratail.com/questions/6ibljaslxoffl6

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?