2016-12-19 4 views
0

Я довольно новичок в pygame и задавался вопросом, как я могу выбрать положение, где будет отображаться это текстовое поле, потому что сейчас он всегда отображает текстовое поле в том же положении. В идеале я бы назвал функцию так: "function("Hi, how are you", (x,y)), хотя я не уверен, как это реализовать.Как установить позицию отображения этого текстового поля?

(Я огляделся, и я не могу найти ответы на stackoverflow или reddit и ничего не нашел).

def textBox(Question, Position): 
    #screen.fill((255,255,255))# fill the screen w/ white 
    question = eztext.Input(maxlength=100, color=black, prompt=Question)#Create an input with max length 45. 
    clock = pygame.time.Clock() # create the pygame clock 
    run = True 
    while run == True: 
     clock.tick(30) # make sure the program is running at 30 fps 
     events = pygame.event.get() # events for txtbx 
     for event in events: 
      if event.type == QUIT: # close it if x button is pressed 
       return 
      if event.type == KEYDOWN: 
       if event.key == K_RETURN: 
        textBox.userResponse = question.value 
        run = False 
     screen.fill((255,255,255)) # clear the screen 
     question.update(events) # update txtbx 
     question.draw(screen) # blit txtbx on the sceen 
     pygame.display.flip() # refresh the display 
+2

Я вижу, что вы используете eztext. Я мало знаю об этом, но я знаю, что было бы полезно, если бы вы его явно не использовали. Я бы сам создал библиотеку текстовых полей (это очень легко, поверьте мне). Если вы затем используете screen.blit для размещения результирующей поверхности, вы можете указать координаты. Взгляните на документацию pygame.font! – Douglas

ответ

0

Вот очень простой способ создания текстового рендеринга функции:

def RenderText(Text, Font, Target, X, Y, R, G, B): # The target is your screen 
    """"Text , font, target surface, X, Y, 
    and color (RGB)""" 
    RenderedText = Font.render(Text, True, (R, G, B)) 
    Target.blit(RenderedText, (X, Y)) 

Чтобы использовать его: нагрузки шрифта:

default_font = pygame.font.SysFont(None, 30) 

См the wiki для настройки шрифта

Применение в цикле:

... # Loop Stuff 

# I assume that your screen is named `screen`   X Y Color in RGB 
RenderText('Hi, how are you?', default_font, screen, 50, 50, 255, 255, 255) 
# Experiment with all the above args 

Я не использую свой eztext класс, но попробовать этот метод, это довольно просто.

0

Получить source code of eztext, открытый в редакторе, и вы увидите, что вы можете сделать:

question = eztext.Input(x=10, y=20, ...) 

или

question.set_pos(10, 20) 

Исходный код:

class Input: 
    """ A text input for pygame apps """ 
    def __init__(self, **options): 
     """ Options: x, y, font, color, restricted, maxlength, prompt """ 
     self.options = Config(options, ['x', '0'], ['y', '0'], ['font', 'pygame.font.Font(None, 32)'], 
           ['color', '(0,0,0)'], ['restricted', '\'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\\\'()*+,-./:;<=>[email protected][\]^_`{|}~\''], 
           ['maxlength', '-1'], ['prompt', '\'\'']) 
     self.x = self.options.x; self.y = self.options.y 
     self.font = self.options.font 
     self.color = self.options.color 
     self.restricted = self.options.restricted 
     self.maxlength = self.options.maxlength 
     self.prompt = self.options.prompt; self.value = '' 
     self.shifted = False 

    def set_pos(self, x, y): 
     """ Set the position to x, y """ 
     self.x = x 
     self.y = y 

для визуализации текста

  • выбрать шрифт и размер

    font = pygame.font.Font(None, 40) 
    
  • визуализации текста как pygame.surface.Поверхность()

    text = font.render("Hello World", 1, (255,0,0)) 
    
  • дисплей в положении (10,20)

    surface.blit(text, (10, 20)) 
    

Вы можете использовать pygame.Rect() сохранять положение

  • создать прямоугольник с размером текста

    text_rect = text.get_rect() 
    
  • изменить положение

    text_rect.x = 10 
    text_rect.y = 20 
    
  • или

    text_rect.topleft = (10, 20) 
    
  • или центра экрана (или на другой поверхности кнопки, как)

    text_rect.cetner = screen.get_rect().center 
    
  • дисплей с помощью Rect

    surface.blit(text, text_rect) 
    
Смежные вопросы