Вот и новый урок. Без лишних слов, приступим к созданию.
Создаем новый проект в Game Maker и добавляем туда два спрайта.
sprite0 - это тот самый спрайт, код которого мы будем получать. Загрузите в него какое нибудь небольшое изображение, размером не более 100х100 пикселей.
sprite1 - этот спрайт будет показывать что идет процесс получение цветового кода. Я сделал этот спрайт в виде текста "Идет запись".
Теперь создадим три объекта:
obj_orig, obj_copy, obj_text Для
obj_orig назначаем спрайт
sprite0, объекту
obj_text задаем
sprite1, а объект
obj_copy оставляем без спрайта.
Теперь приступаем к программированию.
У объекта
obj_orig, в событии
Create напишем следующий код:
Code
f=0 // переменная будет хранить в себе идентификатор файла, в который мы запишем цветовой код.
// следующие переменные отвечают за хранение цветового кода
red=0
green=0
blue=0
Далее создадим в том же объекте событие
Key Press <Enter>, в котором напишем две строки кода:
Code
instance_create(80,16,obj_text)
alarm[0]=10
instance_create(80,16,obj_text) - этой строкой мы создаем наш объект с текстом, чтобы обозначить, что идет запись.
После этого командой
alarm[0]=10 мы запускаем таймер, по истечению которого начнется запись.
И, наконец, создадим событие Alarm 0, это будет основное событие, содержащее в себе следующие строки кода:
Code
f=file_text_open_write('data.ini')
for (i=0; i<sprite_width; i+=1)
for (j=0; j<sprite_height; j+=1)
{
red=string(color_get_red(draw_getpixel(x+i,y+j)))
if string_length(red)=1
red='00'+red;
if string_length(red)=2
red='0'+red;
green=string(color_get_green(draw_getpixel(x+i,y+j)))
if string_length(green)=1
green='00'+green;
if string_length(green)=2
green='0'+green;
blue=string(color_get_blue(draw_getpixel(x+i,y+j)))
if string_length(blue)=1
blue='00'+blue;
if string_length(blue)=2
blue='0'+blue;
file_text_write_string(f,red+green+blue)
file_text_writeln(f)
}
file_text_close(f)
with object3 instance_destroy()
Разберем все по порядку.
Первым делом мы открываем файл, в который будет записан цветовой код
file_text_open_write('data.ini') Спрайт представляет собой прямоугольник, чтобы записать его цветовой код, нам нужно считать цвета с каждого пикселя изображения. Для этого запускаем два цикла, один вложен в другой.
for (i=0; i<sprite_width; i+=1)
for (j=0; j<sprite_height; j+=1) Ограничение на повторение цикла - это размеры спрайта, т.е. цикл будет повторяться пока не пройдет по всему спрайту.
Теперь начинаем считывание цветов.
red=string(color_get_red(draw_getpixel(x+i,y+j))) записывает в переменную red красную составляющую цвета.
draw_getpixel(x+i,y+j) определяет цвет пикселя,
color_get_red выделяет из этого цвета красную составляющую, а
string переводит полученный результат в строковый тип данных, чтобы можно было объединить все составляющие цвета и записать это значение в файл.
Для более удобной записи нужно сделать так, чтобы каждая составляющая цвета состояла из трех чисел. Если же она состоит из двух или из одного символа, то допишем перед этим значением нули. Для этого используем следующий код:
Code
if string_length(red)=1 // если количество символов равно 1
red='00'+red; // то дописываем два нуля
if string_length(red)=2
red='0'+red;
Аналогично делаем с остальными составляющими цвета, т.е. с
green и
blue После того как все три составляющие одного пикселя будут получены, то записываем из в наш файл:
file_text_write_string(f,red+green+blue) После чего записываем в файл переход на новую строку, чтобы код следующего пикселя был записан с новой строки.
file_text_writeln(f) После того как цикл завершиться, нужно закрыть наш файл для записи:
file_text_close(f) И удалить объект
obj_text with obj_tex tinstance_destroy()
Это даст нам понять, что запись в файл закончена.
С записью мы разобрались.
Создайте комнату и поместите туда объект
obj_orig.
Можем запустить программу, нажать на Enter и увидеть результат, открыв файл
data.ini Теперь сделаем считывание из файла и воспроизведение спрайта.
Для этого будет работать с объектом
obj_copy.
Создадим в нем событие
Create и запишем туда следующий код:
Code
f=0 // переменная будет хранить в себе идентификатор файла, в который мы записали цветовой код.
text='' // в эту переменную будут заноситься считываемые из файла строки
start=0 // эта переменная будет означать начало воспроизведения
//Следующие переменные будут хранить в себе составляющие цвета, считанные из файла
red=0
green=0
blue=0
Создадим событие Key Press <Space> и напишем туда одну строку:
start=1 - это означает начало процесса воспроизведения спрайта.
Теперь создадим событие Draw и напишем туда ещё немного кода:
Code
if start=1
{
f=file_text_open_read('data.ini')
for (i=0; i<obj_orig.sprite_width; i+=1)
for (j=0; j<obj_orig.sprite_height; j+=1)
{
text=file_text_read_string(f)
red=real(string_copy(text,1,3))
green=real(string_copy(text,4,3))
blue=real(string_copy(text,7,3) )
draw_point_color(x+i,y+j,make_color_rgb(red,green,blue))
file_text_readln(f)
}
file_text_close(f)
}
Итак, первая строка
if start=1 означает условие, при котором будет начато воспроизведение.
f=file_text_open_read('data.ini') - записываем в переменную f идентификатор файла, в котором храниться код спрайта.
Для воспроизведения нам так же как и для записи потребуется перебирать все пиксели изображения. Для этого запустим аналогичные два цикла:
for (i=0; i<obj_orig.sprite_width; i+=1)
for (j=0; j<obj_orig.sprite_height; j+=1) Обратите внимание, что предел берется исходя из размеров спрайта объекта
obj_orig.
В цикле начинается считывание и воспроизведение:
text=file_text_read_string(f) - записываем в переменную цветовой код первого символа.
Далее разбиваем этот код на составляющие по цветам:
red=real(string_copy(text,1,3))
green=real(string_copy(text,4,3))
blue=real(string_copy(text,7,3)) string_copy(text,n,m) - вырезает из текста text, m символов, начиная с позиции n. Таким образом мы выделяем три группы по три сомвола, каждая группа соответствует цветовой составляющей пикселя.
Функция
real переводит полученное текстовое значение, в число.
Получив все три составляющие цвета, мы можем воспроизвести пиксель. Для этого используем функцию
draw_point_color, которая рисует пиксель определенного цвета в заданных координатах.
draw_point_color(x+i,y+j,make_color_rgb(red,green,blue)) Функция
make_color_rgb определяет цвет исходя из трех его составляющих, которые хранятся у нас в соответствующих переменных.
Далее переходим на новую строку
file_text_readln(f) и цикл повторяется по новой. Когда цикл закончится необходимо закрыть наш файл
file_text_close(f) Теперь поместите
obj_copy в комнату, на достаточном расстоянии от
obj_orig и запустите программу. Если файл
data.ini пустой, то нажмите сначала Ентер, и по окончанию записи Пробел. Если же файл уже заполнен кодом, то сразу жмите Пробел и наслаждайтесь результатом.
Вот и всё, спасибо за внимание.
Как обычно, исходники по примеру: