我尝试使用this subimage method在屏幕上绘制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
它。我在这里做错了吗?或者,是否有另一种绘制子图像的方法?提前谢谢。
答案 0 :(得分:1)
如果您的图片是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;
答案 1 :(得分:0)
好消息,无论Gosu 0.12.0及更高版本中的图像尺寸如何,Image#subimage都能正常工作。