シェイプ_シェイプの構造_シェイプレコード - hsk/swfspec_ja GitHub Wiki
シェイプレコード
シェイプレコードには次の 4 つの種類があります。
- End シェイプレコード
ENDSHAPERECORD
| フィールド | 型 | コメント |
|---|---|---|
| TypeFlag | UB[1] | エッジレコードではないので常に 0 |
| EndOfShape | UB[5] | シェイプの終端フラグ。常に 0 |
STYLECHANGERECORD
style change レコードは、非エッジレコードです。 これは次の操作を実行するために使用することができます:
- 描画の塗りまたは線のスタイルを選択する。
- 現在の描画位置を移動する(描画なし)。
- スタイルの新しいセットで現在の塗りつぶしと線のスタイルの配列を交換する。
塗りつぶしと線のスタイルは、多くの場合、新しいパスの開始時に変化するので、それは単一のレコードに複数のアクションを実行するために有用である。 例えば、DefineShapeタグは赤い円と青の正方形を定義する場合を考えましょう。 円が閉じられた後、描画位置を移動させ、青色の塗りつぶしに赤色塗りつぶしを交換する必要がある。スタイル変更レコードは、単一の形状レコードでこれを実現することができます。
| フィールド | 型 | コメント |
|---|---|---|
| TypeFlag | UB[1] | エッジレコードではないので常に 0 |
| StateNewStyles | UB[1] | 新しいスタイルフラグDefineShape2 と DefineShape3 でしか使わない |
| StateLineStyle | UB[1] | 線スタイル変更フラグ |
| StateFillStyle1 | UB[1] | 塗りスタイル 1 変更フラグ |
| StateFillStyle0 | UB[1] | 塗りスタイル 0 変更フラグ |
| StateMoveTo | UB[1] | 移動フラグ |
| MoveBits | If StateMoveTo, UB[5] | 移動用フィールドで使うビット数 |
| MoveDeltaX | If StateMoveTo, SB[MoveBits] | X の移動量 |
| MoveDeltaY | If StateMoveTo, SB[MoveBits] | Y の移動量 |
| FillStyle0 | If StateFillStyle0, UB[FillBits] | 塗りスタイル 0 |
| FillStyle1 | If StateFillStyle1, UB[FillBits] | 塗りスタイル 1 |
| LineStyle | If StateLineStyle, UB[LineBits] | 線スタイル |
| FillStyles | If StateNewStyles, FILLSTYLEARRAY | 新しい塗りスタイルの配列 |
| LineStyles | If StateNewStyles, LINESTYLEARRAY | 新しい線スタイルの配列 |
| NumFillBits | If StateNewStyles, UB[4] | 新しいスタイルの塗りインデックス |
| NumLineBits | If StateNewStyles, UB[4] | 新しいスタイルの線インデックス |
MoveDeltaXとMoveDeltaYはシェイプの原点を基準にしています。
スタイルの配列のインデックスは0ではなく1で始まる。 FillStyle属性=1は、塗りつぶしスタイル配列内の最初のスタイルを指し、FillStyle属性=2は、塗りつぶしスタイルの配列の2番目のスタイルを指し、等々。 ゼロの塗りつぶしスタイル·インデックスは、パスが充填されていないことを意味し、ゼロのラインスタイル·インデックスは、パスには、ストロークを持っていないことを意味します。 最初は塗りと線のスタイルインデックスはゼロ-塗りなしまたは線なしに設定されている。
FillStyle0 and FillStyle1
FillStyle0とFillStyle1:AdobeのFlashオーサリングツールは、エッジごとに2つの塗りつぶしのスタイル、エッジの各辺のための1つをサポートしています。 自己交差しないまたは重ならないシェイプについては、FillStyle0を使用する必要があります。 図形オーバーラップについては、状況はより複雑である。
例えば、形状は2オーバーラップの正方形で構成され、唯一のFillStyle0が定義されている場合、Flash Playerはパスが重なって「穴」をレンダリングします。 この領域はFillStyle1を使ってfillすることができる。 この状況では、規則はあらゆる指向ベクトルに対して、FillStyle0ベクトルの左側の色であることであり、FillStyle1は(次の図に示すように)ベクトルの右側の色である。

注:FillStyle0とFillStyle1はFILLSTYLEARRAYインデックスと混同してはならない。 FillStyle0とFillStyle1はFILLSTYLEARRAYへのインデックスが含まれている変数です。