0

マウスボタンを押したままマウスを動かすと長方形が表示されるなど、プログラムに描画ボックスを実装しようとしています。pygame rect オブジェクトでそれを実行しようとしていますが、これは私がこれまでに思いついたものです:

def mouseDown(self, button, pos):
    if button == 1:
        self.pressing = True
        self.start = pos

def mouseUp(self, button, pos):
    if button == 1:
        self.pressing = False

def mouseMotion(self, buttons, pos):
    if self.pressing == True:
        width = abs(self.start[0] - pos[0])
        height = abs(self.start[1] - pos[1])
        self.box = pygame.Rect(self.start, width, height)
        pygame.draw.rect(self.screen, (0,0,0), self.box, 1)

したがって、pos はクリックの座標であり、(0,0) は左上隅です。abs を使用して、マウスの移動量を比較してサイズを取得しようとしましたが、 abs は正の値しか返さないため、機能しません。

ボックス選択を可能にするためにこれを変更するにはどうすればよいでしょうか?

4

3 に答える 3

1

次のようなものを試してください:

def mouseMotion(self, buttons, pos):
    if self.pressing == True:
        diffx = self.start[0] - pos[0]
        diffy = self.start[1] - pos[1]
        width = abs(self.start[0] - pos[0])
        height = abs(self.start[1] - pos[1])
        if diffx >= 0:
            if diffy >= 0:
                self.box = pygame.Rect(self.start, width, height)
            else:
                self.box = pygame.Rect(self.start[0],pos[1], width, height)
        else:
            if diffy >= 0:
                self.box = pygame.Rect(pos[0],self.start[1], width, height)
            else:
                self.box = pygame.Rect(pos, width, height)
        pygame.draw.rect(self.screen, (0,0,0), self.box, 1)
于 2013-01-28T08:25:22.930 に答える
0

Calumsの非常に役立つ回答を足がかりとして使用して、私はこの解決策を思いつきました:

def mouseMotion(self, buttons, pos, rel):

    if self.pressing == True:
        diffx = self.start[0] - pos[0]
        diffy = self.start[1] - pos[1]            
        width = abs(self.start[0] - pos[0])
        height = abs(self.start[1] - pos[1])
        if diffx > 0 and diffy > 0:
            width = (width - (width * 2))
            height = (height - (height * 2))
        elif diffx > 0 and diffy <= 0:
            width = (width - (width * 2))
        elif diffx <= 0 and diffy > 0:
            height = (height - (height * 2))
        elif diffx < 0 and diffy < 0:
            pass

        dimensions = (width, height)
        self.box = pygame.Rect(self.start, dimensions)

        pygame.draw.rect(self.screen, (0,0,0), self.box, 1)
于 2013-01-31T06:05:06.310 に答える
0

あなたの場合に私がすることは、pygame マウス機能を使用することです。使用できるモジュールはpygame.mouse.get_rel、「描画領域」を最初にクリックしたときに実行され、もう一度マウス ボタンが上げられたときに、そのコードの 2 回目の呼び出しで 2 点間の距離が得られ、pygame.mouse が使用されます。 get_pos を使用すると、長方形の始点と終点を見つけて、pygame で簡単に描画できます。これを理解していただければ幸いです。コード例ができるかどうかを確認します。

于 2013-01-31T07:29:17.467 に答える