ISLeさん。何度も何度も詳しい説明ありがとうございます。
説明された以上、ちゃんと理解するのが礼儀だと思うので、もう一度、理解できてるかの確認お願いします。
No.29でイマダニさんが書いている「立ち状態」。
文字通り「状態」です。
それはキャラの振る舞いのひとつ。
振る舞い:立ち状態
であれば、「立ち状態」になる外部要因は何か。
先回りしておくと「地面に触れる」というのは要因であってアクションではありません。
外部要因:地面に触れている。入力がない。
それを整理して、アクションをひとつだけ定義してください。
振る舞い:立ち状態
外部要因:地面に触れている。入力がない。
↓
アクション:立つ。
こういうことですか?
振る舞い:右走り
外部要因:地面に触れている。右キー入力がある。
↓
アクション:右へ走る
こんな感じですかね?
コードだと、「地面に触れる」などといった、ステージ要因を抜いてますが(僕の悪い頭だとちょっと混乱しそうなので……
コード:
/*仮想入力テーブル[現実の入力]*/
const int VirtualInput[] = {
Neutral, // nothing
Left, // L
Right, // R
Neutral, // L+R
Up, // U
L_Up, // U+L
R_Up, // U+R
Up, // U+L+R
Down, // D
L_Down, // D+L
R_Down, // D+R
Down, // D+L+R
Neutral, // D+U
Left, // D+U+L
Right, // D+U+R
Neutral, // D+U+L+R
};
m_VirtualInputWay = 0;
/*現実の入力*/
if (Input::Inst()->CheckPad(Input::Inst()->Get_PadHandle(Input::Left)))
m_VirtualInputWay += 1;
if (Input::Inst()->CheckPad(Input::Inst()->Get_PadHandle(Input::Right)))
m_VirtualInputWay += 2;
if (Input::Inst()->CheckPad(Input::Inst()->Get_PadHandle(Input::Up)))
m_VirtualInputWay += 4;
if (Input::Inst()->CheckPad(Input::Inst()->Get_PadHandle(Input::Down)))
m_VirtualInputWay += 8;
//仮想入力
m_VirtualInput_State = VirtualInput[m_VirtualInputWay];
/*仮想アクションテーブル[仮想入力(外部要因)]*/ /*[ここにステージ要因(地面に触れるとか、触れてないとか)?]*/
const int VirtualAction[] = {
STAND, //インデックスが『入力なし』なら『立ちアクション』
RUN, //走り
RUN,
JUMP, //ジャンプ
SIDEJUMP, //横ジャンプ
SIDEJUMP,
DOWN, //しゃがみ
DOWN,
DOWN,
};
//仮想アクション
m_VirtualAction_State = VirtualAction[m_VirtualInput_State];
/*振る舞いテーブル*/
const int PlayerState[/*プレイヤーの状態*/][/*仮想アクション*/] = {
R_N, R_RUN, L_RUN, R_JUMP, R_SIDEJUMP, L_SIDEJUMP, R_DOWN, //[右立ち状態の時の][各アクションでの状態]
R_N, R_RUN, L_RUN, R_SIDEJUMP, R_SIDEJUMP, L_SIDEJUMP, R_DOWN, //[右走り状態の時の][各アクションでの状態]
R_JUMP, R_JUMP, L_JUMP, R_JUMP, R_JUMP, L_JUMP, R_JUMP, //[右ジャンプ状態の時の][各アクションでの状態]
};
//プレイヤーの振る舞い(状態)
m_PlayerState = PlayerState[PlayerState/*プレイヤーの状態*/][m_VirtualAction_State/*仮想アクション*/]
てな感じでしょうか?
何度も何度もすいません……