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

时间:2017-04-03 16:21:41

标签: ruby libgosu

我尝试使用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它。我在这里做错了吗?或者,是否有另一种绘制子图像的方法?提前谢谢。

2 个答案:

答案 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都能正常工作。