-2

マウスがオブジェクトのrectと衝突しているかどうかを確認し、マウスボタンが押されているかどうかを確認して、オブジェクトを移動しようとしています。

これが私のコードです:

class Unit(pygame.sprite.Sprite):
    def __init__(self, display,):
    pygame.sprite.Sprite.__init__(self,)

    self.master_image = pygame.Surface((50, 100))
    self.master_image.fill((000,255,000))
    self.image = self.master_image
    self.rect = self.image.get_rect()
    self.rect.centerx = 500
    self.rect.centery = 500

def move(self):
    mouse = pygame.Surface((5, 5))
    mouse_rect = mouse.get_rect()
    (mouseX, mouseY) = pygame.mouse.get_pos()
    mouse_rect.centerx = mouseX
    mouse_rect.centery = mouseY

    for event in pygame.event.get():
        if event.type == pygame.MOUSEBUTTONDOWN:
            if mouse_rect.colliderect(self.rect):
                self.rect.centerx = mouseX
                self.rect.centery = mouseY
                print "move"

def update(self,):
    self.move()

これは機能しますが、マウスのすべてのボタンをスパムする必要があり、最終的にpygameはマウスイベントを取得し、オブジェクトは意図したとおりに移動しますが、ほんの一瞬だけ停止します。

私の目標は、マウスのボタンをクリックすることです。マウスがボックスに衝突している場合、マウスボタンがマウスのxとyに下がっている間、ボックスは移動します。

はっきりしているといいのですが。

助けてくれてありがとう

平和!

これが私がそれを機能させる方法です:

#unit sprite class
class Unit(pygame.sprite.Sprite):
   def __init__(self, display,):
      pygame.sprite.Sprite.__init__(self,)

      self.master_image = pygame.Surface((50, 100))
      self.master_image.fill((000,255,000))
      self.image = self.master_image
      self.rect = self.image.get_rect()
      self.rect.centerx = 500
      self.rect.centery = 500

      #mouse stuff
      self.mouse = pygame.Surface((5, 5))
      self.mouse_rect = self.mouse.get_rect()
      (self.mouse_rect.centerx , self.mouse_rect.centery) = pygame.mouse.get_pos()


  def move(self):
      if pygame.MOUSEBUTTONDOWN:#check for mouse button down
          (button1, button2, button3,) = pygame.mouse.get_pressed()#get button pressed

          if button1 and self.mouse_rect.colliderect(self.rect):#check for collision between object and mouse
              (self.rect.centerx, self.rect.centery) = pygame.mouse.get_pos()#set object POS to mouse POS

  def update(self,):
      (self.mouse_rect.centerx , self.mouse_rect.centery) = pygame.mouse.get_pos()#update mouse RECT
      self.move()#check movement

助けてくれてありがとう!

平和!

4

1 に答える 1

2

MOUSEBUTTONDOWNイベントは、最初に押されたときに発生しますが、その後押したときに発生しません。ユーザーがいつ押すのをやめるかを決定するには、MOUSEBUTTONUPイベントをチェックする必要があります。

または、pygame.mouse.get_pressed()を使用して、マウスボタンの現在の状態を問い合わせることもできます。マウス機能のドキュメントはこちらです。

于 2012-06-22T00:59:19.280 に答える