##### Ninja Library - モーション関数

# njLightMotion

ライトモーションの実行

### 書式

> `void njLightMotion( light_num, light, motion, frame )
> Int light_num
> const NJS_LIGHT *light
> const NJS_MOTION *motion
> Float frame
> `

### 引数

> light_num | ライト番号
> light | ライト構造体へのポインタ
> motion | ライト用のモーション構造体へのポインタ
> frame | フレーム番号(0〜モーションフレーム数(motion->nbFrame)未満)

### 戻り値

> なし

### 解説

> ライトのモーションをモーションデータにしたがって実行します。 ライト構造体のfuncがEasyMulti、SimleMulti関数の場合は、ライト番号（light_num）を 指定します。設定する値は、EasyMulti、SimpleMulti関数のライト番号と同じです。 ただし、アンビエントライトのときと、Easy、Simple関数のときこの値は参照されません。 ライト構造体のfunc,typeは、njLightMotion関数を使用する前に設定しておいてください。 本関数ではLightSwitch関数、LightMatrices関数は実行していません。ライトを反映させるために 各自実行してください。 通常、本関数の light 引数には、NACファイル（またはNJCファイル）中の NJS_LIGHT 構造体、 motion 引数には、ライトモーション用の NAMファイル（またはNJMファイル）中の NJS_MOTION 構造体 を指定します。

> 引数の light 構造体は、モーションデータ中にキーフレームデータ列が存在しない場合の デフォルト値として使用されます。従って読み込まれるだけで書き込みは行われません。

> 引数 frame で示される位置の位置データ、及び姿勢データを、モーションデータのキーフレーム間を補間して 作成します。

> 例: フレーム数（motion->nbFrame）が10のモーションの場合

> - frame の範囲は0以上10未満(9.9999)となります。
> - frame を 0.5とすると、0フレーム目と1フレーム目のちょうど真ん中のモーションを補完して描画します。
> - frame が9以上10未満(9.9999)の補完は、最後のキーフレームと最初のキーフレーム間の補完となります。

> 引数 frame の範囲と補完のされ方をまとめると次のように成ります。

> 引数 frame の範囲 | 補完のされ方
> frame < 0 | 暴走はしませんが通常は使いません。
> 0 <= frame <= motion->nbFrame - 1 | 通常の補完
> motion->nbFrame - 1 <= frame < motion->nbFrame | 最後のキーフレームと最初のキーフレームの補完
> motion->nbFrame <= frame | 暴走はしませんが通常は使いません。

### 用例

>     #include <Ninja.h>
>     #define LIGHT           light1;
>     #define LIGHT_MOTION    light_motion1;
>     #define ENEMY1_MODEL     model_enemy1;
>     #define ENEMY1_MOTION    motion_enemy1;

>     extern NJS_LIGHT      LIGHT;
>     extern NJS_MOTION      LIGHT_MOTION;
>     extern NJS_MODEL       ENEMY1_MODEL;
>     extern NJS_MOTION      ENEMY1_MOTION;

>     void DrawFunc( Float frame )
>     {

>         njLightMotion( NJD_CNK_EASY_MULTILIGHT_1,&LIGHT, &LIGHT_MOTION, frame );
>      	njCnkSetEasyMultiLightSwitch(NJD_CNK_EASY_MULTILIGHT_ALL, 1);

>     	njPushMatrixEx();
>     	njCnkSetEasyMultiLightMatrices();
>         njTranslate( NULL, EneX, EneY, EneZ );
>     	njCnkEasyMultiDrawMotion( &ENEMY1_MODEL, &ENEMY1_MOTION, frame );

>         njPopMatrixEx();
>     }

### 備考

> 本関数は０番スロットのモーション情報構造体を使用します。
> 本関数を呼び出すとカレントモーション情報構造体は０番スロットに設定されます。

### 参照

> njLightAction() | ライトモーションの実行（アクション構造体対応）

njLightMotion

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000