Em biết đoạn code này để in ra một đoạn text được định nghĩa font loại nào hay đại loại vậy nhưng em vẫn chưa hiểu về cách thức nó vận hành. Cảm ơn các bác
Em hỏi về cách mà đoạn code vận hành
Đoạn code trên được viết theo kiểu tuyến tính nó sẽ như thế này
text = "Dòng chữ bạn muốn in ra"
largeText = pygame.font.Font('freesansbold.tff', 115)
TextSurf = largeText.render(text, True, black)
TextRect = textSurf.get_rect()
TextRect.center = ((display_width/2), (display_height/2))
gameDisplay.blit(TextSurf, TextRect)
Nếu đau mắt thì nhìn cái này
Rồi, phần giải thích đây. Từng dòng một nhé.
Đầu tiên
text = "Dòng chữ bạn muốn in ra"
À, hình như hơi thừa. Tiếp dòng sau nào
largeText = pygame.font.Font('freesansbold.tff', 115)
Tạo ra đối tượng larrgeText
với font-family là freesansbold
và font-size là 115
.
Đây là một Font object. Bạn cũng thấy tên của nó đấy, largeText, là chữ bự. Chữ mà bạn đang đọc đây chỉ có 15 16 thôi, cái trên 115.
Và nhờ Font object này, bạn có thể tạo một đối Surface object với phương thức render.
Tiếp nào
TextSurf = largeText.render(text, True, black)
Nó tạo ra một Surface. Hãy hiểu đơn giản, giống như bạn đang làm công việc là viết lên một đoạn chữ là text
lên một tấm bảng con (bảng con đây không phải là màn hình nhé - lưu ý) với font-family và font-style theo largeText
.
Còn cái True
là cái parameter antialias
ấy, True False không quan trọng mấy, True thì nét chữ hình như nó mượt hơn thì phải, kiểu, nếu True, bạn sẽ nắn nót viết hơn. Còn black chính là parameter color
. Quyết định xem bạn dùng cây bút màu gì. Nó còn một parameter cuối nữa là background
. Nó sẽ chỉ định việc, cái nền bảng của bạn màu gì. Mặc định là None, None thì bạn lấy tấm bảng nền đen.
Rồi xong, dòng tiếp theo nào.
TextRect = textSurf.get_rect()
Trả về một Rect object. Nói chung là, mấy thứ biểu diễn trên màn hình của bạn luôn có 4 tọa độ, 4 tọa độ đó chính là 4 điểm của một hình chữ nhật. Và nội dung của bạn, chính là năm trong hình chữ nhật đó. Phương thức get_rect
này sẽ cho bạn tọa độ của cái bạn vừa render. Nó giống như việc, bạn canh xem, tọa độ của 4 góc cái bảng con của bạn là bao nhiêu ấy. Đương nhiên, bạn có thể quăng một số argument vào, mà thôi, cứ hiểu nôm na vậy trước cái đã.
Dòng tiếp nào
TextRect.center = ((display_width/2), (display_height/2))
Bạn biết điểm nằm giữa một hình chữ nhật là điểm nào không? Chắc là bạn cũng biết đó chính là trung điểm dài, trung điểm của chiều rộng, sau đó ta có 2 đường trung trực, kéo một phát là ta có giao điểm. Đó chính là điểm center đó. Mục đích của cái này, là cho chữ nó ra giữa.
Ở trên là ta lấy 4 điểm của cái bảng của bạn rồi. Ở chỗ này là bạn đang căn cho cái tâm của cái bảng, nó là cái tâm của cái bảng lớn mà bạn sẽ treo tấm bảng con lên (width với height ở đây là dài rộng của cái bảng lớn ấy).
gameDisplay.blit(TextSurf, TextRect)
blit là gì nếu chưa biết, đọc lại bài đầu, mình nhớ nó có ghi.
Bảng lớn -> treo bảng con TextSurf
với tọa độ là TextRect
cảm ơn bác rất nhiều rất hữu ích giờ e hiểu đôi chút rồi cảm ơn bác lần nữa