Importing.DxLib (1.0) | 2010-10-14 20:24 |
雛形 (雛形) | 2010-07-22 18:21 |
============================================ スプライト ============================================ □ スプライトとは? ゲーム要素を構成させるためのキャラクタや仕掛け、弾など何らかの行動・動きのある物。 原則して地形以外のすべてのオブジェクトをスプライトと定義します。 主に次の要素にスプライトが適応されます。 ・キャラクタ ・マップ上の仕掛け(触れるとダメージを受ける床や移動する床) ・キャラクタの持つ武器 ・武器から発射された弾 □ スプライトの基本構成 スプライトの実体は、Spriteクラスで定義されています。 □ 位置・サイズ・向き 位置と大きさは、Nlgp1.Parameter.Rectangleクラスで定義されており、Spriteクラスは、 Nlgp1.Parameter.Rectangleクラスのオブジェクトを所有しています。 ● 向き Direction 静止状態での向き ( 最後に移動していた方向 ) MovingDirection 移動している方向 HitBlockDirection 衝突した方向 ToVerticalCellPos 衝突したセルの座標(垂直方向) ToHorizontalCellPos 〃(水平方向) ● 位置・サイズ 位置やサイズは、IRectangleインターフェースを通じて取得または、設定できます。 細かい制御を行うには、Spriteオブジェクトが持つGetRectangleメンバーを通じてRectangleオブジェクトを操作できます。 位置(座標系)には、下記の2種類があります。 ・スプライト座標(ピクセル座標) スプライトは、左上を 0 , 0 として1ピクセル単位で細かく管理されます。 (厳密には、浮動小数点なので1ピクセルよりも細かい) 主にスプライトの移動などは、このスプライト座標を使用します。 ・セル座標 マップの地形に割り当てた座標系で32x32ピクセル = 1セルになります。 ● 速度 速度は、SpriteオブジェクトのメンバーSpeedを通じて設定または、取得します。 □ 行動 - ActionEvent スプライトは、1フレーム毎に実行されるActionEventを備えています。 ActionEventに独自の行動を定義することでマップ上を回転するキャラクタや 触れるとダメージを受ける床といった個別の行動(動作)を定義できます。 ● ロジック用のパラメータを管理するために… - LogicParameterメンバー 例えば、ある座標を中心として回転を行うスプライトがあったとした場合、1フレーム毎にActionEventが実行され 少しずつ移動していきます。その場合、角度を保持する必要がありますが、 これらのパラメータは、Spriteオブジェクトが持つメンバーLogicParameter(ActionParameterクラス)を通じて管理します。 Angle(角度) , Radius(半径) , LimitDistance(距離制限)...といった基本的なメンバーに加えて Universalメンバーで任意のパラメータを記憶しておくことができます。Universalは、Hashtableなので何でも格納できます。 ● 移動する スプライトを移動する場合、壁を突き抜けても構わないものは例外として 壁を突き抜けると不都合が起きる場合は、TryMoveメソッドを通じて移動処理を行います。 TryMoveメソッドは、X軸→Y軸の方向で移動を試み壁に衝突した時点で移動を中断します。 ● 固有アクション ジャンプなどの固有の動きは、下記のメソッドを呼び出します。 ・JumpStart ジャンプ(地上でジャンプできる状態であること) ・JumpConstraintStart 強制ジャンプ(空中などであっても強制的にジャンプする) ・JumpStop ジャンプを中断する ※ SpriteAction(静的クラス)では、いくつかの回転などの基本的な動作をサポートします。 □ パラメータ スプライトには、それぞれ移動速度や重力などの能力を設定できます。 このパラメータを適切に設定することで移動の早いキャラクタや遅いキャラクタや ジャンプ力の高いキャラクタなどを定義できます。 スプライトの管理 ContinuityTime 生存時間 LimitTime 生存可能時間 IsRest 静止状態かどうか IsNowJumping 飛行中かどうか IsNotDamage ダメージを受けるかどうか HitPoint ヒットポイント スプライトの属性 IsBlock 当たり判定がありブロック属性を適応するかどうか Attribute スプライトの基本属性 動きの制御 Speed 速度 UpGravity 上昇時重力 DownGravity 降下時重力 FlyGravity 滞空時重力 JumpPower ジャンプ力 IsBoosting 加速するかどうか CanDefaultAction 既定の当たり判定によりスプライトの位置を補正するかどうか □ 近くの状態を取得する 何らかのアクションにおいて近場の状況を知ることは、重要な判断の一つです。 直近のセルや移動中に衝突したセルや位置を知るには、次のメンバーメソッドがあります。 ・ImmediateCell ・ImmediateBlockCell ・ToBlock ・ToHitCell □ 当たり判定・衝突判定 ・HitSpriteCollectionメソッドは、コレクションであり衝突しているスプライトを取得します。 ・TryMoveメソッドは、指定した座標に移動できるかを試み、移動可能な位置までスプライトを移動させます。 ・MoveTestメソッドは、指定された方向に移動した場合に衝突するかどうかを返します。 □ 攻撃・防御アクション 攻撃や防御などスプライトが持つ独自の技は、Attackスロットに割り当てられます。 AttackSetメソッドでIAttackインターフェースを持つオブジェクトをスロットに関連付けることができます。 RunAttackメソッドを通じて関連付けたIAttackインターフェースを通じて攻撃や防御のアクションを実行できます。 □ 親スプライト スプライトは、作成元のスプライトを得るための方法があります。 Ownerプロパティを使用することでISpriteインターフェースを取得でき、関連された親スプライトを取得できます。 例えば、キャラクタが武器を待ち、その武器から弾を発射できる仕組みがあるとします。 この場合、スプライトは、下記の3つに分けることができます。 ・キャラクタ ・武器 ・弾 このとき、武器スプライトの親(Owner)は、キャラクタになります。 キャラクタの親は、居ないのでOwnerを取得してもやはりキャラクタを参照します。 弾スプライトのOwnerは、武器スプライトになります。 弾スプライトからOwner.Ownerと辿ることで誰が放った弾であるかを知ることができます。