Как нарисовать образ с помощью библиотеки Ruby Gosu?

Я пытаюсь нарисовать на экране изображение Image экземпляр, использующий этот метод subimage. Кажется, это довольно просто сделать, но когда я вызываю функцию, она возвращает 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 назначается с нулем и, следовательно, не может .draw Это. Я что-то здесь не так делаю? Или есть другой способ нарисовать образ? Заранее спасибо.

2 ответа

Решение

Вы можете использовать только .subimage() если ваше изображение 1024 х 1024 или меньше. Я не уверен, что есть обходной путь, но, поскольку этот предел обусловлен ограничениями памяти, вам, вероятно, было бы лучше просто разделить изображение на несколько изображений размером 512 x 512 или 1024 x 1024.

Из Госу документов:

Предостережения:

  • Подизображение работает, только если изображение живет на одной текстуре. Если изображение было слишком большим и его нужно было разделить на несколько текстур 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;

Хорошая новость: изображение Image# работает независимо от размера изображения в Gosu 0.12.0 и более поздних версиях.

Другие вопросы по тегам