Page 1 of 1
pixilang 3.7
Posted: Sun Sep 16, 2018 2:34 am
by pserg
Добрый день
Разбираюсь с языком.
Поставил новую версию 3.7. Похоже, что перестало работать событие EVT_SCREENRESIZE. В 3.6 работает, а сейчас при изменении размера окна никакого события не происходит.
Или что-то изменилось в новой версии при работе с изменением размера экрана?
Re: pixilang 3.7
Posted: Sun Sep 16, 2018 1:32 pm
by NightRadio
Добрый день!
Действительно, это баг в новой версии. Постараюсь исправить в ближайшие дни.
Спасибо!
Re: pixilang 3.7
Posted: Thu Oct 04, 2018 2:10 pm
by NightRadio
Исправил. Обновление 3.7b для Windows, Linux и macOS:
http://warmplace.ru/soft/pixilang/pixilang3.7b.zip
Re: pixilang 3.7
Posted: Thu Oct 04, 2018 7:30 pm
by pserg
Благодарю!
Re: pixilang 3.7
Posted: Fri Feb 15, 2019 11:13 pm
by Borg
Добрый день
Надеюсь проект ещё жив.
При рисовании пиксельной матрицы в v3.7b (Oct 4 2018), заметил что функции box() и fbox(), при равных координатах, размерах сторон и цвете, рисуют квадраты разного размера. Функция box() отрисовывает квадрат по X и по Y на один пиксел больше, чем функция fbox().
Это ошибка билда Pixilang или я чего то не понимаю?
Re: pixilang 3.7
Posted: Mon Feb 18, 2019 9:28 am
by NightRadio
Добрый день!
Это особенность работы функций box и fbox.
Размер в fbox указывает на количество закрашенных пикселей.
Размер в box указывает на расстояние между крайними линиями.
Re: pixilang 3.7
Posted: Mon Feb 18, 2019 4:44 pm
by Borg
Благодарю.
Заметил ещё в языке отсутствует встроенная функция рисования кругов.
Накопал неплохой алгоритм Брезенхэма (Bresenham), возможно пригодится для будущих билдов pixi. Преимущества: отрисовавыет идеальные круги любых размеров, ровной формы без разрывов, без увеличения толщины линии, каждая точка отрисовывается только один раз, тем самым затрачивая минимальное количество ресурсов.
Code: Select all
fn circleBrez($xPos, $yPos, $radius, $color){ //Окружность Брезенхэма
$x = 0;
$y = $radius;
$delta = 3 - 2 * $radius;
while($x <= $y){
dot($xPos + $x, $yPos + $y, $color);
dot($xPos - $x, $yPos + $y, $color);
dot($xPos + $x, $yPos - $y, $color);
dot($xPos - $x, $yPos - $y, $color);
dot($xPos + $y, $yPos + $x, $color);
dot($xPos - $y, $yPos + $x, $color);
dot($xPos + $y, $yPos - $x, $color);
dot($xPos - $y, $yPos - $x, $color);
if($delta < 0){
$delta = $delta + 4 * $x + 6;
}else{
if($delta >= 0){
$delta = $delta + 4 * ($x - $y) + 10;
$y = $y - 1;
}
}
$x = $x + 1;
}
}
Так же есть версия для закрашенной окружности
Code: Select all
fn fcircleBrez($xPos, $yPos, $radius, $color){ //Закрашенная окружность Брезенхэма
$x = 0;
$y = $radius;
$delta = 3 - 2 * $radius;
while($x <= $y){
line($xPos + $x, $yPos + $y, $xPos - $x, $yPos + $y, $color);
line($xPos + $x, $yPos - $y, $xPos - $x, $yPos - $y, $color);
line($xPos + $y, $yPos + $x, $xPos - $y, $yPos + $x, $color);
line($xPos + $y, $yPos - $x, $xPos - $y, $yPos - $x, $color);
if($delta < 0){
$delta = $delta + 4 * $x + 6;
}else{
if($delta >= 0){
$delta = $delta + 4 * ($x - $y) + 10;
$y = $y - 1;
}
}
$x = $x + 1;
}
}
У закрашенной есть небольшой недостаток, первая линия пикселей на полюсах круга не оптимально использует "закраску", но по логике можно оптимизировать, хотя не критично, и скорее всего не будет заметно вообще.
Re: pixilang 3.7
Posted: Tue Feb 19, 2019 9:06 am
by NightRadio
Спасибо за интересные примеры!
Кругов в комплекте нет, т.к. эту функцию можно реализовать множеством способов имеющимися средствами Pixilang. Два способа вы привели. Другие варианты вы можете найти в библиотеках lib/gfx_primitives.pixi и lib/gl_primitives.pixi
Пример - examples/graphics/primitives.pixi