step0 準備:星空を飛ぶ宇宙船

Pyxel の機能を広く浅く体験する、最初のアニメーション作品

← トップページへもどる

1. 完成イメージ

真っ暗な宇宙空間を、星が手前へ流れていきます。画面中央下に自作のドット絵の宇宙船がいて、 矢印キーで上下左右に動かせます。画面上部にはタイトル文字、そして BGM が流れ続けます。

STAR VOYAGER
完成イメージ(実際の画面は 160×120 ドット。図は概念図です)

▶ 完成した作品をブラウザでみる

作品の規模感 最終的なコードはおよそ 60〜80 行です。8 つのフェーズに分け、1 フェーズあたり 10 行前後ずつ書き足していきます。各フェーズの終わりで必ず一度実行し、 動くことを確かめてから次に進みます。

2. フェーズ分割

完成までを 8 つのフェーズに分けます。上から順に、少しずつ書き足していきます。 見出しのリンクから、それぞれの解説ページへ直接移動できます。

フェーズやること主に使う API・機能
1ウィンドウを出して、黒い画面を表示するpyxel.init / pyxel.run / pyxel.cls
2タイトル文字を画面に表示するpyxel.text、色番号
3星を並べ、手前に流れるアニメーションにするpyxel.pset、リスト、random
4リソースエディタで宇宙船のドット絵を描く
あわせてコードをクラスにまとめ直す
pyxel edit.pyxresclass
5描いた宇宙船を画面に表示するpyxel.load / pyxel.blt、透過色
6矢印キーで宇宙船を動かす(画面外に出ないように制限する)pyxel.btnpyxel.KEY_LEFT ほか
7リソースエディタで BGM を作り、流し続けるサウンド/ミュージック編集、pyxel.playm
8作品をパッケージ化し、Web で公開するpyxel package / pyxel app2html、GitHub Pages
進め方 1 フェーズごとに「考え方 → 必要な API → コード → 解説」を読み、コードを自分で入力して 実行します。想定どおり動くことを確認できてから、次のフェーズに進みます。 うまく動かないときや疑問が出たときは、その内容を備忘録に残していきます。
はじめて読むときは、この下の3. 学ぶ技術項目4. 先に押さえておきたい 2 つの土台に目を通してから、フェーズ 1 へ進んでください。

3. この step で学ぶ技術項目

分類項目登場フェーズ
Pyxel の骨格アプリの起動と終了(pyxel.init / pyxel.run1
毎フレーム呼ばれる 2 つの処理(更新と描画)1
画面座標系(左上が原点)と 16 色パレット1・2
描画文字の描画(pyxel.text2
図形の描画(pyxel.pset / rect / circ3
アニメーション座標を毎フレーム更新して動かす考え方3
画面外に出たものを再利用する(ループさせる)3
素材づくりリソースエディタの操作(pyxel edit4・7
イメージバンクとリソースファイル(.pyxres4・5
スプライトの転送と透明色(pyxel.blt5
入力キー入力の判定(pyxel.btn / btnp6
サウンドサウンドとミュージックの作成7
BGM の再生とループ(pyxel.playm7
公開アプリのパッケージ化(pyxel package8
HTML 化して Web 公開(pyxel app2html8

あわせて新しく出てくる Python の概念

これまでの「順次・反復・分岐・リスト・モジュール」に加えて、この step では次の 2 つが 新しく登場します。出てきたフェーズで、必要になった理由とセットで解説します。

概念なぜ必要になるか登場フェーズ
リストの中のリスト
(二次元リスト)
星 1 個ごとに「x 座標・y 座標・速さ」の 3 つをまとめて持たせるため。 3
クラス
class / __init__ / self
宇宙船の位置や星の一覧など「ゲームが覚えておくデータ」が増えてくると、関数の外に変数を置く書き方では管理しきれなくなるため。フェーズ 3 まではあえて関数だけで書き、限界を体感してから導入します。 4

4. 先に押さえておきたい 2 つの土台

土台 1:画面の座標系

Pyxel の画面は、数学のグラフと違って 左上が原点 (0, 0) です。 x は右へ、y は下へ増えます。「y を増やすと下に動く」ことに慣れるのが最初の関門です。

(0, 0) 原点 x が増える → ↓ y が増える (80, 60) (159, 119)
画面サイズを 160×120 にした場合。右下の座標は (159, 119) で、160 や 120 ではない点に注意
用語:ドット(ピクセル) Pyxel の画面は小さな正方形のマス目の集まりです。1 マスが 1 ドット。 160×120 は「横 160 マス・縦 120 マス」という意味で、実際のウィンドウは これを何倍かに拡大して表示されます。

土台 2:毎フレーム繰り返される 2 つの処理

Pyxel のゲームは 1 秒間に 30 回、同じ処理を繰り返し続けることで動いて見えます。 その 1 回分を 1 フレーム と呼び、フレームごとに次の 2 つが順番に呼ばれます。

init 最初に1回 1 秒間に 30 回くりかえす(= 30 FPS) update 状態を変える draw 画面に描く Esc で終了
update と draw の役割を分けておくと、あとで動きがおかしいときに原因を探しやすくなります
よくあるつまずき 「描画(draw)の中で座標を増やす」と、一見動いて見えるのに、あとで画面を止めたり やり直したりする機能を足したときに破綻します。動かすのは update、描くのは draw と最初から分けておいてください。

フェーズ 1 をはじめる →