#6
by keito94 » 7年前
物は試し、と
コード:
//前と同じなら変更なし。
if (PrevMotion == motion) return;
motion = PrevMotion;
// 前と同じモーションなら変更しない
if (PrevMotion == motion) return;
PrevMotion = motion;
を削除してみたところ、モーションの切り替えはできたのですが、今度は移動のときにキャラが消えてしまいます。
デバッグコンソールによると、移動モーション時に
コード:
アニメモーション番号:1
アニメフレーム番号:-8
と移動モーションではありえない数値が書かれているのがわかりました。
移動モーションの数字と移動ルーチンのソースコードは以下のとおりです。
Player.cpp
コード:
CMotion temp[MOTION_MAX][ANIM_MAX]=
{
//上から順に
//{STAND,WALK,JUMPUP,JUMPDOWN,LAND}
{{0,3},{1,3} ,{2,6},{1,3}, {0,3} ,{MLOOP,0}},//立ち
{{3,3},{4,3},{0,3},{5,3},{6,3},{7,3} ,{MLOOP,0}},//歩き
{{0,3},{8,3},{9,3},{10,15},{MSTOP,0}},//ジャンプ上り
{{11,3},{12,3}, {13,3},{MSTOP,0}},//ジャンプ下り
{{15,3},{16,3}, {17,3}, {MEND,0}},//着地
};
//省略
bool CPlayer::Move() {
Game->OffSetPlayer();
JoyPad.Update();
if (JoyPad.Get(PAD_INPUT_RIGHT)) {
AnimObj->MotionChange(WALK);
Dir = FALSE;
VX = 3.0F;
}
else if (JoyPad.Get(PAD_INPUT_LEFT)){
AnimObj->MotionChange(WALK);
Dir = TRUE;
VX = -3.0F;
}
else {
AnimObj->MotionChange(STAND);
VX = 0;
}
ColObj->GetMove(&X, &Y, &VX, &VY, &JumpCount, &GroundFlag, &JumpTime, &JumpGrav);
//ジャンプボタンが押されているフレームを確保する(二段ジャンプとか用)
if (JoyPad.Get(PAD_INPUT_1)) {
JBFrame++;
}
else {
JBFrame = 0;
}
//二段ジャンプに対応する。
if (JBFrame == 1) {
JumpCount = 0;
JumpTime++;
}
//ジャンプボタンが押されていれば重力は小さくなり、離されていれば大きくなる。
if (JBFrame > 0) {
JumpGrav = true;
}
else {
JumpGrav = false;
}
//ジャンプ回数をカウントする。
if (JumpTime > 2) {
MaxJump = true;
}
else {
MaxJump = false;
}
if (JoyPad.Get(PAD_INPUT_1) > 0 && JumpCount < 5) {
if (JumpCount < 1 && !MaxJump) {
JumpCount++;
VY = -7.0F;
}
}
AnimObj->Animation(0.4F);
printf("アニメモーション番号:%d\n", AnimObj->MotionType);
printf("アニメフレーム番号:%d\n",AnimObj->GetAnimNo());
return true;
}
物は試し、と
[code]
//前と同じなら変更なし。
if (PrevMotion == motion) return;
motion = PrevMotion;
// 前と同じモーションなら変更しない
if (PrevMotion == motion) return;
PrevMotion = motion;
[/code]
を削除してみたところ、モーションの切り替えはできたのですが、今度は移動のときにキャラが消えてしまいます。
デバッグコンソールによると、移動モーション時に
[code]アニメモーション番号:1
アニメフレーム番号:-8
[/code]
と移動モーションではありえない数値が書かれているのがわかりました。
移動モーションの数字と移動ルーチンのソースコードは以下のとおりです。
Player.cpp
[code]
CMotion temp[MOTION_MAX][ANIM_MAX]=
{
//上から順に
//{STAND,WALK,JUMPUP,JUMPDOWN,LAND}
{{0,3},{1,3} ,{2,6},{1,3}, {0,3} ,{MLOOP,0}},//立ち
{{3,3},{4,3},{0,3},{5,3},{6,3},{7,3} ,{MLOOP,0}},//歩き
{{0,3},{8,3},{9,3},{10,15},{MSTOP,0}},//ジャンプ上り
{{11,3},{12,3}, {13,3},{MSTOP,0}},//ジャンプ下り
{{15,3},{16,3}, {17,3}, {MEND,0}},//着地
};
//省略
bool CPlayer::Move() {
Game->OffSetPlayer();
JoyPad.Update();
if (JoyPad.Get(PAD_INPUT_RIGHT)) {
AnimObj->MotionChange(WALK);
Dir = FALSE;
VX = 3.0F;
}
else if (JoyPad.Get(PAD_INPUT_LEFT)){
AnimObj->MotionChange(WALK);
Dir = TRUE;
VX = -3.0F;
}
else {
AnimObj->MotionChange(STAND);
VX = 0;
}
ColObj->GetMove(&X, &Y, &VX, &VY, &JumpCount, &GroundFlag, &JumpTime, &JumpGrav);
//ジャンプボタンが押されているフレームを確保する(二段ジャンプとか用)
if (JoyPad.Get(PAD_INPUT_1)) {
JBFrame++;
}
else {
JBFrame = 0;
}
//二段ジャンプに対応する。
if (JBFrame == 1) {
JumpCount = 0;
JumpTime++;
}
//ジャンプボタンが押されていれば重力は小さくなり、離されていれば大きくなる。
if (JBFrame > 0) {
JumpGrav = true;
}
else {
JumpGrav = false;
}
//ジャンプ回数をカウントする。
if (JumpTime > 2) {
MaxJump = true;
}
else {
MaxJump = false;
}
if (JoyPad.Get(PAD_INPUT_1) > 0 && JumpCount < 5) {
if (JumpCount < 1 && !MaxJump) {
JumpCount++;
VY = -7.0F;
}
}
AnimObj->Animation(0.4F);
printf("アニメモーション番号:%d\n", AnimObj->MotionType);
printf("アニメフレーム番号:%d\n",AnimObj->GetAnimNo());
return true;
}
[/code]