Pixilang v3.0 rc1
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Pixilang v3.0 rc1
Первый кандидат в релиз.
Ссылка: http://www.warmplace.ru/soft/pixilang3/pixilang3.0.zip
В этой версии множество небольших изменений. Из основных: загрузка PNG; функция file_dialog; интерполяция в сэмплере и в аудио-движке.
Возможно, что несколько функций, описанных в мануале, не присутствуют в данной версии - за это заранее извиняюсь, просто активно сейчас правлю код. Окончательный релиз ожидается в начале июля.
Все доки, как обычно, здесь: http://code.google.com/p/pixilang/w/list
Ссылка: http://www.warmplace.ru/soft/pixilang3/pixilang3.0.zip
В этой версии множество небольших изменений. Из основных: загрузка PNG; функция file_dialog; интерполяция в сэмплере и в аудио-движке.
Возможно, что несколько функций, описанных в мануале, не присутствуют в данной версии - за это заранее извиняюсь, просто активно сейчас правлю код. Окончательный релиз ожидается в начале июля.
Все доки, как обычно, здесь: http://code.google.com/p/pixilang/w/list
Re: Pixilang v3.0 rc1
Отлично! Спасибо NightRadio! Попробую компильнуть под wince.
Re: Pixilang v3.0 rc1
С графическими форматами pixi3 ситуация ясна: есть jpeg и png. Правда нет пока команды сохранения контейнера в эти форматы. Планируется ли поддержка формата mp3 или wav?
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Pixilang v3.0 rc1
Сохранение в графические форматы обязательно будет. Из звуковых форматов планируется поддержка WAV и OGG Vorbis.
Re: Pixilang v3.0 rc1
Небольшая программка-шутка. http://narod.ru/disk/17669632001/smile.zip.html
-
- Posts: 68
- Joined: Sun Jun 28, 2009 11:07 pm
Re: Pixilang v3.0 rc1
А я уже собирался переписывать функции для чтения WAV файлов с версии 1.6 в на версию 3.0... ... хотя вкачестве встроенных функций это наверно будет работать более производительно, ктомуже неочнь хочется разбираться с 32х биттными форматами... Так что будем жадть!
Вопрос у меня по функции получения событий. Вот кусок программы:
xsc=0 ysc=0
while(1){
if get_event() {
n=EVT[EVT_KEY]
if n==140 {ysc=ysc-1 pixi(scr,xsc,ysc) frame()}
if n==141 {ysc=ysc+1 pixi(scr,xsc,ysc) frame()}
if n==142 {xsc=xsc-1 pixi(scr,xsc,ysc) frame()}
if n==143 {xsc=xsc+1 pixi(scr,xsc,ysc) frame()}
}
}
Код предназначен для того, чтобы сдвигать картинку (кторая больше экрана) вправо, влево, вверх, вниз. Всё работает, но на нужные клавиши pixilang начинает реагировать после клика мышкой по работчей области экрана. До этого реакция программы такая, какбудто я вообщеничего не нажимаю.
Как можно решить эту проблему?.. если кто знает...
Вопрос у меня по функции получения событий. Вот кусок программы:
xsc=0 ysc=0
while(1){
if get_event() {
n=EVT[EVT_KEY]
if n==140 {ysc=ysc-1 pixi(scr,xsc,ysc) frame()}
if n==141 {ysc=ysc+1 pixi(scr,xsc,ysc) frame()}
if n==142 {xsc=xsc-1 pixi(scr,xsc,ysc) frame()}
if n==143 {xsc=xsc+1 pixi(scr,xsc,ysc) frame()}
}
}
Код предназначен для того, чтобы сдвигать картинку (кторая больше экрана) вправо, влево, вверх, вниз. Всё работает, но на нужные клавиши pixilang начинает реагировать после клика мышкой по работчей области экрана. До этого реакция программы такая, какбудто я вообщеничего не нажимаю.
Как можно решить эту проблему?.. если кто знает...
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Pixilang v3.0 rc1
Немного обновил версию. Ссылка та же.
Добавил билд для Win Mobile (wince), исправил кое-какие ошибки и упростил работу с клавишами. Теперь не нужно забивать номера кнопок влево-вправо, достаточно лишь написать имя клавиши. Например, KEY_LEFT. Подробнее описано здесь: http://code.google.com/p/pixilang/wiki/ ... RU#События
Добавил новый пример graphics/keyboard.pixi, в котором показано, как управлять квадратиком при помощи клавиш со стрелками. Думаю, этот пример хорошо отвечает на последний вопрос от Several light. На всякий случай исходник привожу ниже:
Добавил билд для Win Mobile (wince), исправил кое-какие ошибки и упростил работу с клавишами. Теперь не нужно забивать номера кнопок влево-вправо, достаточно лишь написать имя клавиши. Например, KEY_LEFT. Подробнее описано здесь: http://code.google.com/p/pixilang/wiki/ ... RU#События
Добавил новый пример graphics/keyboard.pixi, в котором показано, как управлять квадратиком при помощи клавиш со стрелками. Думаю, этот пример хорошо отвечает на последний вопрос от Several light. На всякий случай исходник привожу ниже:
Code: Select all
creen = get_screen()
xsize = get_xsize( screen )
ysize = get_ysize( screen )
x = 0
y = 0
while( 1 )
{
print( "Press left/right/up/down", 0, -ysize / 2 + 8, WHITE )
fbox( x, y, 2, 2, WHITE )
frame()
while( get_event() )
{
if EVT[ EVT_TYPE ] == EVT_BUTTONDOWN
{
key = EVT[ EVT_KEY ]
if key == KEY_UP { y - 1 }
if key == KEY_DOWN { y + 1 }
if key == KEY_LEFT { x - 1 }
if key == KEY_RIGHT { x + 1 }
}
if EVT[ EVT_TYPE ] == EVT_QUIT { halt }
}
}
Re: Pixilang v3.0 rc1
NightRadio, прошу пояснить как использовать контейнеры в функциях pixilang3 в качестве передаваемых параметров. Суть проблемы: хочу создать функцию для работы с контейнером (чтобы ее можно было вызвать потом для любого контейнера). Как мне это сделать правильно?
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Pixilang v3.0 rc1
Очень просто. Приведу пример.
То есть, тут главное не забывать, что все контейнеры пронумерованы. И если мы пишем cont = new( 32, 32 ), то это значит, что cont - самая обычная переменная, в которой лежит число - номер контейнера. Pixilang не делает никаких различий между обычной переменной и переменной с контейнером - это одно и то же. Типа как в ассемблере, в регистре лежит число, а что это за число - знает только программист.
Code: Select all
fn do_something_with_container( $c )
{
$c[ 0 ] = 23 //Пишем что-то в контейнер
a = $c[ 1 ] //Читаем
pixi( $c ) //Рисуем контейнер
}
//Далее идет основной код программы:
cont = new( 32, 32 )
do_something_with_container( cont )
Re: Pixilang v3.0 rc1
Спасибо.
Еще вопрос: требуется сохранять вводимые с клавиатуры данные (количество байт заранее неизвестно). Что делать: создать контейнер "с запасом" или сделать по-другому (ведь если задаем жесткий размер контейнера, то увеличить потом нельзя, я так понимаю)
Еще вопрос: требуется сохранять вводимые с клавиатуры данные (количество байт заранее неизвестно). Что делать: создать контейнер "с запасом" или сделать по-другому (ведь если задаем жесткий размер контейнера, то увеличить потом нельзя, я так понимаю)
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Pixilang v3.0 rc1
Можно на лету изменять размер контейнера через resize().
Например, так
Данные в контейнере остаются, после масштабирования не удаляются. А новая (пустая) область может быть заполнена любым мусором.
Например, так
Code: Select all
cont = new( 1, 1, INT8 ) //Начальный размер - 1 байт
resize( cont, 2 ) //Увеличили размер до 2х байт (указали только ось X, размер по Y оставляем неизменным).
resize( cont, 4, 4 ) //Увеличили размер до 16 байт (4 в ширину и 4 в высоту).
Re: Pixilang v3.0 rc1
Спасибо за разъяснение.
Еще вопросик: для создания простого скриптового языка для анимации делаем парсер. выборку лексем из контейнера (файла) сделать не сложно, а как лучше реализовать переходы к функции, обрабатывающей полученную лексему, ведь таких лексем и их функций будет много. Пока кроме как использовать множество операторов if ( lex == ....) {........} ничего не придумал... Может быль есть какой-то хитроумный прием организовать таблицу переходов?
Еще вопросик: для создания простого скриптового языка для анимации делаем парсер. выборку лексем из контейнера (файла) сделать не сложно, а как лучше реализовать переходы к функции, обрабатывающей полученную лексему, ведь таких лексем и их функций будет много. Пока кроме как использовать множество операторов if ( lex == ....) {........} ничего не придумал... Может быль есть какой-то хитроумный прием организовать таблицу переходов?
Re: Pixilang v3.0 rc1
Странно, но размеры контейнеров con1 и con2 в коде ниже совпадают и равны 1.
Code: Select all
con1 = "1"
con2 = ""
ts = ""
sprintf ( ts, "size of con1 = %d size of con2 = %d\n", get_size ( con1 ), get_size ( con2 ) )
fputs ( ts )
Re: Pixilang v3.0 rc1
Заметил странность в работе функции line (). Пример: рисование линий длиной len = 100 под углом в angle = 45 градусов. Начиная с определенного x1 возникают "ступеньки".
Пробовал округлять координаты перед рисованием прибавлением к ним 0.5 - не помогает. Как рисовать правильно?
Возможно, это результат отсечения (не округления) в расчетах координат точек в самой функции line ()?
Code: Select all
len = 100 //длина линии
angle = 45 //угол в градусах
rad = angle * M_PI / 180 //перевели угол в радианы
x1 = -( WINDOW_XSIZE >> 1 ) //левый край экрана
y1 = -( WINDOW_YSIZE >> 1 ) + 10 //верх экрана + 10 пикс.
while ( x1 < 86 )
{
x2 = x1 + len * cos ( rad ) //координаты второй точки линии
y2 = y1 + len * sin ( rad )
line ( x1, y1, x2, y2, WHITE )
x1 = x1 + 10
frame ()
}
frame ( 10000 )
Пробовал округлять координаты перед рисованием прибавлением к ним 0.5 - не помогает. Как рисовать правильно?
Возможно, это результат отсечения (не округления) в расчетах координат точек в самой функции line ()?
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Pixilang v3.0 rc1
По поводу таблицы переходов - увы, switch case я еще не реализовал, поэтому сейчас самым быстрым способом будет именно табличка. Создаем массив M из 32-битных значений. Заполняем его ссылками на функции: M[ 0 ] = fun1 M[ 1 ] = fun2 и т.д. А далее нужную функцию вызываем прямо из массива: M[ 0 ]()
Про размеры контейнеров еще гляну, но, видимо, это нормально ) А чтобы по честному определить размер строки внутри массива, пользуемся функцией strlen().
По поводу линий. Я подозреваю, что ошибка накапливается где-то в вычислениях с плавающей точкой. Попробуй значения ( len * cos ( rad ) ) и ( len * sin ( rad ) ) заранее просчитать за телом цикла и преобразовать их в целые. Как-то так:
xx = ( len * cos ( rad ) ) div 1
yy = ( len * sin ( rad ) ) div 1
while( ......
Про размеры контейнеров еще гляну, но, видимо, это нормально ) А чтобы по честному определить размер строки внутри массива, пользуемся функцией strlen().
По поводу линий. Я подозреваю, что ошибка накапливается где-то в вычислениях с плавающей точкой. Попробуй значения ( len * cos ( rad ) ) и ( len * sin ( rad ) ) заранее просчитать за телом цикла и преобразовать их в целые. Как-то так:
xx = ( len * cos ( rad ) ) div 1
yy = ( len * sin ( rad ) ) div 1
while( ......