如何使用Ruby Gosu库绘制子图像



我正在尝试使用此子图像方法在屏幕上绘制Image实例的子图像。这样做似乎很简单,但是当我调用该函数时,它会返回一个NilClass而不是一个新的Image

主图像定义为:

@bg_img = Gosu::Image.new("res/space1.jpg") # dimensions 1080 x 1920

当我运行@bg_img.draw(0,0,0)时,它会正常绘制图像,但是当我尝试将其转换为新图像时:

test = @bg_img.subimage(0,0, 100, 100) # from (0,0), get rectangle of 100x100 dimension

变量 test 分配了一个 null,因此无法.draw它。我在这里做错了什么吗?或者,有没有另一种方法来绘制子图像?提前谢谢。

仅当图像为 1024 x 1024 或更小时,才能使用.subimage()。我不确定是否有解决方法,但由于此限制受到内存限制的启发,因此最好将图像拆分为大小为 512 x 512 或 1024 x 1024 的多个图像。

来自 gosu 文档:

警告:

  • 仅当图像位于单个纹理上时,子图像才有效。如果图像太大并且必须拆分为多个 OpenGL 纹理,则子图像将返回 nil(与 #gl_tex_info 相同(。

从源代码:

//! Returns the maximum size of an texture that will be allocated
//! internally by Gosu.
//! Useful when extending Gosu using OpenGL.
const unsigned MAX_TEXTURE_SIZE = 1024;

好消息是,无论 Gosu 0.12.0 及更高版本中的图像大小如何,Image#subimage 都可以工作。

最新更新