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

Pixilang по русски
Post Reply
altutov
Posts: 5
Joined: Thu Apr 08, 2010 1:33 am

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

Post by altutov » Fri Apr 16, 2010 8:31 pm

Привет всему 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 Рад выслушать здесь любые советы, мнения, даже самые негативные :-)

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

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

Post by Al_Rado » Mon Apr 19, 2010 10:32 am

Проект весьма интересный =)
Относительно вопросов мои мысли такие:
выбор удобного пользовательского интерфейса - для начала вполне подойдет управление кнопками и help привязанный к какой-либо кнопке;
универсальный комбайн или две отдельные прожки, для редактирования и просмотра манга - тут можно руководствоваться разными соображениями. В конечном итоге для удобства пользователей целесообразно делать отдельно вьювер - маленький и быстрый. На время разработки можно конечно совмещать редактор и вьювер, но что-то мне подсказывает - две отдельных проги это самое правильное решение.
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

altutov
Posts: 5
Joined: Thu Apr 08, 2010 1:33 am

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

Post by altutov » Wed Apr 21, 2010 12:57 am

Спасибо! Скорее всего так и поступлю.
Решил что для самого вьюера интерфейс не нужен вообще, разве что забанить кнопку паузы и добавить возможноть проссмора с любого файла а не по порядку. А в редакторе будет выплывающее меню созданное например элементами fbox и обычного/подсвеченного текста и выбором нужной опции с помощью стрелок. Смущает только как поступить если оно разрастется до черезмерных размеров, но других вариаций пока не знаю.

altutov
Posts: 5
Joined: Thu Apr 08, 2010 1:33 am

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

Post by altutov » Sat Apr 24, 2010 7:09 pm

Потихоньку отлаживаю свой код, нашел несколько ошибочек а именно с ограниченимя по перемещеню по оси "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}

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

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

Post by Al_Rado » Sun Apr 25, 2010 5:38 pm

Тут видимо вкралась опечатка:
не

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}
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
Ash1m
Posts: 11
Joined: Sat May 08, 2010 10:23 pm
Contact:

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

Post by Ash1m » Sat May 08, 2010 10:35 pm

Вот часики от меня)
Понимаю, что не оптимизированы :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
I love assembler
Журнал ЮЗЕР

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

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

Post by Al_Rado » Tue May 11, 2010 4:11 pm

Стильные часики )
Только частоту не выдает - ошибка тут

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)
Да, и можно свою темку создать, а то как бы не в тему )
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
Ash1m
Posts: 11
Joined: Sat May 08, 2010 10:23 pm
Contact:

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

Post by Ash1m » Thu May 27, 2010 5:04 pm

Спасибо)

А про отдельную тему: это какую?
I love assembler
Журнал ЮЗЕР

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

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

Post by Al_Rado » Fri May 28, 2010 10:15 am

Ну например, тема "Дневник пикси-программиста, который любит ассемблер" :)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
Ash1m
Posts: 11
Joined: Sat May 08, 2010 10:23 pm
Contact:

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

Post by Ash1m » Fri May 28, 2010 7:35 pm

Я подумаю 8)
I love assembler
Журнал ЮЗЕР

Several light
Posts: 67
Joined: Sun Jun 28, 2009 11:07 pm

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

Post by Several light » Mon Jul 05, 2010 4:20 pm

Вообщем одним словом надоели мне тексты из под 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 может ещё некотрое время висеть без всяких признаков жизни нопотом всёравно закроется(пока оконо весит и происходит конвертация).

User avatar
J3d1
Posts: 175
Joined: Wed Oct 15, 2008 4:49 am
Location: г. Абакан, Хакасия
Contact:

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

Post by J3d1 » Mon Jul 05, 2010 9:00 pm

Прикольно, выглядит полезным )

Post Reply