2016-12-19 3 views
0

アニメーションを作成しようとしていますが、対角線を描いて移動する方法がわかりません。Pythonプログラミング;アニメーションに診断線を描く

import pygame 
import sys 

WINDOW=pygame.display.set_mode((800,300)) 
RED=(255,0,0) 
WHITE=(255,255,255) 
CRIMSON=(220,20,60) 
BURGUNDY=(102,0,0) 
CERULEAN=(153,255,255) 
PINK=(255,102,102) 


FPS=100 
fpsClock=pygame.time.Clock() 

x=0 
pygame.display.set_caption("Animation") 
while True: 
    for event in pygame.event.get(): 
     if event.type=="QUIT": 
      pygame.quit() 
      sys.exit() 
    #Animation 
    WINDOW.fill(CERULEAN) 
    x=x+1 
    pygame.draw.circle(WINDOW, CRIMSON, (x,100),20) 
    pygame.draw.circle(WINDOW, BURGUNDY, (x, 92),5) 
    pygame.draw.line(WINDOW, PINK, (x,30),(x,70),3) 

    pygame.display.update() 
    fpsClock.tick(FPS) 

図は、尾が三角形の魚であると考えられています。私はもともとポリゴン関数を使用しようとしましたが、xを入力する方法とxを入力する場所がわからないので、三角形の3行を描画することにしました。

xを線やポリゴンの関数に入力する方法と場所について助けが必要です。サークルの場合と同様に、最初に置くだけですが、ラインやポリゴンの機能にはどうしたらいいでしょうか?

答えて

0

代わりにpygame.draw.aalines()を使用してください。

三角形を形成する点のリストを与えます。

あなたの問題はここにある:

  1. Xは、それがあまりにも速く増大し、無期限

  2. が増加しています。

このようにしたい場合は、魚を移動させるメソッドの移動で、Fishというオブジェクトを作成します。あなたはきれいなコードと最小限の混乱を持ってこのようにします。

古い魚を窓から取り除き、新しい位置に新しい魚を描く必要があります。だからあなたはその魚を自分の目的に保つべきです。

ユニバーサルポジションインジケータとして機能する魚の1つのポイントを選択します。例えば。鼻や塊の中心、または何か。次に、その位置を変更するだけで、あなたの移動方法は、それに応じて他の座標をすべて調整します。

編集:

これは一例です。私はそれを試していない、それをどのように完了したかを示すために一緒に置く。

これが明確になることを願っています。あなたは、私はその魚を一度その表面に描いて、次にこの表面を動かすのを見ます。

マウスを動かすと、魚が移動します。

これは遅くてちらつきがあるかもしれません。このコードにはあなたの問題があります。

新しい魚は、それぞれではなく4ピクセルごとに描く必要があります。

魚はオブジェクトの中にあり、異なるサイズの複数の魚を持つことができます。

各魚は、origsurf属性に置き換わる画面の部分を保持します。

移動する前に、前の位置の画面を返します。

あなたの魚は画面上で重なり合う可能性があります。

すべての作業を円滑にするには、もう少し作業を行う必要があります。

たとえば、表示境界を越えることに対する保護がありません。

私が言ったように、それは完全なコードではなく、それがどのように行われるかの例です。



class Fish: 
    def __init__ (self, pos=(0, 0), size=(60, 40), bgcolour=(255, 255, 255)): 
     self.pos = pos; self.size = size 
     # Use a little surface and draw your fish in it: 
     self.surf = surf = pygame.Surface(size) 
     surf.fill(bgcolour) 
     # Draw something: 
     pygame.draw.aalines(surf, (0, 0, 0), 1, [(0, 0), (0, size[1]), (size[0], size[1]/2)]) # Triangle 
     # Save how screen looks where fish will be: 
     self.origsurf = Surface(size) 
     sub = screen.subsurface((pos, size)) 
     self.origsurf.blit(sub) 
     # Show the fish: 
     screen.blit(surf, pos) 
     pygame.display.flip() 

    def move (self, newpos): 
     # Remove the fish from old position 
     screen.blit(self.origsurf, self.pos) 
     # Save how screen looks where fish will be: 
     self.origsurf = Surface(self.size) 
     sub = screen.subsurface((newpos, self.size)) 
     self.origsurf.blit(sub) 
     # Then show the fish on new location: 
     screen.blit(self.surf, newpos) 
     self.pos = newpos 
     pygame.display.flip() 

screen = pygame.display.set_mode() 
fish = Fish() 
FPS=100 
fpsClock=pygame.time.Clock() 
while True: 
    for event in pygame.event.get(): 
     if event.type=="QUIT": 
      pygame.quit() 
      sys.exit() 
     elif event.type==pygame.MOUSEMOTION: 
      fish.move(event.pos) 
    fpsClock.tick(FPS) 

+0

ああ、私はこれをどうやってやろうとしているのかと少し混乱していますが、ありがとうございます。 – mars

+0

@mars:私の編集を参照してください。それはいくつかのことを明確にすべきです。私は全体の魚を描かなかった。それがどのように行われているかを示す三角形です。 – Dalen

関連する問題