2017-07-18 4 views
0

私は画面上で矩形を移動したいと思っています。垂直に言うと、動的に変更してrectの位置を表す数値をアタッチしています。ヘルプは私のプロジェクト全体に感謝しています。長方形の位置に関連する数値をPygameに表示する方法は?

+1

もちろん可能ですが、詳細を追加してください。ちょうど "rectの位置を表す"何番なのでしょうか?たとえばその頂点のy座標ですか?どのくらいの頻度で矩形を移動させるのですか?非常に速いので、視聴者は急激に変化する数字を読み取ることができません。フォントには何らかの制限がありますか?固定幅フォントでは、特にテキストが変更された場合など、急激に変化する数値を処理する方が効果的です。最後に、他に何を研究し、何を試しましたか?まったくどこにいるのですか?パイゲーム画面にテキストを表示する方法は分かりますか? –

+0

私はテキストを表示する方法を知っています。私は四角形の頂点にアタッチしていますが、フォントはテキストオブジェクトなので、値を動的に変更することはできません。私はマウスでrectをドラッグするたびにpygame.mousemotionのrect.yの位置を表示する必要があります。私は何とか返されたyの値を文字列に変換しなければならないと思いますか? – Bartnick81

答えて

1

テキスト・表面たびRECT変化の位置を再描画(例えばMOUSEMOTIONイベントが発生した場合)、その後、現在の矩形の位置でそれをブリットする必要があります。

import sys 
import pygame as pg 


def main(): 
    screen = pg.display.set_mode((640, 480)) 
    clock = pg.time.Clock() 
    font = pg.font.Font(None, 32) 
    font_color = (100, 200, 150) 
    rect = pg.Rect(20, 200, 80, 50) 
    txt_surf = font.render(str(rect.topleft), True, font_color) 
    selected = None 
    done = False 

    while not done: 
     for event in pg.event.get(): 
      if event.type == pg.QUIT: 
       done = True 
      elif event.type == pg.MOUSEBUTTONDOWN: 
       if selected: 
        selected = None 
       elif rect.collidepoint(event.pos): 
        selected = rect 
      elif event.type == pg.MOUSEMOTION: 
       if selected: 
        selected.center = event.pos 
        txt_surf = font.render(str(rect.topleft), True, font_color) 

     screen.fill((30, 30, 30)) 
     pg.draw.rect(screen, font_color, rect, 2) 
     screen.blit(txt_surf, (rect.right+10, rect.top)) 

     pg.display.flip() 
     clock.tick(30) 


if __name__ == '__main__': 
    pg.init() 
    main() 
    pg.quit() 
    sys.exit() 
+0

いつものように完璧な答えは、まだそれを実装しようとしている、ありがとう! – Bartnick81

1

以下は、マウスの左ボタンが押されている間のマウスカーソルの位置を示すコード例です。この場合、「動的に変化する番号」はマウスのカーソル位置です。

あなたがコードで見たように、私は等幅フォント(Windowsの場合宅配便新)ので、数の任意の先頭のスペースを使用しnumbers--のサイズは変更されませんスペースで数12は、同じ量のを取り番号199と同様に画面の不動産になります。 timer.tick(60)ステートメントでメインループを1回ずつ約60回実行すると、文字列が希望の数値から作成され、textというサーフェスが文字列から構築され、サーフェスが画面にブリットされます。

状況にこれを適用する方法は明確ですか?

"""A pygame "game" that shows the position of the mouse cursor while 
the left mouse button is pressed.""" 

import pygame 

pygame.init() 
screen = pygame.display.set_mode([800,600]) 
pygame.display.set_caption("Show the Position of the Mouse while Dragging") 
BLACK= (0, 0, 0) 
RED = (255, 0, 0) 
timer = pygame.time.Clock() 
font = pygame.font.SysFont("Courier New", 24) 
mouse_is_down = False 

keep_going = True 
while keep_going: 
    # Handle events. 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      keep_going = False 
     if event.type == pygame.MOUSEBUTTONDOWN: 
      if pygame.mouse.get_pressed()[0]: # Left mouse button 
       mouse_is_down = True 
     if event.type == pygame.MOUSEBUTTONUP: 
      if not pygame.mouse.get_pressed()[0]: # Left mouse button 
       mouse_is_down = False 

    # Draw the screen. 
    screen.fill(BLACK)  
    if mouse_is_down: 
     position = pygame.mouse.get_pos() 
     position_string = 'Mouse position: ({:3d}, {:3d})'.format(*position) 
    else: 
     position_string = '' 

    text = font.render(position_string, True, RED) 
    text_rect = text.get_rect() 
    text_rect.right = screen.get_rect().right - 10 
    text_rect.y = 10 
    screen.blit(text, text_rect) 
    pygame.display.update() 
    timer.tick(60) 

pygame.quit() 
+0

もう一つの答えは私の問題にもっと適していますが、とにかくおかげさまです! – Bartnick81

関連する問題