Что означает нечисловые значения в определении ребер XFL?
XFL - это новый несжатый исходный файл ADOBE FLASH (CS5), он состоит из определений XML, большинство из которых ясны, но, к сожалению, важные являются странными.
Глядя на различные существующие источники, я вижу определения EDGE формы, такие как:
<Edge strokeStyle="1" edges="!0 0S4|180 0"/>
<Edge strokeStyle="1" edges="!2720 2720S6|0 2720!0 2720|0 0!0 0/2720 2720"/>
<Edge fillStyle1="1" edges="!3532 1539.5S2[#BD9.4D #577.3C 2952.5 1756.5!2952.5 1756.5[#AF6.DA #4C6.1D 3584 1119!3584 1119|3532 1539.5"/>
Делая некоторые тесты, я могу сказать, что:
! == move to position
| == draw line from the position to the new position
/ == probably same like |
[ == draw curve
( == probably same like [
Но что означает такие значения, как S4 или # BD9.4D? Мое еще не доказанное предположение состоит в том, что значения # могут быть как-то закодированы очень маленькими числами. Я понятия не имею, что может быть S4.
2 ответа
!(x,y)
MoveTo
/(x,y)+
LineTo
|(x,y)+
LineTo
[(x1 y1 ex ey)+
CurveTo (квадратичный)
](x1 y1 ex ey)+
CurveTo (квадратичный)
((pBCPx pBCPy)? ; x1 y1 x2 y2 ex ey (({Q,q,P,p})? x y)+
CurveTo (кубический старт)
)(nBCPx nBCPy)? ;
CurveTo (кубический конец)
Sn
выбор (n= битовая маска, 1:fillStyle0, 2:fillStyle1, 4: обводка)
#aaaaaa.bb
32-разрядное число с фиксированной точкой со знаком
Хм... я ошибся с предположением о # значениях!
Я декомпилировал полученную форму и могу сказать, что, например, значение #BD9.4D должно быть глупой шестнадцатеричной кодировкой числа 3033.77. Я хотел бы знать, почему Adobe использует нечто подобное в коде, который должен быть удобочитаемым для человека?
РЕДАКТИРОВАТЬ: вышеупомянутое неверно, правильный результат для #BD9.4D 3033.30078125
>> (to integer! #{000BD94D}) / 256
== 3033.30078125
Также обратите внимание, что числа типа #19F.2 являются двоичными #{00019F20}
Согласно значениям типа S4, они могут быть просто дополнительной информацией для редактора FLASH, потому что, когда я удаляю их вручную, я могу загрузить источник, и форма будет одинаковой.