問題タブ [pyglet]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - ピグレットの CPU 使用量が多すぎる
私は最近、pygame から pyglet と rabbyt を始めましたが、レンガの壁のようなものにぶつかりました。
1 つのスプライト (pyglet.sprite.Sprite にあるタイプ) が 60 フレーム/秒で表示される基本的な例を作成しました。問題は、この単純なプログラムが何らかの理由で CPU 時間の 50% を使用していることです。Rabbyt ライブラリにあるスプライト タイプで実験を繰り返しましたが、結果は同じでした。
1 秒あたり 60 フレームで 1000、次に 10,000 のスプライトをレンダリングすることにしましたが、驚いたことに、CPU 使用率は 50% のままです。唯一のことは、スプライトを移動またはアニメーション化すると、わずかにスタッターが発生することです。
最後に毎秒360コマで走ってみました。同じ結果、50% の使用率。
サンプルコードは次のとおりです。
Core 2 Duo と ATI HD 3500 カードを使用しています。
アドバイスやアイデアをいただければ幸いです。
python - Rabbytでピクセルの完全な衝突検出を行う方法は?
私はRabbytライブラリを調べ始めましたが、これまでのところ、pygletと組み合わせて使用することを本当に楽しんでいます。
ライブラリに実装されていないように見えることの1つは、スプライト間のピクセル完全衝突検出です。それを実装するには2つの問題があります。
まず、スプライトのテクスチャをロードするためにpygletを使用していますが、テクスチャからビットマスクを取得する方法がわかりません(私の非常に限られたOpenGLの知識が主な問題です)。BufferImageMaskはAbstractImageインスタンスから取得されているようですが、テクスチャ自体からは取得されていないようです。それを行う正しい方法は何ですか?
第二に、実際の衝突検出アルゴリズムを実装するためのさまざまな方法は何ですか?私がこれまで読んだことはすべて次のようになっているので、私は主に方法/バリエーションがあるかどうかに興味があります:
重要な情報を見逃さないようにしています。アルゴリズム自体はしっかりしています。
前もって感謝します!
PS私はPython2.7でコーディングしていますが、実際のピクセル完全衝突検出アルゴリズムをCで実装し、それを拡張機能として使用したいと思います。
アップデート
回転していないスプライトでピクセルパーフェクトな衝突検出を機能させることができました。
衝突とレンダリング可能は、特定のエンティティに関連付けられているオブジェクトの単なる辞書です。アルゴリズムはこれの修正バージョンです:Pygletピクセルの完全な衝突
それはかなり良いですが(そして、そのようなコードを一緒にハッキングした場合でも)、回転したスプライトには役に立ちません(異なる角度で同じスプライトの約100の異なるバージョンをキャッシュすることが実行可能なオプションでない限り、これは必要です)、私はまだその問題の解決策を探しています。
python - モニターのリフレッシュレートの半分のPygletを使用したFPS
Pygletを使用するのは初めてで、画面上でボールを動かす小さなプログラムを作成しました。現在、60fpsの安定したフレームレートを確立するのに苦労しています。Pygletはモニターのリフレッシュレート60Hzと同期することになっていますが、Pygletは私のfpsをリフレッシュレートの半分に設定しています(例:60Hz、30 fpsの場合)。これを引き起こしている私のコードに何か問題がありますか?
python - Mac OS X Lion の Eclipse PyDev で Python を 32 ビット プロセスとして実行する
MacPorts を使用して Mac OS X 10.7.4 に pyglet をインストールしました。
pyglet は 32 ビット アーキテクチャ用にビルドされた場合にのみ機能するため、使用するには、次のようにコマンド ラインから python を実行する必要があります。
そして、pyglet の「hello world」プログラムを正常に実行できます。
ただし、Eclipse で PyDev を使用したいのですが、Python を 32 ビット プロセスとして実行するように PyDev を構成する方法がわかりません。
MacPorts python を追加しました。
Python インタープリターとして ([設定] > [Pydev] > [インタープリター - Python])。新しいプロジェクトを作成し、MacPorts python をプロジェクトのインタープリターとして設定しました。しかし、このプロジェクト内からpyglet の「hello world」プログラムを実行すると、次のエラーが発生します。
これは、PyDev が python を 64 ビット プロセスとして実行していることを示しています。
Pythonインタープリターで環境変数を設定できることがわかります(設定> Pydev>インタープリター-Python>環境)が、これを正しく構成する方法がわかりません(試しました)。
問題は、PyDev で python を 32 ビット プロセスとして実行するにはどうすればよいかということです。
python - このメソッドはどのように呼び出されますか?(ピグレット)
次のコードは、pygletが使用する通常のスタイル(デコレータを使用)の代替です。
on_draw()メソッドがここでどのように呼び出されるかを誰かが説明できますか?
デコレータを使用して記述されたコードは、ここにあります。
python - gletools とチュートリアル コードを使用すると GL_TEXTURE_2D_ARRAY エラーが発生する
ここで質問の作成者と同じチュートリアルに従おうとしています。 残念ながら、そのページの下部にあるサンプル コードを実行しようとすると、次のエラーが発生します。
Windows Vista で Python 2.6 と Eclipse を使用しています。これを解決する方法についてのアイデアはありますか?
python - pyglet 使用時のテクスチャ境界
私は pyglet と opengl に入ろうとしましたが、テクスチャで単純な三角形を描画すると奇妙な結果が得られました。三角形を描画すると、テクスチャに黒い境界線が表示されます。min/mag_filter を変更しようとしましたが、境界線に影響はありません。ここで重要な何かが欠けていますか?
python - Pyglet:火の玉シューター、火の玉は一定の速度を維持するのではなく、指定されたキーを押すたびに加速し続けます
このコードをどのように機能させますか?このコードをファイルに保存したディレクトリに保存されているイメージの名前をpyglet
インストールして変更するだけです。"fireball.png"
このコードは、黒い背景画面を作成します。この画面では、キーを押すたびにfpsが表示され、位置(10、10)からx方向に沿って火の玉が発射されA
ます。
発射する火の玉が多いほど、すべての火の玉が速く進み始めることに気付くでしょう。
質問:
Aを押すたびに火の玉がどんどん速くなるのはなぜですか?
Aを押すたびに火の玉が加速するのを防ぐにはどうすればよいですか?
python - ピグレットで定期的に画像(スプライト?)を変更する
このコードを機能させる方法: pyglet をインストールして変更"assassin1.png"
し"assassin2.png"
、このコードをファイルに保存したディレクトリに保存されている画像の名前を付けます。
説明: このコードは、fps が表示される黒い背景画面を作成し、画像 "assassin1.png" を位置 (50, 30) に表示します。右方向ボタンを押している間、画像は右に移動します。
目標:右方向ボタンが押された状態で画像が移動するたびに、assassin1.png
画像が定期的に (0.25 秒ごとに) 2 番目の画像に変更されるように実装したいと思いますassassin2.png
。これは、イメージが歩いているような漠然とした錯覚を生み出すためです。
この目標を達成するにはどうすればよいですか?
forward_movement()
目的を達成するためのコードを配置するのに適切な場所と思われる Assassin クラスに空のメソッドを既に作成しました。しかし、コードを別の場所に配置したい場合は、それも問題ありません。
python - Pyglet:同じクラスのスプライトインスタンスに座標を共有させる方法は?
このコードをどのように機能させるか:pygletをインストールして変更しassassin1.png
、このコードをファイルに保存したディレクトリに保存されているイメージの名前を使用します。assassin2.png
assassin3.png
このコードはassassin1.png
、位置(50 30)でキーが押されていないときに表示され、右のキーが押されていると、キャラクターが前方に移動し、0.3秒ごとに2つの画像が切り替わり、歩いているキャラクターのように見えますassassin2.png
。assassin3.png
また、fpsも表示されます。
現在、キーを離すと、キャラクターは元の位置(50、30)に戻ります。もう一度キーを押すと、歩行中のキャラクターが最後に停止した位置からキャラクターが移動します。
歩くアニメーションキャラクターと立っているキャラクターが同じクラスの2つの異なるインスタンスであるため、これが発生する理由を理解しています。私は最初、クラス変数を使用して位置を保存できると思いました。しかし、私は実用的な解決策を思い付くことができないようです。誰かが私に何ができるか考えていますか?