追記20250124
Pyxel version 2.3.1になったあたりでWeb版が動作しなくなりました。
pymunkがロードできません。
何が変わったのか?
2.3.0までは動いていたのに・・・
そんなわけでローカルでしか遊べない代物になってしまった。
しばし様子見しつつ、対策・・・できるかなぁ?
追記20250125
Pyxelでのversion up内容聞きました。
特に影響ある更新は無いとのこと。
micropipもpyodideも問題はなさそうで行き詰まり・・・
しばらく様子を見ます。
追記20250125_2
pymunkを絶対パスとすることで解決しました。
Pyxel 2.3.0あたりでpyodideのバージョンを上げたことによるmicropip等の兼ね合いが影響あるかもとのこと。
ひとまず解決して良かった。
前回記事でpymunkライブラリのサンプルをpyxel化しまして、その後ピンボールとスマートボールをPyxelで作ってみました。
pymunkで使える形状は、線、円、矩形の三種類。
これらを定義(spaceにadd)するだけでこれらの衝突判定を行うことができます。
つまりは、打ち出す玉を円、枠線を線で作成、バンパーや穴を円で作成、その他を矩形で作成し弾性や摩擦を設定して、spaceの重力や摩擦を設定するだけです。
設定したものの座標を取得できるので該当箇所に表示物を置けばそれっぽく見えます。
衝突判定に少し癖があるようなので回避策を考える必要がありましたが、上記二種のプログラムを動作させることができました。
まだpymunkを熟知できていないので、もしかしたら「癖」ではないのかもしれません。
「癖」の例としては、
「CollisionHandlerの判定がcollision_type=0とそれ以外でしか判定してくれない。」
スマートボールにおいては、複数のボールが複数の穴に入ることを前提としているのですが、ボールが1個しか穴に入れられない問題がありました。
回避策としては衝突ハンドラを使わずにshapeのshapes_collideを使うことで回避しました。
当たり判定をライブラリがやってくれるなら楽だなとか思います。
重力や摩擦を無視するように作れば何でもアリだなと思いました。
あとは処理負荷がどうなるか・・・ですかね?
追記:
pymunkのweb化ではバーチャルゲームパッドは非対応になるようです。