вопросы новичка

Pixilang по русски
User avatar
medusa
Posts: 8
Joined: Thu Jun 07, 2012 6:01 pm
Location: Костанай, Казахстан

вопросы новичка

Post by medusa » Thu Jun 07, 2012 7:35 pm

привет форумчане, у меня возник вопрос по файлу конфигурации, создал файл config.ini в нем прописал
width 800
height 600
что бы увеличить размеры пользовательского окна, затем закинул файл конфигурации в C:\pixilang, запустил интерпретатор выбрал пример, но пользовательское окно осталось прежних размеров, пробовал запихивать config.ini в другие папки результат нулевой, не могу понять что я делаю не так?

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

Re: вопросы новичка

Post by NightRadio » Thu Jun 07, 2012 7:40 pm

Файл должен называться pixilang_config.ini и находиться он должен ровно в той директории, где находится pixilang.exe
Только в этом случае конфигурация будет прочитана интерпретатором.

User avatar
medusa
Posts: 8
Joined: Thu Jun 07, 2012 6:01 pm
Location: Костанай, Казахстан

Re: вопросы новичка

Post by medusa » Thu Jun 07, 2012 8:01 pm

решил поработать с русским шрифтом, часть кода взял из примера Text_cyr.pixi:

Code: Select all

font = load( "images/font_cyr.jpg" )
alpha = new( get_xsize( font ), get_ysize( font ), INT8 )
set_alpha( font, alpha )
size = get_size( alpha ) i = 0 while( i < size )
{
    p = font[ i ]
    alpha[ i ] = ( get_red( p ) + get_green( p ) + get_blue( p ) ) div 3
    i + 1
}

set_font( 0x410, font, 16, 4 )

color = get_color(55,237,217)
color1 = get_color(211,217,235)
transp(255)
while( 1 )
{
	clear()
	dot( 0, 0, color )
	dot (-37,0,color1)
	print("карбофос",-200,-150,WHITE,TOP|LEFT)
	frame()
	while( get_event() )
	{
		if EVT[ EVT_TYPE ] == EVT_QUIT { halt }
	}
}
русский шрифт не выводиться, код вроде правильно написан, есть подозрение в том что пример Text_cyr.pixi был написан в кодировке ANSI as UTF-8 под UNIX, а у меня в ANSI под Dos/Windows

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

Re: вопросы новичка

Post by NightRadio » Thu Jun 07, 2012 8:07 pm

Да, это важный момент. Исходный файл должен быть в кодировке UTF-8.
По идее хороший текстовый редактор / редактор кода должен уметь сохранять файл в любой указанной кодировке, в том числе в UTF-8.

User avatar
medusa
Posts: 8
Joined: Thu Jun 07, 2012 6:01 pm
Location: Костанай, Казахстан

Re: вопросы новичка

Post by medusa » Thu Jun 07, 2012 8:25 pm

вот еще один код, ошибок не выдает но программа завершается самостоятельно менее чем за пол секунды:

Code: Select all

b=get_color(137,212,248)
sidling="
...b...
..b.b..
..b.b..
.b...b.
.b...b.
b.....b
bbbbbbb
"
make_pixi(sidling)
start:
	clear()
	pixi(sidling,0,0)
	frame()
	while( get_event() ){ if EVT[ EVT_TYPE ] == EVT_QUIT { halt } }
go start
что не так?

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

Re: вопросы новичка

Post by NightRadio » Thu Jun 07, 2012 8:28 pm

Функция make_pixi() отсутствует в Pixilang 3.x
По крайней мере пока )

User avatar
medusa
Posts: 8
Joined: Thu Jun 07, 2012 6:01 pm
Location: Костанай, Казахстан

Re: вопросы новичка

Post by medusa » Fri Jun 08, 2012 10:40 am

хотел бы узнать по подробнее про функции rand и rand_seed чем они отличаются?

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

Re: вопросы новичка

Post by NightRadio » Fri Jun 08, 2012 11:29 am

rand() выдает случайные числа от 0 до 32767
Каждый раз при старте программы последовательность чисел, выдаваемых функцией rand(), будет одинаковой.
Функция rand_seed() меняет эту последовательность, задает начальную точку для случайного генератора. По умолчанию значение этой точки - ноль.
Например, чтобы при каждом старте получать гарантированно новую последовательность случайных чисел, в начале программы можно добавить такой код:
rand_seed( get_ticks() )
таким образом начальная точка генератора случайных чисел будет зависеть от текущего системного времени.

User avatar
medusa
Posts: 8
Joined: Thu Jun 07, 2012 6:01 pm
Location: Костанай, Казахстан

Re: вопросы новичка

Post by medusa » Fri Jun 08, 2012 12:02 pm

а если мне надо получить случайное число в заданном промежутке допустим от -5 до 23 или от 1.27 до 39.48 какую функцию использовать?

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

Re: вопросы новичка

Post by NightRadio » Fri Jun 08, 2012 12:17 pm

Специальной функции для этого не предусмотрено.
Есть несколько способов получения случайных чисел в диапазоне. Вот один из них:
r = min + ( rand() * ( max - min ) ) / 32768

Если нужно от -5 до 23, то соответственно получим:
r = -5 + ( rand() * ( 23 + 5 ) ) / 32768

Можно для этих целей создать свою функцию:
fn my_rand( $min, $max )
{
ret( $min + ( rand() * ( $max - $min ) ) / 32768 )
}

User avatar
medusa
Posts: 8
Joined: Thu Jun 07, 2012 6:01 pm
Location: Костанай, Казахстан

Re: вопросы новичка

Post by medusa » Sat Jun 09, 2012 11:13 am

нарисовал окружность из линий:

Code: Select all

background = get_color(240,230,230)
radius=200
start:
	clear(background)
	angle=0 while (angle<360)
	{
		x = radius*sin(angle)
		y = radius*cos(angle)
		x1 = radius*sin(angle +12)
		y1 = radius*cos(angle +12)
		line(x,y,x1,y1,BLACK) 
		//dot(x,y,BLACK)
		angle +12
	}
	frame()
	while( get_event() ){ if EVT[ EVT_TYPE ] == EVT_QUIT { halt } }
go start

результат меня не совсем удовлетворил, как правильно нарисовать окружность?

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

Re: вопросы новичка

Post by NightRadio » Wed Jun 13, 2012 2:39 pm

Окружность можно нарисовать, например, так

Code: Select all

background = get_color(240,230,230)
radius = 200
start:
   clear( background )
   step = ( M_PI * 2 ) / 256
   angle = 0 while( angle < M_PI * 2 )
   {
      x = radius * sin( angle )
      y = radius * cos( angle )
      x1 = radius * sin( angle + step )
      y1 = radius * cos( angle + step )
      line( x, y, x1, y1, BLACK )
      angle + step
   }
   frame()
   while( get_event() ){ if EVT[ EVT_TYPE ] == EVT_QUIT { halt } }
go start
Ошибка кода из предыдущего сообщения в том, что функции sin, cos и пр. принимают параметры не в градусах, а в радианах

yourchange
Posts: 33
Joined: Tue Jan 01, 2013 5:30 pm
Location: Украина, Николаев

Re: вопросы новичка

Post by yourchange » Tue Jan 01, 2013 6:53 pm

1.очень интересно,а что означают нули в массивах для triangles3d?

2.что значит matrix[2*4+3]? почему именно 11?

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

Re: вопросы новичка

Post by NightRadio » Tue Jan 01, 2013 10:15 pm

очень интересно,а что означают нули в массивах для triangles3d?
А где именно? :)
Полный формат этих массивов описан в документации: http://code.google.com/p/pixilang/wiki/ ... riangles3d
Может, речь о полях Unused? Они в данной версии не используются, поэтому логичнее их просто заполнить нулями.
что значит matrix[2*4+3]? почему именно 11?
Чтобы создать матрицу перспективной проекции, достаточно в эту ячейку (X=3 Y=2) поместить какое-нибудь небольшое число. В последней версии Pixilang можно просто писать matrix[ 3, 2 ]

yourchange
Posts: 33
Joined: Tue Jan 01, 2013 5:30 pm
Location: Украина, Николаев

Re: вопросы новичка

Post by yourchange » Wed Jan 02, 2013 8:51 pm

спасибо, прочел.
а планируете что нибудь вместо unused? например, нормали.

Post Reply