Page 1 of 1

Дневник начинающего pixi-программиста

Posted: Fri Apr 16, 2010 8:31 pm
by altutov
Привет всему pixi-сообществу!
Решил написать на pixilang свою первую программу, для своего Dingoo A320 (хотя она без труда пойдет и на любой платформе).
Я пытаюсь реализовать оболочку для проссмотра комиксов и манги.
В первую очередь мой вьюер должен облегчить просмотр крупных изображений и свести до минимума нажатие клавиш при скроллировании, которое будет выполняться автоматически (возможно с расстановкой пауз и или различной скоротью прокрутки).
Во вторых основа любой манги -это текстовые диалоги персонажей, которые даже на экранах с маленкой диагональю не перекрывали бы друг-друга и всплывали взависимоти от времени, скроллировались, подстраивались под цветовое окружения фона, налагались разные шрифтовые спецэффекты.
Ну и менее важные второстепенные функции: добавление фоновой музыки, звуковых спецэффектов; возможность добавления графических спецэффктов (динамической анимации конкретных спрайтов, погодных условий (снег, дождь, облака, вода, молнии ...); акцентирование внимания путем масштабирования или затемнения определенных деталей); интерактивное взаимодействие с пользователем.

Сначала я хотел сделать простое описание для создания сценариев проссмотра комиксов. Но ручной ввод различных данных координатных точек и т.п. -процесс довльно нудный, так что в итоге я решил перепоручить его pixi-программе а не пользователю. Тут же столкнулся с проблемой дальнейшего выбора: создать кроме самого вьюера и отдельный редактор который будет экспортировать полученные данные во внешний файл (хотя возможно и сразу создавать готовую
исполняемую pixi-прогу). Или же может лучше сделать один универсальный комбайн и для проссмотра и для редактирования, усложнив тем самым весь общий код?
Небольшой набросочек по перемещению:

Code: Select all

file = "1.gif"
image=load_pixi(file)  //загрузить в pixi-контейнер данные манги
screen_xsize=get_pixi_xsize(0) //whith dingoo=320
screen_ysize=get_pixi_ysize(0) //hight dingoo=240
manga_xsize=get_pixi_xsize(image)
manga_ysize=get_pixi_xsize(image)
x=(-screen_xsize + manga_xsize)/2 //top-left (x-dot)-(320/2) //координаты x-точки верхнего левого экрана манги
y=(-screen_ysize + manga_ysize)/2 //top-left (y-dot)-(240/2) //координаты y-точки верхнего левого экрана манги

start:

move
pixi(image,x,y)
frame

go start
/////подпрограммы///
move: //реакция на клавиши курсора
button_down_action = {
  key = ghk
if ($key=264){y+5} //вместо 5 поставлю динамическую переменную изменения скорости перемещения
if (key=265){y-5}
if (key=266 & x<(manga_xsize-screen_xsize)/2){x+5} //ограничение при перемещении вправо за пределы манги
if (key=267 & x>-(manga_xsize-screen_xsize)/2){x-5} // то же в левую строну
}
handle_hard_keys( button_down_action, 0 )
frame
/* dingo_keys:
up=264 down=265 left=266 right=267
x=32 y=256[F1] a=257[F2] b=258[F3]
L=9[Tab] R=127 start=10[enter] select=27[Esc if "noesc(1)"]
hold=19 poweroff=none*/
ret
Когда определюсь со способом экспорта данных, добавлю сохранение по кноке текущих координатов и разные действия между ними.
Ну и всяких дополнительных функций например чтобы по нажатию кнопи 'start[Enter]' автоматически переместиться от левой сторны изображения до самого края в право (или до тех пор пока не нажмут другую клавишу) надо запустить подобную подпрограмму

Code: Select all

m1:
handle_hard_keys( {key = get_hard_keys}, 0)
if ($key=10 & x>-(manga_xsize/2-screen_xsize/2)) {x-1}
ret
Ну и эскпорт обработанных данных во внешний файл(или готовую программу) сделаю как то так:

Code: Select all

export_data="x1,y1,x2,y2,........xn,yn"
f=fopen ("dataname.txt", "w,t")
p = 0 
size = get_string_size( export_data )
while( p < size )
{
  fputc( text[ p ], f )
  p + 1
}
fclose( f )
Короче задумок и способов реализации данного проэкта очень много. Но все больше возникает вяких вопросов, ответ на который мне как новичку найти нелегко. Даже такой вопрос как выбор
удобного пользовательского интерфейса для малокнопочного и безмышиного девайса, может надолго поставить в тупик.
Так что в дальнейшем буду пытаться решать подобные задачи и по мере реализации програмки сюда отписываться.

P.S Рад выслушать здесь любые советы, мнения, даже самые негативные :-)

Re: Дневник начинающего pixi-программиста

Posted: Mon Apr 19, 2010 10:32 am
by Al_Rado
Проект весьма интересный =)
Относительно вопросов мои мысли такие:
выбор удобного пользовательского интерфейса - для начала вполне подойдет управление кнопками и help привязанный к какой-либо кнопке;
универсальный комбайн или две отдельные прожки, для редактирования и просмотра манга - тут можно руководствоваться разными соображениями. В конечном итоге для удобства пользователей целесообразно делать отдельно вьювер - маленький и быстрый. На время разработки можно конечно совмещать редактор и вьювер, но что-то мне подсказывает - две отдельных проги это самое правильное решение.

Re: Дневник начинающего pixi-программиста

Posted: Wed Apr 21, 2010 12:57 am
by altutov
Спасибо! Скорее всего так и поступлю.
Решил что для самого вьюера интерфейс не нужен вообще, разве что забанить кнопку паузы и добавить возможноть проссмора с любого файла а не по порядку. А в редакторе будет выплывающее меню созданное например элементами fbox и обычного/подсвеченного текста и выбором нужной опции с помощью стрелок. Смущает только как поступить если оно разрастется до черезмерных размеров, но других вариаций пока не знаю.

Re: Дневник начинающего pixi-программиста

Posted: Sat Apr 24, 2010 7:09 pm
by altutov
Потихоньку отлаживаю свой код, нашел несколько ошибочек а именно с ограниченимя по перемещеню по оси "y" вместо manga_ysize=get_pixi_xsize(image) нодо было написать
manga_ysize=get_pixi_ysize(image)
.
Ну и соответсвенно не прописал ограничение по той же координатной оси за рамки экспортируемого изображения в подпрограмме move: дописать следующие строчки
if ($key=264 & y<($manga_ysize-$screen_ysize)/2){y+1}
if ($key=265 & y>-(manga_ysize-screen_ysize)/2){y-1}

Re: Дневник начинающего pixi-программиста

Posted: Sun Apr 25, 2010 5:38 pm
by Al_Rado
Тут видимо вкралась опечатка:
не

Code: Select all

if ($key=264 & y<($manga_ysize-$screen_ysize)/2){y+1}
if ($key=265 & y>-(manga_ysize-screen_ysize)/2){y-1}
а

Code: Select all

if ($key=264 & y<(manga_ysize-screen_ysize)/2){y+1}
if ($key=265 & y>-(manga_ysize-screen_ysize)/2){y-1}

Re: Дневник начинающего pixi-программиста

Posted: Sat May 08, 2010 10:35 pm
by Ash1m
Вот часики от меня)
Понимаю, что не оптимизированы :pardon: , но работают же)))

Code: Select all

clocks:
clear(BLACK)
x = 0
y = 0
h = get_hours
m = get_minutes
s = get_seconds


//красный квадрат
fbox (x - 48, y - 48, 96, 96, #660000)
//шум
effector (0,128,0,x - 50,y - 50,104,100,0)

// отражение
fbox (-48, 53, 96,30, #660000)
effector (0,64,2,         x-48,53,       96,100,0)
effector (0,120,0,       x-48,53,      96,100,0)
dot (-48, -48, #000000)
dot (-48, -47, #000000)
dot (-47, -48, #000000)
dot (-46, -48, #000000)
dot (-47, -47, #000000)
dot (-48, -46, #000000)
dot (-48, -45, #000000)
dot (-45, -48, #000000)  

dot (47, -48, #000000)
dot (47, -47, #000000)
dot (46, -48, #000000)
dot (45, -48, #000000)
dot (46, -47, #000000)
dot (47, -46, #000000)
dot (47, -45, #000000)
dot (44, -48, #000000)  

dot (47, 47, #000000)
dot (47, 46, #000000)
dot (46, 47, #000000)
dot (45, 47, #000000)
dot (46, 46, #000000)
dot (47, 45, #000000)
dot (47, 44, #000000)
dot (44, 47, #000000)  

dot (-48, 47, #000000)
dot (-48, 46, #000000)
dot (-47, 47, #000000)
dot (-46, 47, #000000)
dot (-47, 46, #000000)
dot (-48, 45, #000000)
dot (-48, 44, #000000)
dot (-45, 47, #000000)  

dot (-48, 53, #000000)
dot (-48, 54, #000000)
dot (-47, 53, #000000)
dot (-46, 53, #000000)
dot (-47, 54, #000000)
dot (-48, 55, #000000)
dot (-48, 56, #000000)
dot (-45, 53, #000000) 

dot (47, 53, #000000)
dot (47, 54, #000000)
dot (46, 53, #000000)
dot (45, 53, #000000)
dot (46, 54, #000000)
dot (47, 55, #000000)
dot (47, 56, #000000)
dot (44, 53, #000000) 


///////////////////////////////////делители отражение
fbox (43, 96, 4, 4, #330000)
fbox (-2, 54, 4, 4, #770000)
fbox (-46, 96, 4, 4, #330000)
///////////////////////////////////делители отражение
f = fps
print("$h:$m:$s", 92,42,  SNEG)
print ("FPS = $fps", -157, 44, SNEG)
h=h * 256   h / 12   h - 64
m=m * 256   m / 60   m - 64
s=s * 256   s / 60   s - 64
line(x,y, ccos(h) /3, csin(h) /3,  SNEG)
line(x,y, ccos(m) /3, csin(m) /3,  SNEG)
line(x,y, ccos(s) /3, csin(s) /3,  RED)
//////////////////////// делители
fbox (-2, -46, 4, 4, RED)
fbox (43, -2, 4, 4, RED)
fbox (-2, 43, 4, 4, RED)
fbox (-46, -2, 4, 4, RED)
//////////////////////// делители



transp (100)
x = 0
y = 0
h = get_hours
m = get_minutes
s = get_seconds
h=h * 256   h / 12   h - 64
m=m * 256   m / 60   m - 64
s=s * 256   s / 60   s - 64
line(x,y+100, ccos(h) /3, -(csin(h) /3)+100,  SNEG)
line(x,y+100, ccos(m) /3, -(csin(m) /3)+100,  SNEG)
line(x,y+100, ccos(s) /3, -(csin(s) /3)+100,  RED)
transp (255)
frame(0)
go clocks

Re: Дневник начинающего pixi-программиста

Posted: Tue May 11, 2010 4:11 pm
by Al_Rado
Стильные часики )
Только частоту не выдает - ошибка тут

Code: Select all

f = fps
print("$h:$m:$s", 92,42,  SNEG)
print ("FPS = $fps", -157, 44, SNEG)
нужно так

Code: Select all

f = fps
print("$h:$m:$s", 92,42,  SNEG)
print ("FPS = $f", -157, 44, SNEG)
Да, и можно свою темку создать, а то как бы не в тему )

Re: Дневник начинающего pixi-программиста

Posted: Thu May 27, 2010 5:04 pm
by Ash1m
Спасибо)

А про отдельную тему: это какую?

Re: Дневник начинающего pixi-программиста

Posted: Fri May 28, 2010 10:15 am
by Al_Rado
Ну например, тема "Дневник пикси-программиста, который любит ассемблер" :)

Дневник начинающего pixi-ассемблерщика

Posted: Fri May 28, 2010 7:35 pm
by Ash1m
Я подумаю 8)

Re: Дневник начинающего pixi-программиста

Posted: Mon Jul 05, 2010 4:20 pm
by Several light
Вообщем одним словом надоели мне тексты из под Linux.

Code: Select all

infilename = new_string(999999)
if( file_dialog( infilename, "Открыть текст Linux", "txt", "gfd_in" ) )
{ 

outfilename = new_string(999999)
if( file_dialog( outfilename, "Сохранить текст Windows", "txt", "gfd_out" ) )
{

fi = fopen( infilename, "rb" )
fo = fopen( outfilename, "wb" )

while(feof(fi)<15){

byte=fgetc(fi)

if byte=10 {
fputc( 13, fo )
}
if feof(fi)<15{
fputc( byte, fo )
}
}

fclose( fo )
fclose( fi )

exit (0)
}
else{exit (0)}
}
else{exit (0)}
А если подробно (понимаю, что Pixilang писался не для этого) програмка перекапывает текстовый файл и заменяет в нём линуксовские символы перевода строки на виндовые.

Использование
Запускаем программу открывается окно "Открыть текст Linux" здесь выбираем текстовый файл котрый хотим преобразовать.
Далее открывается окно "Сохранить текст Windows" здесь выбираем только папку в котороую сохраняем текст после обработки, затем в гарфе "Name" указываете имя нового файла.

Примечание:
Диалоги открытия файла настоенны так что дают возможность открывать только файлы txt и не какие другие (также когда вбивается имя преобразованного файла к нему автоматически подставляется расширение txt). Всё это следствие моей обсалютной темноты в плане типов фалов используемых Linux для текстов. При желании это можно исправить.
В случае успешной конвертации или отмены пользоватетлем окно Pixilang закрывается без всяких вопросов.
Если исходный файл приличного объёма то окно Pixilang может ещё некотрое время висеть без всяких признаков жизни нопотом всёравно закроется(пока оконо весит и происходит конвертация).

Re: Дневник начинающего pixi-программиста

Posted: Mon Jul 05, 2010 9:00 pm
by J3d1
Прикольно, выглядит полезным )