MiniDemo: Классическая бегучка

Pixilang по русски
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

MiniDemo: Классическая бегучка

Post by Al_Rado »

Вот накропал один из алгоритмов вывода синусоидальной бегущей строки :) Не без глючков конечно, но работает!

// Al_Rado // MiniDemo "Бегучка" v.01 //
resize_pixi (0,320,240)
start_timer(0)
//font=load_pixi("font.gif") //при использовании внешнего фонта - "раскомментить"
font=get_pixi_font // при использовании внешнего фонта - "закомментить"
xfont=get_pixi_xsize(font)
yfont=get_pixi_ysize(font)
pixi_font (font)

x=get_pixi_xsize(0)/2 - 1
y=-get_pixi_ysize(0)/2
xx=x z=0 n=y p=0 i=0

text="Привет! Вот вам и HELLO WORLD! Pixilang - пиксельно-ориентированный язык программирования."
xtext=get_string_size (text)
frames=(xtext*xfont)
stroka=new_pixi(1,yfont,frames)

/////////////////////////
clear(ORANGE)
start:
e=( cos( get_timer( 0 ) / 4 ) / 2 + 128 ) / 2
e2=( sin( get_timer( 0 ) / 4 ) / 2 + 256 ) / 3
e3=( sin( get_timer( 0 ) / 4 ) / 2 + 256 ) / 3
print(text,x+1,y+1,BLACK)
effector( BLACK, 4, 1, get_pixi_xsize(0)/2-1, y+1, 2, yfont, 1)
effector( BLACK, 4, 2, get_pixi_xsize(0)/2-1, y+1, 2, yfont, 1)
print(text,x,y,SNEG)
fbox(-160,y,319,yfont,ORANGE)
frame (0)
nulo:
stroka[i+z] = get_dot (xx,n)
i+1 n+1
if n<=yfont {goto nulo}
clear(ORANGE)
n=y i=0

unu:
fpixi(stroka,x+p+(cos((get_timer(0)-32*p)/4)/8)/12,(cos((get_timer(0)-16*p)/4)/8+64)/6+40,2,e,p)
p+1
if p<frames {goto unu}
x=x-1
z=z+yfont
p=0
frame ()
goto start
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
NightRadio
Site Admin
Posts: 3955
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: MiniDemo: Классическая бегучка

Post by NightRadio »

Классно получилось!
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: MiniDemo: Классическая бегучка

Post by Al_Rado »

Спасибо. Теперь можно готовить шрифты :wink: ;)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: MiniDemo: Классическая бегучка

Post by goglus »

супер
я как раз думаю об том чтобы нарисовать новый фонт подгружаемый
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: подготовка шрифтов

Post by Al_Rado »

Как-то не хочется ручками отрисовывать уже имеющиеся шрифты... Я вот подумал о том как все это автоматизировать... Экспериментальный образец сделать получилось, но вот возникло пару вопросов:
1. Возможно ли сохранить подготовленный программой фонт (шрифт) на диск? По типу video_export_gif (filename,x,y,xsize,ysize), только не с экрана, а Pixi -контейнер?
2. Если пользоваться командой video_export_gif , gif-ка сохраняется, а прозрачность никак... Есть ли способ сохранить цвет - назначенный прозрачным?
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: MiniDemo: Классическая бегучка

Post by Al_Rado »

Сам шрифт http://slil.ru/25233888

// Al_Rado // MiniDemo "Бегучка" v.02 //
resize_pixi (0,320,240)
start_timer(0)
font=load_pixi("font_1.gif")
xfont=get_pixi_xsize(font)
yfont=get_pixi_ysize(font)
pixi_font (font)

x=get_pixi_xsize(0)/2 - 1
y=-get_pixi_ysize(0)/2
xx=x z=0 n=y p=0 i=0

text="Привет! Вот вам и HELLO WORLD! Pixilang - пиксельно-ориентированный язык программирования."
xtext=get_string_size (text)
frames=(xtext*xfont)
stroka=new_pixi(1,yfont,frames)

/////////////////////////
clear(ORANGE)
start:
e=( cos( get_timer( 0 ) / 6 ) / 4 + 256 ) / 2
e2=( sin( get_timer( 0 ) / 4 ) / 2 + 256 ) / 3
e3=( sin( get_timer( 0 ) / 2 ) / 2 + 128 ) / 3
print(text,x+2,y+2,BLACK)
effector( BLACK, 4, 1, get_pixi_xsize(0)/2-1, y+1, 2, yfont, 1)
effector( BLACK, 4, 2, get_pixi_xsize(0)/2-1, y+1, 2, yfont, 1)
print(text,x,y,SNEG)
fbox(-160,y,319,yfont,ORANGE)
frame (0)
nulo:
stroka[i+z] = get_dot (xx,n)
i+1 n+1
if n<=yfont {goto nulo}
clear(ORANGE)
n=y i=0

unu:
fpixi(stroka,x+p,(cos((get_timer(0)-8*p)/4)/8+64)/6+40,1,1,p)
p+1
if p<frames {goto unu}
x=x-1
z=z+yfont
p=0
frame (30)
goto start
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
NightRadio
Site Admin
Posts: 3955
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: MiniDemo: Классическая бегучка

Post by NightRadio »

Красивый шрифт получился!
На счет экспорта шрифта - я щас глянул, просто в языке еще не предусмотрена возможность экспорта в GIF с прозрачностью :)
Вот прога для сохранения GIF-шрифта без прозрачности:

Code: Select all

fp = get_pixi_font
set_screen( fp )
video_export_gif( "old_font.gif" )
f = 0
aa:
set_screen( fp, f )
frame(0)
f + 1
if f < get_pixi_frames( fp ) { go aa }
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: MiniDemo: Классическая бегучка

Post by goglus »

а в каком редакторе шрифт делал ? у меня его никто редактить не хочет
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Один из вариантов подготовки шрифта

Post by Al_Rado »

Вот мой изначальный алгоритм действий по созданию шрифта. Уверен, можно его заметно упростить.
1. Создал в редакторе CorelDraw набор из 256 символов, расположенных в порядке увеличения их ASCII-кодов, сверху вниз (сам файл тут http://slil.ru/25236848 Если в вашей системе не установлен именно тот фонт что использовался, то скорее всего CorelDraw предложит выбор, либо установить его, либо он будет заменен на другой)
2. Выделяю все символы, назначаю нужный фонт, сохраняю Gif-ку (у меня это 24 по ширине и 9216 (36*256) в высоту... можно и любой другой размер, но высчитать с той же пропорцией сторон... Либо придется корректировать высоту знакомест)
3. Запускаю программку, которая делает из одной статичной большой Gif-ки, анимированную с 256 кадрами:

resize_pixi(0,24,36,0)
a=load_pixi("4.gif") // имя файла полученного из CorelDraw
x=24 y=36 yfull=9216
n=0 c=0 i=0 xx=-x/2
Q = new_pixi(x,y,256)
unu:
Q = a
i+1
if i>(256*x*yfull) {finish}
goto unu
finish:
pixi_transp (Q,1,BLACK)
pixi_font (Q)
video_export_hq(1)
video_export_gif("font_4.gif") // имя файла для использования в Pixilang в качестве фонта
start:
if n>255 {clear (SNEG) frame() stop}
print("

!”#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_’abcdefghijklmnopqrstuvwxyz{|}__________________________________________________________________АБВГДЕЖЗИЙКЛМ

НОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя",xx,-y/2,SNEG)
frame(50) clear (BLACK)
xx-x
n+1
goto start

4. Открываю полученный файл в CorelPhotopaint и сохраняю Gif-ку с указанием прозрачного цвета (у меня это черный)

В общих чертах так... Как предложил NightRadio пока не пробовал

Goglus, чтобы его (Gif) подредактировать предлагаю использовать то, чем пользовался я - CorelPhotopaint. Первые 33 символа в нем пустые... В общем, они расположены так как в вышеприведенной проге. Перемещаешься по кадрам и редактируешь :)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: MiniDemo: Классическая бегучка

Post by goglus »

прикольно
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Чуть доработанный выриант создания шрифта

Post by Al_Rado »

Чуть доработанный выриант создания шрифта при помощи программ Corel Draw и Corel Photopaint:

1. Загружаем файл .cdr тут http://slil.ru/25239066 (в прошлом нашел ошибку :( )
Если в вашей системе не установлен именно тот фонт что использовался, то скорее всего CorelDraw предложит выбор, либо установить его, либо он будет заменен на другой.
2. Выделяем все символы, назначаем нужный фонт, сохранем Gif-ку (у меня это 24 по ширине и 9216 (36*256) в высоту... можно и любой другой размер, но высчитать с той же пропорцией сторон... Либо придется корректировать высоту знакомест и соответственно положение букв в них)
Еще одна особенность - если сохраняя оставить "галку" antialiasing, то впоследствии, шрифт будет сглаженно выглядеть, но менять цвет корректно не получится т.е. если у вас шрифт белого цвета, то и выводить его так print(text,x,y,SNEG). Если же сохраняя, снять "галку" antialiasing, то шрифт будет выглядеть несколько грубовато, но печатать его можно будет любым цветом.
3. Запускаем программку, которая делает из одной статичной большой Gif-ки, анимированную с 256 кадрами:

a=load_pixi("1.gif") // Ширина картинки = ширине шрифта, высота картинки = 256*высоту шрифта. Это файл подготовленный в Corel Draw
x=get_pixi_xsize (a)
yfull=get_pixi_ysize (a)
y=yfull/256
i=0 f=0
Q = new_pixi(x,y,256)

unu:
Q = a
i+1
if i<=(256*x*yfull) {goto unu}
set_screen( Q )
video_export_gif( "font.gif" ) // Имя файла для использования в Pixilang в качестве фонта
aa:
set_screen( Q, f )
frame(0)
f + 1
if f < get_pixi_frames( Q ) { go aa }

4. Открываем полученный файл в Corel Photopaint и сохраняем Gif-ку с указанием прозрачного цвета.
Т.е. в меню File выбираем Save As, пишем имя файла и жмем Save. Далее, в окошке отображающем кадры анимированного Gif выделяем все кадры (выделяем верхний кадр, пролистываем вниз, удерживая Shift выделяем самый нижний кадр - теперь они выделены синим цветом). Далее идем во вкладку Frame settings, в поле Transparency выбираем Image color и жмем кнопку Select color. В появившемся окошке выбираем "пипетку" и жмем ей на левый темный квадратик, затем кнопку OK. Теперь жмем Apply All и OK. Все фонт готов!
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: шрифты

Post by Al_Rado »

Goglus, действительно, после назначения шрифтам прозрачного фона они коцаютса :( и редактить их не выходит...
Вот тут лежат 4 шрифта подготовленные по-быстрому и их исходные файлы для Corel Draw c применением фонтов и в кривых http://slil.ru/25241165
(Шрифт_Arial.cdr, Шрифт_Arial_curves.cdr, Шрифт_Presentum.cdr, Шрифт_Presentum_curves.cdr, Шрифт_Stylo.cdr, Шрифт_Stylo_curves.cdr, Шрифт_TimesNewRoman.cdr, Шрифт_TimesNewRoman_curves.cdr, font16х16_Arial.gif, font16х16_TimesNewRoman.gif, font32х32_Arial.gif, font32х32_Presentum.gif, font32х32_Stylo.gif, font32х32_TimesNewRoman.gif - итого 14 файлов, порядка 600 Kb) Если есть желание, их можно довести до ума :)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: MiniDemo: Классическая бегучка v.03

Post by Al_Rado »

Подчистил баги :)

// Al_Rado // MiniDemo "Бегучка" v.03 // Исправлен баг с тенью, спрятана полоска пикселей :) Шрифты тут http://slil.ru/25241165
resize_pixi (0,320,240)
start_timer(0)
font=load_pixi("font32х32_Presentum.gif")
xfont=get_pixi_xsize(font)
yfont=get_pixi_ysize(font)+4
pixi_font (font)

x=get_pixi_xsize(0)/2 - 1
y=-get_pixi_ysize(0)/2
xx=x z=0 n=y p=0 i=0
text="Привет! Вот вам и HELLO WORLD! Pixilang - пиксельно-ориентированный язык программирования."
xtext=get_string_size (text)
frames=(xtext*xfont)
stroka=new_pixi(1,yfont,frames)
clear(ORANGE)

start:
print(text,x+2,y+2,BLACK)
effector( BLACK, 4, 1, get_pixi_xsize(0)/2-1, y+1, 2, yfont, 1)
effector( BLACK, 4, 2, get_pixi_xsize(0)/2-1, y+1, 2, yfont, 1)
print(text,x,y,SNEG)

nulo:
stroka[i+z] = get_dot (xx,n)
i+1 n+1
if n<=yfont {goto nulo}
clear(ORANGE)
n=y
i=0

unu:
fpixi(stroka,x+1+p,(cos((get_timer(0)-8*p)/4)/8+64)/6+40,1,1,p)
p+1
if p<frames {goto unu}
x=x-1
z=z+yfont
p=0
frame (30)
goto start
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
goglus
Posts: 122
Joined: Tue Dec 04, 2007 4:19 pm
Contact:

Re: MiniDemo: Классическая бегучка

Post by goglus »

а ведь можно написать прожку что бы шрифт перегоняла в тхт файл, где буква - пикси
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: MiniDemo: Классическая бегучка

Post by Al_Rado »

Вариант, только не вижу особого практического смысла... Редактировать не оч. удобно, проще после вывода из Corel Draw и перевода в многокадровый Gif открыть в граф. редакторе и подрисовать, а затем уже сохранять с прозрачным фоном. Хотя, если будет такая прожка, возможно и пригодится =)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
Post Reply