2012-04-16 6 views
0

と同時に、多くのスプライトに同じ距離を移動するが、一度にバッチ全体を移動する方法があった場合、私は思っていました。すべてのスプライトを個別に移動する必要がありますか?は、私はバッチを使用して、それらを同時に描画する方法を知っているpyglet

tile2 =pyglet.sprite.Sprite(tile1,0,0,batch = terrain) 
tile3 =pyglet.sprite.Sprite(tile1,10,0,batch = terrain) 
tile4 =pyglet.sprite.Sprite(tile1,20,0,batch = terrain) 
tile5 =pyglet.sprite.Sprite(tile1,30,0,batch = terrain) 
tile6 =pyglet.sprite.Sprite(tile1,40,0,batch = terrain) 
tile7 =pyglet.sprite.Sprite(tile1,50,0,batch = terrain) 

tile2.x += 10 
tile3.x += 10 
tile4.x += 10 

等...

しかし、完成した製品(50+私は願っています)でこれより多くのスプライトがあるでしょうし、それらを動かす:

は、これまでのところ私はこのようにそれをやってきましたすべてがかなり面倒です。

すべてのヘルプは理解されるであろう:)

答えて

2
あなたはこのような listとして、適切なデータ構造で、あなたのオブジェクトを格納するとよいでしょう

tiles = [] 
tiles.append(pyglet.sprite.Sprite(tile1,0,0,batch = terrain)) 
tiles.append(pyglet.sprite.Sprite(tile1,10,0,batch = terrain)) 
... 

リストは、一連の項目、することができますが含まれています個別にアクセスする(tiles[0], tiles[1])か、ループして(for tile in tiles:)。リストは長さを変えることができ、多くの変数をハードコードすることなく、変更可能なタイルの数を作ることができます。

しかし、これはそれを行うための非常に冗長な方法であり、より良い方法は、ループを使用することです。ここでは

tiles = [] 
for x in range(0, 51, 10): 
    tiles.append(pyglet.sprite.Sprite(tile1, x, 0, batch = terrain)) 

のステップで0から51までの数字の範囲(オーバー我々ループ10 - 51の使用ではなく、最後の値ではなく、最後の値で停止するので、range(0, 50, 10)は10のステップで0から40までの値を返します。)、タイルを作成してリストに追加します。 Pythonの3.xより前のバージョンを使用している場合、xrange()range()より速くなるため、リストではなくgeneratorを返します。 Python 3.xでは、これがrangeの振る舞いです。

しかし、Pythonは、よりエレガントな、簡単にリストを作成するlist comprehensionを使用することができます。私たちが行くようにそれぞれ1を移動、リストを

tiles = [pyglet.sprite.Sprite(tile1, x, 0, batch = terrain) for x in range(0, 51, 10)] 

を次にそれらを移動するために、我々ループ:

for tile in tiles: 
    tile.x += 10 

一般的に、x1,x2、、...は間違っているという兆候です。適切なデータ構造を使用すると、入力が少なくて済み、コードを柔軟にすることができます。これについて考える良い方法は、何かをコピーして貼り付けている場合に、そのコードを再利用可能な関数に再組み立てしたり、ループを使用して複数のアイテムに対して同じことを行うことができます。

+0

よく説明してくれてありがとうございます。 – user1237200

0

私はLattywareの答えにコメントするほどの評判はありませんが、これは完璧ですが、私はこれを言いたいと思いました。あなたはpython/pygletで初めてのようだから、cocos2dを見ることができます。これはpygletの上に構築されています(あなたが学んだことはすべて真実です)。探しているもののような素晴らしい機能がいくつかあります。 cocos2dではスプライトをバッチに追加し、そのバッチをすべての子で動かすことができます。あなたが探しているものなら、スクロールレイヤーもあります...

+0

私はcocos2dを見ましたが、インストールするのに問題があります。 :/ – user1237200

+0

これは実際には心配しないでください:) – user1237200

関連する問題