[英語| 中文| Deutsch | español|フランセ|イタリアーノ| 日本語| 한국어| Português|陶芸| Türkçe|皆
Pyxelは、Python用のレトロゲームエンジンです。
レトロなゲームコンソールに触発されたシンプルな仕様では、16色のみを表示したり、4つのサウンドチャンネルをサポートするなど、Pixel-Artスタイルのゲームを簡単に作成できます。
Pyxelの開発は、ユーザーのフィードバックによって駆動されます。 GithubでPyxelを星にしてください!
Pyxelの仕様とAPIは、PICO-8とTIC-80に触発されています。
PyxelはMITライセンスの下でオープンソースであり、無料で使用できます。 Pyxelでレトロゲームを作り始めましょう!
Python3(バージョン3.8以降)をインストールした後、次のコマンドを実行します。
pip install -U pyxel
公式インストーラーを使用してPythonをインストールするときは、 pyxel
コマンドを有効にするためにAdd Python 3.x to PATH
オプションに確認してください。
HomeBrewをインストールした後、次のコマンドを実行します。
brew install pipx
pipx ensurepath
pipx install pyxel
インストール後にpyxelをアップグレードするには、 pipx upgrade pyxel
実行します。
SDL2パッケージ(ubuntu用のlibsdl2-dev
)をインストールした後、python3(バージョン3.8以降)、およびpython3-pip
、次のコマンドを実行します。
sudo pip3 install -U pyxel
前のコマンドが失敗した場合は、MakeFileの指示に従って、ソースからPyxelを構築することを検討してください。
PyxelのWebバージョンは、PythonまたはPyxelのインストールを必要とせず、サポートされているWebブラウザーを備えたPC、スマートフォン、タブレットで実行されます。
詳細な手順については、このページを参照してください。
Pyxelをインストールした後、次のコマンドを使用して、現在のディレクトリに例をコピーできます。
pyxel copy_examples
次の例は、現在のディレクトリにコピーされます。
01_hello_pyxel.py | 最も簡単なアプリケーション | デモ | コード |
02_jump_game.py | Pyxelリソースファイルを使用してゲームをジャンプします | デモ | コード |
03_draw_api.py | 描画APIのデモンストレーション | デモ | コード |
04_SOUND_API.py | サウンドAPIのデモンストレーション | デモ | コード |
05_COLOR_PALETTE.py | カラーパレットリスト | デモ | コード |
06_click_game.py | マウスクリックゲーム | デモ | コード |
07_snake.py | BGMとのヘビゲーム | デモ | コード |
08_triangle_api.py | APIを描く三角形のデモンストレーション | デモ | コード |
09_shooter.py | 画面の移行を備えたゲームを撮影します | デモ | コード |
10_platformer.py | マップ付きのサイドスクロールプラットフォームゲーム | デモ | コード |
11_offscreen.py | 画像クラスを使用したオフスクリーンレンダリング | デモ | コード |
12_PERLIN_NOISE.py | Perlinノイズアニメーション | デモ | コード |
13_bitmap_font.py | ビットマップフォントを描画します | デモ | コード |
14_synthesizer.py | オーディオ拡張機能を使用したシンセサイザー | デモ | コード |
15_tiled_map_file.py | タイルマップファイルのロードと描画(.tmx) | デモ | コード |
16_TransForm.py | 画像の回転とスケーリング | デモ | コード |
99_flip_animation.py | フリップ機能を備えたアニメーション(非Webプラットフォームのみ) | デモ | コード |
30SEC_OF_DAYLIGHT.PYXAPP | アダムによる第1ピクセルジャム勝利ゲーム | デモ | コード |
megaball.pyxapp | AdamによるArcade Ball Physicsゲーム | デモ | コード |
8bit-bgm-gen.pyxapp | フレンチブレッドによるバックグラウンドミュージックジェネレーター | デモ | コード |
例は、次のコマンドで実行できます。
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30sec_of_daylight.pyxapp
Pythonスクリプトで、Pyxelモジュールをインポートし、 init
関数でウィンドウサイズを指定し、 run
関数でpyxelアプリケーションを開始します。
import pyxel
pyxel . init ( 160 , 120 )
def update ():
if pyxel . btnp ( pyxel . KEY_Q ):
pyxel . quit ()
def draw ():
pyxel . cls ( 0 )
pyxel . rect ( 10 , 10 , 20 , 20 , 11 )
pyxel . run ( update , draw )
run
関数の引数は、フレームの更新を処理するupdate
関数と、画面の描画を処理するdraw
関数です。
実際のアプリケーションでは、以下に示すように、クラスでピクセルコードをラップすることをお勧めします。
import pyxel
class App :
def __init__ ( self ):
pyxel . init ( 160 , 120 )
self . x = 0
pyxel . run ( self . update , self . draw )
def update ( self ):
self . x = ( self . x + 1 ) % pyxel . width
def draw ( self ):
pyxel . cls ( 0 )
pyxel . rect ( self . x , 0 , 8 , 8 , 9 )
App ()
アニメーションなしでシンプルなグラフィックを作成するために、 show
関数を使用してコードを簡素化できます。
import pyxel
pyxel . init ( 120 , 120 )
pyxel . cls ( 1 )
pyxel . circb ( 60 , 60 , 40 , 7 )
pyxel . show ()
作成されたスクリプトは、 python
コマンドを使用して実行できます。
python PYTHON_SCRIPT_FILE
pyxel run
コマンドで実行することもできます。
pyxel run PYTHON_SCRIPT_FILE
さらに、 pyxel watch
コマンドは、指定されたディレクトリの変更を監視し、変更が検出されたときにプログラムを自動的に再実行します。
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILE
ディレクトリの監視はCtrl(Command)+C
押すことで停止できます。
Pyxelアプリケーションの実行中に、次の特別なキーアクションが利用可能です。
Esc
Alt(Option)+1
Alt(Option)+2
Alt(Option)+3
Alt(Option)+8
またはA+B+X+Y+DL
のゲームパッドAlt(Option)+9
またはA+B+X+Y+DR
ゲームパッドのDRAlt(Option)+0
またはA+B+X+Y+DU
on gamepadupdate
時間/ draw
時間)Alt(Option)+Enter
またはA+B+X+Y+DD
on gamepadShift+Alt(Option)+1/2/3
Shift+Alt(Option)+0
Pyxelエディターは、Pyxelアプリケーションで使用される画像とサウンドを作成できます。
次のコマンドでPyxelエディターを開始できます。
pyxel edit PYXEL_RESOURCE_FILE
指定されたpyxelリソースファイル(.pyxres)が存在する場合、ロードされます。存在しない場合は、指定された名前の新しいファイルが作成されます。リソースファイルが省略されている場合、 my_resource.pyxres
という名前の新しいファイルが作成されます。
Pyxelエディターを起動した後、Pyxelエディターにドラッグしてドロップすることにより、別のリソースファイルに切り替えることができます。
作成されたリソースファイルは、 load
関数を使用してロードできます。
Pyxelエディターには、次の編集モードがあります。
画像エディター
各画像バンクの画像を編集するモード。
画像ファイル(PNG/GIF/JPEG)を画像エディターにドラッグアンドドロップして、現在選択している画像バンクに画像をロードできます。
TileMapエディター
画像バンクから画像をタイルパターンに配置するTileMapを編集するモード。
TMXファイル(タイル張りのマップファイル)をTileMapエディターにドラッグアンドドロップして、現在選択されているTileMap番号に対応する描画順にレイヤーをロードします。
サウンドエディター
メロディーやサウンドエフェクトに使用されるサウンドを編集するためのモード。
音楽編集者
再生の順にサウンドが配置されている音楽を編集するモード。
Pyxel画像とTileMapsは、次の方法を使用して作成することもできます。
Image.set
を使用して文字列のリストから画像を作成しますTilemap.set
Image.load
パレットに画像ファイル(PNG/GIF/JPEG)をロードします。Pyxelサウンドは、次の方法を使用して作成することもできます。
Sound.set
functionまたはMusic.set
functionを使用した文字列からサウンドを作成しますこれらの関数の使用については、APIリファレンスを参照してください。
Pyxelは、クロスプラットフォームである専用のアプリケーション配布ファイル形式(Pyxelアプリケーションファイル)をサポートしています。
pyxelアプリケーションファイル(.pyxApp)は、 pyxel package
コマンドを使用して作成されます。
pyxel package APP_DIR STARTUP_SCRIPT_FILE
リソースまたは追加のモジュールを含める必要がある場合は、それらをアプリケーションディレクトリに配置します。
メタデータは、スタートアップスクリプト内の次の形式で指定することにより、実行時に表示できます。 title
とauthor
以外のフィールドはオプションです。
# title: Pyxel Platformer
# author: Takashi Kitao
# desc: A Pyxel platformer example
# site: https://github.com/kitao/pyxel
# license: MIT
# version: 1.0
作成されたアプリケーションファイルは、 pyxel play
コマンドを使用して実行できます。
pyxel play PYXEL_APP_FILE
pyxel app2exe
またはpyxel app2html
コマンドを使用して、Pyxelアプリケーションファイルを実行可能ファイルまたはHTMLファイルに変換することもできます。
width
、 height
画面の幅と高さ
frame_count
経過フレームの数
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
画面サイズ( width
、 height
)でPyxelアプリケーションを初期化します。次のオプションを指定できます: title
付きのウィンドウタイトル、 fps
のフレームレート、 quit_key
でアプリケーションを終了するためのキー、 display_scale
を備えたディスプレイスケール、 capture_scale
の画面キャプチャスケール、および画面キャプチャの最大記録時間capture_sec
を使用したビデオ。
例: pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0)
run(update, draw)
Pyxelアプリケーションを起動し、フレームアップデートのupdate
関数と描画のdraw
関数を呼び出します。
show()
画面を表示し、 Esc
キーが押されるまで待ちます。
flip()
画面を1つのフレームで更新します。 Esc
キーが押されたときにアプリケーションが終了します。この関数はWebバージョンでは使用できません。
quit()
Pyxelアプリケーションを終了します。
load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
リソースファイル(.pyxres)をロードします。オプションがTrue
に設定されている場合、対応するリソースはロードから除外されます。同じ名前のパレットファイル(.pyxpal)がリソースファイルと同じ場所に存在する場合、パレットディスプレイの色も更新されます。パレットファイルには、newlinesで区切られたディスプレイ色( 1100FF
など)の16進エントリが含まれています。パレットファイルは、Pyxelエディターに表示される色を変更するためにも使用できます。
user_data_dir(vendor_name, app_name)
vendor_name
とapp_name
に基づいて作成されたユーザーデータディレクトリを返します。ディレクトリが存在しない場合、自動的に作成されます。これは、ハイスコア、ゲームの進捗、および同様のデータを保存するために使用されます。
例: print(pyxel.user_data_dir("Takashi Kitao", "Pyxel Shooter"))
mouse_x
、 mouse_y
マウスカーソルの現在の位置
mouse_wheel
マウスホイールの現在の値
btn(key)
key
が押されている場合はTrue
を返し、それ以外の場合はFalse
を返します。 (キー定義リスト)
btnp(key, [hold], [repeat])
key
がそのフレームに押されている場合はTrue
を返し、それ以外の場合はFalse
を返します。 hold
とrepeat
が指定されている場合、 key
hold
フレーム以上に抑えられた後、 True
はすべてのrepeat
フレームが返されます。
btnr(key)
key
がそのフレームでリリースされている場合にTrue
を返し、それ以外の場合はFalse
を返します。
mouse(visible)
マウスカーソルを表示して表示True
visible
ている場合は、表示されている場合はvisible
れている場合はFalse
表示にします。カーソルの位置は、隠されていても更新され続けます。
colors
パレット表示色のリスト。ディスプレイ色は、24ビットの数値で指定されています。 colors.from_list
とcolors.to_list
を使用して、pythonリストを直接割り当てて取得します。
例: old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233
images
画像バンクのリスト(画像クラスのインスタンス)(0-2)
例: pyxel.images[0].load(0, 0, "title.png")
tilemaps
TileMapsのリスト(TileMapクラスのインスタンス)(0-7)
clip(x, y, w, h)
w
の幅とh
の高さで( x
、 y
)から画面の描画領域を設定します。 clip()
呼び出して、図面領域をフル画面にリセットします。
camera(x, y)
画面の左上角座標を( x
、 y
)に変更します。 camera()
0
0
にリセットします。
pal(col1, col2)
描画時にcol1
col2
に置き換えます。 pal()
呼び出して、最初のパレットにリセットします。
dither(alpha)
描画時にディザリング(擬似透明度)を適用します。 0.0
1.0
範囲にalpha
設定し、 0.0
は透明で、 1.0
不透明です。
cls(col)
col
のクリアスクリーン。
pget(x, y)
( x
、 y
)でピクセルの色を取得します。
pset(x, y, col)
( x
、 y
)で色col
のピクセルを描画します。
line(x1, y1, x2, y2, col)
( x1
、 y1
)から( x2
、 y2
)までの色col
の線を描画します。
rect(x, y, w, h, col)
( x
、 y
)から幅w
、高さh
、色col
の長方形を描画します。
rectb(x, y, w, h, col)
( x
、 y
)から幅w
、高さh
、色col
の長方形の輪郭を描きます。
circ(x, y, r, col)
( x
、 y
)の半径r
と色col
の円を描きます。
circb(x, y, r, col)
( x
、 y
)の半径r
と色col
の円の輪郭を描きます。
elli(x, y, w, h, col)
( x
、 y
)から幅w
、高さh
、色col
の楕円を描画します。
ellib(x, y, w, h, col)
( x
、 y
)から幅w
、高さh
、色col
の楕円の輪郭を描きます。
tri(x1, y1, x2, y2, x3, y3, col)
頂点( x1
、 y1
)、( x2
、 y2
)、( x3
、 y3
)、およびcolor col
で三角形を描画します。
trib(x1, y1, x2, y2, x3, y3, col)
頂点( x1
、 y1
)、( x2
、 y2
)、( x3
、 y3
)、およびcolor col
で三角形の輪郭を描きます。
fill(x, y, col)
( x
、 y
)と同じ色で接続された領域を色col
で満たします。
blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
イメージバンクimg
(0-2)の( u
、 v
)から( x
、 y
)のサイズ( w
、 h
)の領域をコピーします。負の値がw
および/またはh
に割り当てられている場合、領域は水平および/または垂直に反転します。 colkey
が指定されている場合、透明な色として扱われます。 rotate
(程度)、 scale
(1.0 = 100%)、またはその両方が指定されている場合、対応する変換が適用されます。
bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
w
、 h
)をtilemap tm
(0-7)の( u
、 v
)から( x
、 y
)にコピーします。負の値がw
および/またはh
に割り当てられている場合、領域は水平および/または垂直に反転します。 colkey
が指定されている場合、透明な色として扱われます。 rotate
(程度)、 scale
(1.0 = 100%)、またはその両方が指定されている場合、対応する変換が適用されます。タイルのサイズは8x8ピクセルで、 (image_tx, image_ty)
のタプルとしてtilemapに保存されます。 text(x, y, s, col)
x
、 y
)の色col
で文字列s
描画します。sounds
サウンドのリスト(サウンドクラスのインスタンス)(0-63)
例: pyxel.sounds[0].speed = 60
musics
音楽のリスト(音楽クラスのインスタンス)(0-7)
play(ch, snd, [tick], [loop], [resume])
チャンネルch
(0-3)でサウンドsnd
(0-63)を再生します。 snd
がリストの場合、サウンドは順番に再生されます。再生開始位置はtick
(1ティック= 1/120秒)で指定できます。 loop
がTrue
に設定されている場合、ループ再生が実行されます。再生が終了した後に前のサウンドを再開するには、 resume
True
設定します。
playm(msc, [tick], [loop])
Music msc
(0-7)を再生します。再生開始位置はtick
(1ティック= 1/120秒)で指定できます。 loop
がTrue
に設定されている場合、ループ再生が実行されます。
stop([ch])
指定されたチャネルch
(0-3)の再生を停止します。すべてのチャネルを停止するには、 stop()
呼び出します。
play_pos(ch)
チャネルch
(0-3)のサウンド再生位置を(sound_no, note_no)
として取得します。再生が停止したときにNone
戻りません。
ceil(x)
x
以上の最小の整数を返します。
floor(x)
x
以下の最大の整数を返します。
sgn(x)
x
が正の場合は0
の場合は0
、負の場合は1
-1
ます。
sqrt(x)
x
の平方根を返します。
sin(deg)
deg
のサインを返します。
cos(deg)
deg
のコサインを返します。
atan2(y, x)
y
/ x
のarctangentを程度に返します。
rseed(seed)
乱数ジェネレーターの種子を設定します。
rndi(a, b)
a
または等以上のランダム整数をb
以下に返します。
rndf(a, b)
a
以下のランダムな浮動小数点数をb
以下に返します。
nseed(seed)
Perlinノイズの種子を設定します。
noise(x, [y], [z])
指定された座標のPerlinノイズ値を返します。
width
、 height
画像の幅と高さ
set(x, y, data)
文字列のリストを使用して、( x
、 y
)で画像を設定します。
例: pyxel.images[0].set(10, 10, ["0123", "4567", "89ab", "cdef"])
load(x, y, filename)
( x
、 y
)に画像ファイル(png/gif/jpeg)をロードします。
pget(x, y)
( x
、 y
)でピクセルの色を取得します。
pset(x, y, col)
( x
、 y
)の色col
でピクセルを描画します。
width
、 height
TileMapの幅と高さ
imgsrc
TileMapが参照する画像バンク(0-2)
set(x, y, data)
文字列のリストを使用して、( x
、 y
)にtilemapを設定します。
例: pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"])
load(x, y, filename, layer)
( x
、 y
)のtmxファイル(タイル張りのマップファイル)から描画順序layer
(0-)にレイヤーをロードします。
pget(x, y)
( x
、 y
)でタイルを取得します。タイルは(image_tx, image_ty)
のタプルとして表されます。
pset(x, y, tile)
( x
、 y
)でtile
を描画します。タイルは(image_tx, image_ty)
のタプルとして表されます。
notes
メモのリスト(0-127)。数が高いほど、ピッチが高くなります。注33
「A2」(440Hz)に対応しています。レストノートは-1
で表されます。
tones
トーンのリスト(0:三角形 / 1:正方形 / 2:パルス / 3:ノイズ)
volumes
ボリュームのリスト(0-7)
effects
エフェクトリスト(0:なし / 1:スライド / 2:Vibrato / 3:フェードアウト / 4:ハーフファードアウト / 5:クォーターファードアウト)
speed
再生速度。 1
は最速で、数が大きいほど、再生速度が遅くなります。 120
では、1つの音の長さが1秒になります。
set(notes, tones, volumes, effects, speed)
文字列を使用して、メモ、トーン、ボリューム、およびエフェクトを設定します。トーン、ボリューム、または効果の長さがノートよりも短い場合、最初から繰り返されます。
set_notes(notes)
「cdefgab」+'# - '+'01234'または「r」で作られた文字列を使用してメモを設定します。それは症例に敏感であり、空白は無視されます。
例: pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3")
set_tones(tones)
「tspn」で作られた文字列でトーンを設定します。ケース非感受性と空白は無視されます。
例: pyxel.sounds[0].set_tones("TTSS PPPN")
set_volumes(volumes)
「01234567」で作られた文字列でボリュームを設定します。ケース非感受性と空白は無視されます。
例: pyxel.sounds[0].set_volumes("7777 7531")
set_effects(effects)
「nsvfhq」で作られた文字列で効果を設定します。ケース非感受性と空白は無視されます。
例: pyxel.sounds[0].set_effects("NFNF NVVS")
seqs
複数のチャネルにわたるサウンドの2次元リスト(0-63)
set(seq0, seq1, seq2, ...)
各チャネルの音のリスト(0-63)を設定します。空のリストが指定されている場合、そのチャネルは再生に使用されません。
例: pyxel.musics[0].set([0, 1], [], [3])
Pyxelには、ユーザーを混乱させたり、使用するために専門的な知識を必要とする可能性があるため、このリファレンスで言及されていない「Advanced API」が含まれています。
スキルに自信がある場合は、これをガイドとして使用して素晴らしい作品を作成してみてください!
問題トラッカーを使用して、バグレポートと機能または拡張リクエストを送信します。新しい問題を提出する前に、同様のオープンな問題がないことを確認してください。
コードを手動でテストし、問題トラッカーの強化に関するバグまたは提案を報告した人は誰でも大歓迎です!
パッチと修正は、プルリクエスト(PRS)の形式で受け入れられます。 Issue TrackerでPull Requestアドレスの問題が開いていることを確認してください。
プルリクエストを送信することは、MITライセンスに基づいてあなたの拠出免許をライセンスすることに同意することを意味します。
PyxelはMITライセンスに基づいてライセンスされています。ソフトウェアまたはそのかなりの部分のコピーには、MITライセンス条件のコピーと著作権通知が含まれている場合、独自のソフトウェアで再利用できます。
PyxelはGithubスポンサーのスポンサーを探しています。継続的なメンテナンスと機能開発をサポートするために、Pyxelのスポンサーを検討してください。利益として、スポンサーはPyxel開発者と直接相談できます。詳細については、このページをご覧ください。