0

バッチを使って同時に描画する方法は知っていますが、バッチ全体を一度に移動する方法があるのではないかと思っていました。すべてのスプライトを個別に移動する必要がありますか?

これまで私はこのようにやっています:

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以上だといいのですが)、それらをすべて移動するのはかなり面倒です。

どんな助けでもありがたいです:)

4

2 に答える 2

2

リストなどの適切なデータ構造にオブジェクトを格納することをお勧めします。

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))

ここでは、数値の範囲をループします(10のステップで0から51まで-50ではなく51の使用に注意してください-Pythonは最後の値の後ではなく、最後の値で停止するためrange(0, 50, 10)、10のステップで0から40になります)。 、タイルを作成してリストに追加します。3.xより前のバージョンのPythonを使用している場合は、リストではなくジェネレーターを返すxrange()よりも高速になることに注意してください。Python 3.xでは、これは範囲の動作です。range()

しかし、Pythonは、リスト内包表記を使用してリストを簡単に作成することで、さらに洗練されたものにすることができます。

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を実行x3することは、何かが間違っていることを示しています。適切なデータ構造を使用すると、入力を減らし、コードをより柔軟にすることができます。これについて考える良い方法は、何かをコピーして貼り付ける場合、おそらくそのコードを再利用可能な関数にリファクタリングするか、ループを使用して複数のアイテムに対して同じことを実行することです。

于 2012-04-16T00:47:37.593 に答える
0

私はLattywareの答えについてコメントするのに十分な評判がありません。これは完璧ですが、私はこれを言いたかったのです。あなたはpython / pygletに慣れていないようですので、cocos2dを見てください。それはpygletの上に構築されており(あなたが学んだことはすべて真実です)、あなたが探しているものなど、いくつかの素晴らしい機能があります。cocos2dでは、スプライトをバッチに追加し、そのすべての子と一緒にバッチを移動できます。それがあなたが探しているものなら、あなたはscrollingLayersも持っています...

于 2012-04-17T10:59:07.993 に答える