【求助】有大佬知道怎么让获取的游戏截图中不显示部分物体吗?
godot吧
全部回复
仅看楼主
level 7
no2nagisa 楼主
我的游戏里需要一个功能,把整个游戏画面截图后作为一个texture赋给一个Sprite。但是,我希望我的游戏角色不要显示在这个截图里。
我尝试这样做:
$Character.visible = false
var texture = ImageTexture.new()
var screenshot = get_viewport().get_texture().get_data()
screenshot.flip_y()
texture.create_from_image(screenshot)
$Character.visible = true
然而,这样角色依然会显示在截图中,推测可能是因为在同一帧里,角色隐藏后的画面尚未被渲染到屏幕。
如果在截图之前加上两句 yield(get_tree(), "idle_frame") 就可以获得没有角色的截图,但游戏画面中的角色就会因此而闪烁一下,因为它被隐藏了2帧之久。
如果把角色以外的画面放到一个单独的viewport中,似乎可以解决这个问题,只要获取这个单独viewport的纹理就行了。然而,不知为何,简单的几何形图像放进viewport就会出现严重的锯齿,完全不能接受……
所以就想请问下,有没有大佬知道其他实现方法呢?[乖]
比如能不能把画面冻结2帧,期间不进行新的渲染
或是在内存里把角色去掉进行截图之类的
2020年04月23日 11点04分 1
吧务
level 14
[吐舌]只需要在隐藏角色的那句代码的下一行
加上一句VisualServer.force_draw(false)就行了,如图所示:
[勉强]图中的代码就是直接复制1楼的代码,只增加了箭头指向的那一行代码
2020年04月23日 11点04分 2
666666 超级感谢! [惊讶]
2020年04月23日 12点04分
@no2nagisa [滑稽]强制刷新画面,force_draw()可以在同一帧内强制渲染画面,就可以获取隐藏角色后的画面了
2020年04月23日 14点04分
@人类的大敌 [酷]就很完美了
2020年04月23日 14点04分
@人类的大敌 我使用force_draw的时候,_draw()函数不是立即执行的,而是在当前帧最后执行,有什么办法解决么
2020年11月18日 05点11分
1