スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

物理演算実装中・・・!

現在、物理演算の部分を実装中です!
(といっても、厳格に公式を当てはめた様な処理は行っていないのですが)


やっぱり実装が大変です。
簡易的な物理演算の仕組みは、以前作ったものがあるのですが、

それだと「氷の床」とかの"滑ってる"動作や、
空中で左右キーを押したときの動作が、不自然極まりないものになり、
今一から作り直している最中です。


■具体例 その1
if( //キーが押されていれば){
m_Speed += 4;
}


以前は上記の様にしていました。
摩擦の概念が無いので、例えば、
右キーを押せば通常の地面であろうと、氷の床であろうと即座に移動開始します。
(氷の床上だと、(滑るので)しばらくは移動開始しないのが適切。)


■具体例 その2
if( //通常の地面であれば ){
m_Speed *= 0.8;
}


自分のプログラムでは、右へ4進むとした場合、
何もしなければそのまま右へ4進み続けます。

なので、地面とのあたり判定があれば、
上記の様に4⇒3.2⇒2.56…という風に摩擦らしき力が働き、止まる様な
実装にしていたのですが、これだと
空中で左右キーを押した際に、物凄い勢いで移動開始します。

※地面に当たっている場合は、移動速度が0.8倍になるのですが、
 空中では0.8倍されないので、4⇒8⇒12と、移動速度がどんどん上がる状態になる。


空中の場合(衝突判定をして何も接触していない場合)は、
移動速度を0.4倍にするとかいう実装で多少見た目はマシになりましたが、
汚い実装方法だなと思い、作り直しています。


あと、オブジェクト作成を隠ぺいする様に変更中です。
今までは、プログラム側で下記を全部行っていました。
-----------------------------
・画像情報作成
・矩形情報作成
・移動クラス情報作成

-----------------------------

いろいろとかなり省略してますが大体こんな感じ。

t_DrawerInfo.m_PosX = 100;
t_DrawerInfo.m_PosY = 50;
t_DrawerInfo.m_Rota = 0;
t_DrawerInfo.m_Trans = 255;
t_DrawerInfo.m_Extend = 1000;
t_DrawerInfo.m_DrawFlag = DRAW_NOW;

int t_DrawerHandle = CreateDrawer( t_DrawerInfo );
if( t_DrawerHandle == -1 ){
return( -1 );
}

t_CollisionInfo.m_PosX = 0;
t_CollisionInfo.m_PosY = 0;
t_CollisionInfo.m_Width = 64;
t_CollisionInfo.m_Height = 64;

int t_CollisionHandle = CreateCollision( t_CollisionInfo );
if( t_CollisionHandle == -1 ){
return( -1 );
}

switch( t_MoverType ){
case MOVER_PLAYER:
t_pMover.reset( new CMoverPlayer() );
break;
default:
break;
}

if( t_pMover == NULL ){
return( -1 );
}
std::vector<int> t_Vec;
t_Vec.push_back( t_DrawerHandle );
t_Vec.push_back( t_CollisionHandle );

if( t_pMover.Init( t_Vec ) == -1 ){
return( -1 );
}

int t_MoverHandle = AddMover( t_pMover );
return( t_MoverHandle );


上記の様なコードを記載して、やっと主人公が誕生します。
長過ぎ。

敵とかいろんなキャラが登場するのに、
上記の様なものをいちいち書いてられるか!という訳で、
データ作成クラスを作り、そこに内部処理は全部任せます。

こんな感じで作成出来る様にする予定です!

//x = 100, y = 50に主人公1を作成
t_ObjectManager.Create( OBJECT_PLAYER1, 100, 50 );


このオブジェクト作成と、物理演算周りの修正が完了すれば、
後はステージ量産とか出来る
と思うので、頑張ります…!
7月中旬 完成目標…!

【追記】
そういえば、アクションゲームのカメラワークの実装方法の解説がまだだったような気がする。
これも後日記事として纏めようと思います。
スポンサーサイト
コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。