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就会出现严重的锯齿,完全不能接受……
所以就想请问下,有没有大佬知道其他实现方法呢?![[乖]](/static/emoticons/u4e56.png)
比如能不能把画面冻结2帧,期间不进行新的渲染
或是在内存里把角色去掉进行截图之类的
2020年04月23日 11点04分
1
我尝试这样做:
$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帧,期间不进行新的渲染
或是在内存里把角色去掉进行截图之类的
