2012-02-05 26 views
2

pygameでは、スクロールバックグラウンドを持っているので、プレイヤーは広い範囲を移動できますが、これはかなり簡単ですが、ゲームは非常にゆっくり実行されます。 Pygameスクロールバックラグ

私のコードの一部

http://pastebin.com/1EzDV7mc

私は非効率的に何をやっていますか? どうすれば速く走らせることができますか?

答えて

2

特にA Newbie Guide to PyGame

を参照してください:

  1. 使用surface.convert()

  2. 理想的には、のみ変更されている画面の一部を更新し、汚れたRECTアニメーションを使用しません全体像。それは私がこれまでPyGame(画面全体が常にスクロールしているゲームのために必要なもの)で全画面更新を使用していたと言いました。現代のコンピュータではそれほど多くないオブジェクト。

    そのガイドに記載されていない

  1. あなたはclock.tick(60)と60fpsのを目指して、下を目指し、30fpsのは結構ですと同じくらい

  2. をCPUにホースません。
  3. あなたがして、スクロールするためのフルスクリーンの更新を行うためには、a)多くのオブジェクトを使用していないまたはb)pygameのダウンロードを使用して停止およびOpenGLに

  4. なぜあなたは、ブリットされた画像のUSIを切り替える必要がある場合彼らの左上のポイントではなく、その中点?間違い?

  5. サイズ属性を別の幅と高さの属性として格納する方が、索引付けするリストとしてではなく、より一般的です。これにより、コードがはっきりと分かります。

+0

また、screen.fill((0、0、0))?なぜなら、あなたはすべての世界をblitするからです。だから、画面を埋めることは何もしないために重い操作に見えます。または、コード内で何かが間違っています。 –

+0

画面全体がスクロールしていて、背景がほとんど空白(例:テストするとき、または宇宙船が黒いスペースを通って動いているとき)、各フレーム全体を塗りつぶす必要があるかもしれない。 – junichiro

+0

ok、画面の一部がblanckだとしますが、ここではオブジェクトの背景/ 1つの画像をジャスティ。だから、もしそれがすべての画面(ほとんど不可能である)を秘密にしていないなら、彼は何を満たすべきかを知っている(そしてすべての画面ではない)。そして、以前のように: "変更された画面の部分のみを更新する"。あなた(fill(0,0,0))には、概念上の問題があります。IMO –

0

ジュニチロが言ったことに加えて、私は彼に加えていくつかの情報を与えるウェブサイトを見つけました。

https://www.pygame.org/docs/tut/newbieguide.html

私も、私はこのウェブサイトから、かなりのことを学んだ、と私は6年間のpygameのを使用してきた、あなたは初心者を呼び出していませんよ。

また、surface.convert()は非透過画像でのみ動作します。すべてで動作するsurface.convert_alpha()を使用してください。私は通常、関数を作成するので、イメージをロードするたびに全体を入力する必要はありません。次の2行のコードを自由に使用してください。

def loadify(imgname): 
    return pygame.image.load(imgname).convert_alpha() 

これは私のゲームのfpsを18から30 fpsに増加させました。

幸運を祈る!