Skip to main content

GameObject and Physics framework for Pyxel

Project description

Pyxel-Physics-Engine

日本語 | English

日本語

概要

レトロゲームエンジンPyxelを基盤に開発された軽量で、プログラミング初心者向けの2D物理演算フレームワークです.

pyxel との違い

pyxelは描画・音・入力機能などを提供する優れたフレームワークですが、本格的なゲームを作る上で必須となる「物理演算」「オブジェクト管理」は開発者が一から実装する必要があります。そこで、これらの車輪の再発明を肩代わりを行い、実装の上で必要となる数学・物理・プログラミングの知識がなくても本格的なゲーム開発が行えるように設計したのが本フレームワークです。

1. 座標ではなくオブジェクト単位で考える

pyxelでは座標を個別に管理しますが、本フレームワークではゲーム内に登場する「プレイヤー」「ボール」「ブロック」といった物理的な実体をそれぞれ一つのオブジェクトとして管理することで、各要素の更新(update)や描画(draw)の処理をひとまとめにしてコードを綺麗に保つことが出来ます。

2. 当たり判定の最適化

通常$N$個のオブジェクトの当たり判定を行うには、それらのオブジェクトの組み合わせを考えておよそ$N^2$回の計算を必要とします。 ですが、本フレームワークではこの当たり判定の処理を数学的知識を用いて最適化することによって、およそ理想的には$N\log{N}$回の計算に落とし込むことが出来ます。

例えば、$100$個オブジェクトがあったとき、通常は$10,000$回の衝突処理を行う必要がありますが、これを理想的には$460$回にまで減らすことが出来ます。

3. 物理演算

アクションゲームにおけるジャンプ、2つの物体の衝突による跳ね返り、バネの挙動などは、高校レベル〜大学教養レベルの物理学(力学)の知識を必要とします。一方で本フレームワークを使用することで、あなたはオブジェクトの「当たり判定の大きさ」「重さ」「跳ね返りやすさ」といったパラメーターを設定するだけで物理的な動きを実装することが可能です。

対象ユーザー

Pyxel-Physics-Engineは特に以下の項目に当てはまるような人を対象に開発を行っています。 (もちろん、本フレームワークは誰でもMITライセンスの範囲内で自由に使用可能です!)

  • ifforは分かるが、ゲームはどうやって作れば...?という人 (初心者)
  • 学校でpyxelを使ったプログラミングの学習を行なっていたが、もっと本格的なゲームが作りたくなった人 (初心者)
  • 将来Unityなど他ゲームエンジンに興味があり、基本的な知識を習得したい人 (中級者)
  • とりあえずゲームのアイデアを手っ取り早くプロトタイプとして形にしたい人 (中級者~)

特徴

  • 知識がなくても使いやすい
    • 直感的な仕組み。App,World を作って add するだけで、より直感的にゲームが作ることができます!
    • 豊富なデモと日本語によるドキュメント (予定)
    • 衝突判定といったゲーム制作の上で必須の処理をPyxel-Physics-Engine側で最適化!高度な数学の知識は必要ありません
  • ゲームエンジンUnityの設計思想、用語に準拠
    • もし将来本格的なゲーム開発がしたい場合、ゲームエンジンの中で一位二位を争う知名度であるUnityにスムーズな移行ができます!

インストール方法 & クイックスタート

pip install pyxel-physics-engine
import pyxphys 
import pyxel

class Ball(pyxphys.GameObject):
    color : int = 6 # ボールの色
    radius : int = 10 # ボールの半径

    def __init__(self):
        super().__init__(x=100, y=20)
        self.name = "ball"
        self.vx = 0
        self.vy = -4
        self.add_collider(pyxphys.CircleCollider(self.radius))
    
    def update(self):
        if self.y > 190:
            self.vy *= -0.9
            self.y = 190

    def draw(self):
        pyxel.circ(self.x, self.y, self.radius, self.color)

# 初期設定
app = pyxphys.App(200,200) # アプリ本体
world = pyxphys.World(gravity = 0.9) # アプリの中における世界
app.add_world(world) # ゲーム本体に、世界を追加

world.add_object(Ball()) # "world"という世界にBallオブジェクトを追加

app.run() # アプリを実行

API仕様

基本構造

クラス名 説明
App アプリ本体。Appが保有しているすべてのWorldの描画をここで行います
World GameObjectが配置できる仮想的な空間です
GameObject 実際のゲーム上における物理的な実体です。複数個のColliderを保有します。
Collider 衝突や接触といった判定を検知します。

English

This framework enables you to use a physic object with a retro game-engine Pyxel.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyxel_physics_engine-0.2.0.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyxel_physics_engine-0.2.0-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file pyxel_physics_engine-0.2.0.tar.gz.

File metadata

  • Download URL: pyxel_physics_engine-0.2.0.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for pyxel_physics_engine-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4f87a20a268c370dd8abc7b5a303a09c703ae28801495758b5dc4bd6687bc5a7
MD5 42989393b921a1fbca12793dc58eb40d
BLAKE2b-256 4734836b7cdbdb73da1656b4ba3bc932172bffbd91809da077b93f97a21a0506

See more details on using hashes here.

File details

Details for the file pyxel_physics_engine-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pyxel_physics_engine-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7b9338f05834af88b793ac5ddac551340a5b3355a94505a295462cadda111ee7
MD5 779672b5eb07c6256201fd38451ce100
BLAKE2b-256 dee24bb4bb9e07bb9c45a40075c7c7f017489ec2072a122256ad6eaa7b606869

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page