Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Ruby Gosu库绘制子图像?_Ruby_Libgosu - Fatal编程技术网

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

如何使用Ruby Gosu库绘制子图像?,ruby,libgosu,Ruby,Libgosu,我试图在屏幕上绘制图像实例的子图像。这样做似乎很简单,但当我调用函数时,它返回一个NilClass,而不是一个新的图像 主图像定义为: @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 recta

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

主图像定义为:

@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
赋值为空,因此无法
。绘制它。我做错什么了吗?或者,还有其他方法来绘制子图像吗?提前感谢。

如果图像为1024 x 1024或更小,则只能使用
.subimage()
。我不确定是否有解决办法,但因为这个限制是受内存限制的启发,所以您最好将图像拆分为多个大小为512 x 512或1024 x 1024的图像

从gosu文档:

注意事项:

  • 仅当图像位于单个纹理上时,子图像才起作用。如果图像太大,必须分割成几个OpenGL纹理,子图像将返回nil(与#gl#u 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及更高版本中,无论图像大小如何,图像#子图像都可以工作