2016-04-23 9 views
0

私は、プレーヤーplayer2の内部でplayer1で作られたself.rect.xを使用しようとしています。このコードは、プレーヤー2がプレーヤー1を追うようにするためのものです。以下は、私の現在のコードがどのように見えるかを大まかにまとめたものです。クラスのpygame.rectを別のクラスの中で使用する

class player1 (pygame.sprite.Sprite) 

    def __init__ (self,x,y): 

    #creates img, rect, x and y 



class player 2 (pyagme.sprite.Sprite) 

    def __init__ (self,x,y) 

    #repeats process 

    def chase (self): 

    self.rect.x += self.change_x 
    self.rect.y += self.change_y 

    dx = self.rect.x - player1.rect.x 
    dy = self.rect.y - player1.rect.y 
    dist = math.hypot(dx,dy) 
    dx = dx/dist 
    dy = dy/dist 

    self.rect.x += dx * self.change_x 
    self.rect.y += dx * self.change_y 

答えて

0

あなたは非常に解決策に近いです。あなたが必要とするのは、player2内の、player1への参照です。

class player2 (pyagme.sprite.Sprite) 

    def __init__ (self, x, y, chased_object) 
     self.chased_object = chased_object 

    def chase (self): 
    # same code as before, but replace all "player1" by "self.chased_object" 

このようなあなたのクラスをインスタンス化:

the_player_1 = player1(50, 100) 
the_player_2 = player2(200, 50, the_player_1) 

するコードをわかりやすくするために、参照変数「chased_object」ではなく「chased_player」という名前を付けすることが重要であり、事実を表現するためにplayer2ができること「rect」属性を持つものはすべて追跡します。それはプレーヤー、モンスター、宇宙船、バナナ、かもしれません...

+0

返信ありがとう!私は変更を追加して動作するように見えましたが、残念ながら私は動作するように追跡コードを取得できませんでした。だから代わりに、私はgame2ループに 'global player1'を入れて、player2のループでそれを使用できるようにしてから、player1のxとyよりも大きいか小さいかによって+と--player2s xとyを使用することにしました。 –

+0

OK。たぶんあなたは、最初の試行でチェイスコードがうまくいかなかった理由(または別の質問)を投稿することができます。私たちは助けてくれるかも'global player1'を追加することは確実に動作しますが、Pythonコーディングではベストプラクティスではありません。 –

関連する問題