0

以前に投稿したことは知っていますが、今回はコードのすべての基本を実際にメッシュ化して、クラスについての理解を深めたいと思っています。私はクラスに非常に不慣れなので、これの多くは本当にばかげたものになるでしょう。これが私のコードです

class Player(pygame.sprite.Sprite):
    def __init__(self):
        global player
        pygame.sprite.Sprite.__init__(self)
        self.pos=(350,200)
        self.image=pygame.image.load("arrowtest.png").convert()
        self.rect=self.image.get_rect()
        screen=pygame.display.get_surface()
        self.area=screen.get_rect()
        self.speed=10
        self.state="still"
        self.reinit()

私は持っています

player = Player()

メインループの開始時

そして私のブリットは

screen.blit(player.image, player.pos)

その問題を修正しましたが、今の私の問題は、関数を使用してスプライトを角度付けする部分に関してです。私のプレーヤークラスではこれです

def angleplayer(self):
    mouse_pos=pygame.mouse.get_pos()
    dx=mouse_pos[0]-player_x
    dy=mouse_pos[1]-player_y
    rads=math.atan2(-dy, dx)
    rads %= 2*pi
    angle = math.degrees(rads)
    print angle
    rot_player.image=pygame.transform.rotate(player.image, angle-90)

しかし、私がこれを使おうとすると、例えば

if event.type == pygame.KEYDOWN:
        angleplayer()

angleplayerが定義されていないと表示されます。

答えはかなり簡単だと思いますが、楽しみにしています。

ありがとうございました

4

1 に答える 1

1

angleplayerこれは、現在のスコープに関数がないことを意味します。

angleplayer関数はクラスの一部であるためPlayer、そのクラスのインスタンスを介して呼び出す必要があります。

if event.type == pygame.KEYDOWN:
    player.angleplayer()

(完全なコードを表示していません。ここからアクセスできると思いplayerます。)

于 2013-02-11T08:54:06.827 に答える