2009-04-09 14 views
1

昨日、pygameの使い方を学び始めました。私はこの1冊の本を読んで助けになり、助けになり、そのチュートリアルと例と物をすべて追いました。私は本当にシンプルなサイド・スクローラー/プラットフォーミング・ゲームを作ろうと思っていましたが、本のソーラーは、左右に動くスプライトを変更する方法と、アニメーション・イメージを循環させる方法を指示しながら、かなり早く3Dモデリングに飛びました。Pygame:動きの方向によるスプライトの変化

今日はすべてスプライトを表示し、左右に移動して移動できるようにしました。しかし、単純なスクリプトのために、それは静的な画像を使用し、変更を拒否します。

誰でも私にスプライトの変更方法に関する知識を与えることができます。または、私にチュートリアルを送ってください。

すべてのリファレンスと人は、常に生成されたシェイプを使用していましたので、私は決してそれらと作業することはできません。

ご協力いただきありがとうございます。

追加:私のシーンに複雑なアニメーションを配置する方法を理解する前に、私の左手または右下を押し上げることに関して、自分の「プレーヤー」の動きをどのように動かすことができるのかを知りたいと思います。人々が本当に複雑なことを知っていれば対角線かもしれません。

追加:これまで私がまとめてきたことです。 http://animania1.ca/ShowFriends/dev/dirmove.rar方向/アクションをアクションの列に設定し、小さな列設定コードをループさせてアニメーションを実行させる可能性はありますか?

+0

私はパイゲームを使っていたのでしばらくしていましたが、私はこのチュートリアルでハッとしていました:http:// choosetheforce。 blogspot.com/2008/04/third-pygame-hulk-want-animation.html)とこのクラス:[animsprite.py](http://static.raumkraut.net/libs/animsprite.py)好奇心のうち、あなたはどの本を使っていますか?私は結局のところ、時間と素材の欠如のために諦めました。 –

+0

それはとても面白いです。私はそのハルク実験も見つけました。私はそれを動かすために上下左右に使いこなそうとしましたが、決してそれを得ませんでした。 ブック:McGugan - Pythonとpygameの でゲーム開発を始めて、私はそれでこれを作った:http://animania1.ca/ShowFriends/antgame.rar イメージはそうあなたは私が1枚の画像を使用したいと言っている – RamonLion

答えて

1

あなたは、左/右を押したときspritesheetの二つの第一の画像の間alernatesダムの例である:

import pygame 

quit = False 
pygame.init() 
display = pygame.display.set_mode((640,480)) 
sprite_sheet = pygame.image.load('sprite.bmp').convert() 

# by default, display the first sprite 
image_number = 0 

while quit == False: 
    event = pygame.event.poll() 
    no_more_events = True if event == pygame.NOEVENT else False 

    # handle events (update game state) 
    while no_more_events == False: 
     if event.type == pygame.QUIT: 
      quit = True 
      break 
     elif event.type == pygame.NOEVENT: 
      no_more_events = True 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       image_number = 0 
      elif event.key == pygame.K_RIGHT: 
       image_number = 1 

     event = pygame.event.poll() 

    if quit == False: 
     # redraw the screen 
     display.fill(pygame.Color('white')) 
     area = pygame.Rect(image_number * 100, 0, 100, 150) 
     display.blit(sprite_sheet, (0,0), area) 
     pygame.display.flip() 

ので、多分このコードshoudln'tが実際に取られる前に、私は本当にpygameのを使用したことがありません一例として。私はそれが基本を示すことを願っています。

もっと完全にするには、更新する前にしばらくお待ちください。私が1秒間に60回だけ更新するように制御する。

作業を簡略化するスプライトクラスを作成すると便利です。コンストラクタ内でスプライトフレームのサイズを渡すと、update()draw()のようなメソッドがあり、自動的に次のフレームの選択、スプライトのブリッティングなどを行います。

Pygameはその目的のために基本クラスを提供しているようです:link text

+0

fantastic。それは完璧に働いた。今。私が考えていた。それが事実ならば。私はそれを持っているので、基本的にグリッドタイプのシステムとして動作しますか?シート上の左右が特定の動作であるかどうかを確認し、一定量のフレームをループさせますか?私は手動でアクションごとにフレームの量を設定します。 – RamonLion

+0

申し訳ありませんが、あなたの質問を理解できませんでした。 –

+0

まあまあのコードでは、数値が変わるたびにスプライト空間がどのくらい多くあるかが分かります。そして、私のコード(上でリンクしています)には、ランニングフレームとアクションフレームがあります。アニメーション化されていません。スプライト番号が設定された後、別のコードサイクルを下に持つ方法があります。 ... – RamonLion

0

私はPygameについてよく分かりませんが、私は(Pygameが基づいている)SDLを使っています。

あなたがSurface.blit()を使用する場合:link text

あなたが描くように、表面のどの部分を選択するには、オプションのarea引数を使用することができます。 アニメーションの一部であるすべてのイメージを1つのファイルに入れると、描画するイメージを選択できます。 「クリッピング」と呼ばれています。

ゲームの状態が更新される(必要に応じてスプライトの現在のイメージを変更する)ゲームループがあり、その状態を使用してスプライトを描画すると思います。ここで

+0

を含まスプライトシート全体を1つのスプライトセクションに分割します。スプライトの高さが150p、幅が100pxの場合、コードはどのように見えますか? – RamonLion

0

男は、あなたがしなければならない唯一のことはoffcourse

インポートpygameのダウンロードであり、他のすべてのものは、その後 型コードとスタッフを..........必要 それはあなたが作ることになるとsp

class .your class nam here. (pygame.sprite.Sprite): 
    def __init__(self): 
      pygame.sprite.Sprite.init(self) 
      self.image=pygame.image.load(your image and path) 
      self.rect=self.image.get_rect() 
      x=0 
      y=0 

      # any thing else is what you want like posistion and other variables 

    def update(self): 
      self.rect.move_ip((x,y)) 

とthats it !!!!しかしそれは終わりではない。もしあなたがこれを行うなら、スプライトを に移動させてください。

関連する問題