Pixilang v3.0

Pixilang по русски
Post Reply
User avatar
NightRadio
Site Admin
Posts: 3118
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Pixilang v3.0

Post by NightRadio » Fri Sep 02, 2011 7:35 am

Первый официальный релиз Pixilang 3
http://pixilang.googlecode.com/files/pixilang3.0.zip
В архиве версии для Win32, WinCE (WinMobile), Linux (32/64), Mac OS X. Кроме того из исходников собираются версии для Maemo и Dingux - предусмотрены соответствующие ключи в MakeFile.

Из нововведений.
  • Новые примеры.
  • Функция effector() для наложения цветного шума и размывания. Почти такая же, как в Pixilang 1, но немного поменялся порядок параметров.
  • Поддержка форматов WAV, PNG, JPEG в обе стороны через функции load() и save().
  • У контейнера теперь могут быть свойства. Для доступа к ним предусмотрены функции get_prop(), set_prop().
  • Многопоточность - можно создавать несколько потоков выполнения.
  • Исправлены баги, увеличена производительность.
Полная документация на русском здесь: http://code.google.com/p/pixilang/wiki/ ... 3Manual_RU

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

Re: Pixilang v3.0

Post by J3d1 » Fri Sep 02, 2011 10:55 am

:Yahoo!: Браво, Night Radio! Отличная новость! :Yahoo!:

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

Re: Pixilang v3.0

Post by Several light » Sat Sep 03, 2011 11:34 pm

И сразуже вопрос по поводу многопоточности.

Написал я вот такой код:

x=100
thread_create(f1,x)
while(1){}

fn f1($d,$a) {
dot($d,$a,WHITE)
frame()
}

Врезультате нарисовалась точка смещённая на 100 пикслей относительно 0 по оси y. Причём то что я написал f1 с парамерами $d и $a это не опечатка просто по другому функция исполняется игнорируя вообще какие бы то нибыло параметры из вне. Такое впечталение, что параметр адресуемый потоку передаётся как второй параметр функции, а не первый. Впринципе с этим можно жить но работет странно. В качестве певого парметра он пердаёт 1 если создать второй поток то 2... вообщем подозреваю, что первым параметром он передаёт номер потока.

P.S. Может это и нормально просто наверно чего то непонял из мануала.

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

Re: Pixilang v3.0

Post by Al_Rado » Sun Sep 04, 2011 12:13 am

Действительно, отличная новость!
Даже не ожидал, что новый pixi станет настолько крутым языком программирования!
И что меня еще порадовало, он лояльно относится к оформлению кода: скобкам, разделителям типа ";", присвоению значения переменной. Например, прекрасно отработают оба варианта:
код из примеров

Code: Select all

screen = 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() )
    {
	draw = 0
	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 }
    }
}
по другому оформленный код

Code: Select all

screen = 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() ) {
	draw = 0;
	if (EVT[ EVT_TYPE ] == EVT_BUTTONDOWN) {
	    key = EVT[ EVT_KEY ];
	    if (key == KEY_UP) {
	    y = y - 1;
	    }
	    if (key == KEY_DOWN) {
	    y = y + 1;
	    }
		if (key == KEY_LEFT) {
		x = x - 1;
	    }
	    if (key == KEY_RIGHT) {
	    x = x + 1;
	    }
	}
	if (EVT[ EVT_TYPE ] == EVT_QUIT) {
	halt;
	}
  }
}
Второй вариант может показаться более громоздким, но лично мне он так намного легче читается - привычки )
Конечно, это мелочи - нововведений много действительно серьезных, например та же многопоточность.
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

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

Re: Pixilang v3.0

Post by Several light » Sun Sep 04, 2011 8:59 pm

Да в первых версиях было сложновато после Javascript с разделением кода внутри одной строки. Не привычно было с ; переходить на пробелы))... но со временем уже выработалась привычка. Вообще хорошо что за столь долгий период времени наконец то появилась следующая версия языка... в нём появилось много различных возможностей... к сожалению пока особо нет времени опробовать их все и написать что нибудь... надеюсь в скором времени это будет возможно)... ну думаю к примеру многопоточность сможет в несколько раз увеличить производительность написанных программ.

User avatar
NightRadio
Site Admin
Posts: 3118
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Pixilang v3.0

Post by NightRadio » Mon Sep 05, 2011 7:43 am

По поводу многопоточности. В доках этот вопрос пока не освещен достаточно хорошо - постараюсь исправить в скором времени.

Поток создается функцией thread_create( thread_function, user_data )
thread_function - "тело" потока, управляющая функция.
user_data - число, передаваемое потоку; пользовательский параметр. Здесь по аналогии с POSIX threads параметр только один. Если нужно передать несколько параметров, то передаем указатель на массив.

Функция потока выглядит, например, так:
fn f1( $thread_num, $user_data )
{
}
И здесь $user_data - это как раз то самое число, указанное в thread_create(). Это может быть указатель на массив, если требуется передать несколько параметров. В случае с массивом параметры мы будем получать, например, вот так: $x = $user_data[ 0 ] $y = $user_data[ 1 ]
А $thread_num - как правильно было подмечено, это номер потока.
Есть, кстати, хороший пример, показывающий принцип работы с потоками - examples/console/threads.pixi

Под массивом я конечно же подразумеваю контейнер :) В пикси это одно и то же.

User avatar
NightRadio
Site Admin
Posts: 3118
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Pixilang v3.0

Post by NightRadio » Mon Sep 05, 2011 7:47 am

В операторе IF скобки действительно не обязательны ) Но если они есть, то тоже ничего страшного - выражение обрабатывается корректно.
А точка с запятой просто игнорируется - это сознательно было сделано. Я тоже к ней привык, часто машинально ставлю )

User avatar
vtl
Posts: 31
Joined: Sun Dec 28, 2008 6:41 pm
Location: Saint Petersburg, Russia
Contact:

Re: Pixilang v3.0

Post by vtl » Wed Sep 28, 2011 11:33 pm

Давно я тут не был :)
Сходу вопрос: под андроид будет?
Last edited by vtl on Thu Sep 29, 2011 11:16 am, edited 1 time in total.

User avatar
NightRadio
Site Admin
Posts: 3118
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Pixilang v3.0

Post by NightRadio » Thu Sep 29, 2011 7:29 am

под андроид будет?
Обязательно

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

Re: Pixilang v3.0

Post by J3d1 » Mon Oct 24, 2011 5:00 pm

Пробовал добавлять к контейнеру свойство (число), контейнер после этого не меняет свой размер. Получается, что свойства хранятся отдельно от контейнера. Можно-ли задавать свойства - строки символов? Свойства - это отдельные контейнеры?

User avatar
NightRadio
Site Admin
Posts: 3118
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Pixilang v3.0

Post by NightRadio » Mon Oct 24, 2011 7:30 pm

Свойства отдельно, на размере контейнера они никак не отразятся.
Свойство - это не контейнер, поэтому нельзя просто записать в него номер контейнера со строкой и забыть об этой строке - автоматически строка вместе с контейнером-папой не удалится, Пикси ничего о их связи не знает. Свойство - это просто число.

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

Re: Pixilang v3.0

Post by J3d1 » Mon Oct 24, 2011 7:55 pm

Понятно, что в общем позволяет иметь некоторое одинаковое число свойств для нескольких одинаковых по функционалу контейнеров: например для контейнера окна - его тип, коорд x, коорд y и т.д.; для спрайтов: координаты, кол-во фреймов, и т.д. Только если реализовывать загрузку спрайта, то, допустим в spr001.jpg графика, а в spr001.atr атрибуты этого спрайта, записанные в raw байтах.

Post Reply