1

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

主图像定义为:

@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被分配了一个空值,因此不能.draw。我在这里做错了吗?或者,还有另一种绘制子图像的方法吗?提前致谢。

4

2 回答 2

1

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

来自 gosu 文档:

注意事项:

  • subimage 仅在图像位于单个纹理上时才有效。如果图像太大并且必须分割成几个 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;
于 2017-04-03T16:48:48.003 回答
0

好消息,在 Gosu 0.12.0 及更高版本中,无论图像大小如何,Image#subimage 都能正常工作。

于 2017-04-23T20:53:45.690 回答