大佬教程收集整理的这篇文章主要介绍了使矩形对象可滚动,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在将国际象棋移动日志绘制到矩形对象上 - 但是在某个点之后,文本从底部脱离并被切断。我想知道是否可以使矩形表面滚动,以便我可以看到整个移动日志。
这是绘制移动日志的代码:
这就是我的意思
正如您在第 21 次移动后所看到的 - 日志离开移动日志区域的底部
def drawMoveLog(screen,gs,Font): #draws move log
moveLogArea = p.Rect(BOARD_WIDTH,MOVE_LOG_PANEL_WIDTH,MOVE_LOG_PANEL_HEIGHT)
p.draw.rect(screen,p.color("gray"),moveLogArea)
moveLog = gs.moveLog
moveText = []
for i in range(0,len(moveLog),2): #go through move log 2 at a time
moveString = "|| " + str(i//2 + 1) + ". " + str(moveLog[i]) + " "# to keep move 2 and 2 the same
if i + 1 < len(moveLog): # before i conTinue want to make sure black moved
moveString += str(moveLog[i + 1]) + " "
moveText.append(moveString)
movesPerRow = 1
padding = 5
linespacing = 4
textY = padding
#make 3 moves go in 1 line
for i in range(0,len(moveText),movesPerRow):
text = ""
for j in range (movesPerRow):
if i + j < len(moveText):
text += moveText[i+j]
textObject = Font.render(text,True,p.color('Black'))
textLOCATIOn = moveLogArea.move(padding,textY)
screen.blit(textObject,textLOCATIOn)
textY += textObject.get_height() + linespacing
创建一个函数,以足够高的透明 pygame.Surface
呈现文本以包含全文。要创建一个透明的 Surface 对象,您必须设置标志 pygame.SRCALPHA
:
def createMoveLog(gs,font): #draws move log
moveLog = gs.moveLog
moveText = []
for i in range(0,len(moveLog),2): #go through move log 2 at a time
moveString = "|| " + str(i//2 + 1) + ". " + str(moveLog[i]) + " "# to keep move 2 and 2 the same
if i + 1 < len(moveLog): # before i conTinue want to make sure black moved
moveString += str(moveLog[i + 1]) + " "
moveText.append(moveString)
movesPerRow = 1
padding = 5
linespacing = 4
no_of_lines = (len(moveText)+movesPerRow-1) // movesPerRow
line_height = font.get_height() + linespacing
text_size = (MOVE_LOG_PANEL_WIDTH,no_of_lines * line_height + 2*padding)
text_surface = p.Surface(text_size,p.SRCALPHA)
textY = padding
#make 3 moves go in 1 line
for i in range(0,len(moveText),movesPerRow):
text = ""
for j in range (movesPerRow):
if i + j < len(moveText):
text += moveText[i+j]
textObject = font.render(text,True,p.Color('Black'))
text_surface.blit(textObject,(0,textY))
textY += textObject.get_height() + linespacing
return text_surface
渲染全文并使用 pygame.Surface.subsurface
创建一个新表面,该表面引用高度为 @H_490_18@mOVE_LOG_PANEL_HEIGHT 的矩形区域。
scroll 参数是 [0.0,1.0] 范围内的一个值,用于线性滚动文本。当滚动为 0.0 时,显示文本的顶部,当滚动为 1.0 时,显示文本的底部:
def drawMoveLog(screen,gs,font,scroll): #draws move log
moveLogArea = p.Rect(BOARD_WIDTH,MOVE_LOG_PANEL_WIDTH,MOVE_LOG_PANEL_HEIGHT)
p.draw.rect(screen,p.Color("gray"),moveLogArea)
text_surface = createMoveLog(gs,font)
dy = text_surface.get_height() - MOVE_LOG_PANEL_HEIGHT
if Dy > 0:
text_offset = int(dy * scroll)
test_rect = text_surface.get_rect()
sub_rect = p.Rect(0,text_offset,MOVE_LOG_PANEL_HEIGHT)
sub_text_surface = text_surface.subsurface(sub_rect)
screen.blit(sub_text_surface,moveLogArea)
else:
screen.blit(text_surface,moveLogArea)
对比
的渲染@H_490_18@moveLog = ["d3","Nh6","e3","Rg8","f3","b6","g3","a5","h3","Ra6","c3","g6","b3","a4"]
带有 scroll = 0.0
和 scroll = 1.0
。
以上是大佬教程为你收集整理的使矩形对象可滚动全部内容,希望文章能够帮你解决使矩形对象可滚动所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。