- 「シューティングゲームの作り方/自作:自機の移動に関する設定」のご紹介
- 「シューティングゲームの作り方/自作:自機の移動に関する設定」のご紹介
- 「シューティングゲームの作り方/自作」関連ページのご紹介
- シューティングゲーム・関連ページのご紹介
- 歴代名作シューティングゲームのご紹介|まとめ
- 歴代シューティングゲーム全ゲームタイトル一覧のご紹介|まとめ
- シューティングゲームの人気シリーズのご紹介
- シューティングゲーム関連ページのご紹介|まとめ
- シューティングゲーム解説ページのご紹介|まとめ
- シューティングゲーム・ハード関連(周辺機器)のご紹介|まとめ
- シューティングゲーム雑誌/書籍関連のご紹介|まとめ
- 【TPS名作・傑作・まとめ】TPS傑作・名作・全ゲームタイトルのご紹介│まとめ│~トゥームレイダー│バイオハザード│アンチャーテッドなど~
- 【名作RPG】RPGのご紹介│まとめ│
- 【TOP:SLG】おすすめ名作シミュレーションゲームのご紹介
- 【TOP】レースゲーム関連(おすすめ名作・評価ランキン)のご紹介
- TOP【おすすめスポーツゲーム】のご紹介~MLB,NBA,NFL,FIFAなど~
- 【TOP】パズルゲームのご紹介
- 【ゲームランキング】世界・国内で最も売れたゲームランキングのご紹介
- 名作ゲームのご紹介│まとめ│家庭用ゲーム・PC・アーケードなど
- 【機種別ゲームTOP】PC・家庭用・アーケードゲーム・周辺機器のご紹介
- ジャンル別ゲームタイトルのご紹介│まとめ│
- 【ゲームTOP】ゲーム関連ページのご紹介
- 【書籍・雑誌TOP】書籍・雑誌サイトマップ関連ページのご紹介
- 【ホビーTOP】ホビーサイトマップ関連ページのご紹介
「シューティングゲームの作り方/自作:自機の移動に関する設定」のご紹介
「シューティングゲームの作り方/自作」関連サイトマップのご紹介
「シューティングゲームの作り方/自作」関連をご紹介します。
シューティングゲーム | ゲーム | 中古・新品通販の駿河屋
「シューティングゲームの作り方/自作:自機の移動に関する設定」のご紹介
「シューティングゲームの作り方/自作:自機の移動に関する設定」についてご紹介します。
移動する物体に共通する機能
いよいよ自機を動かす準備に入ります。まずは、自機ショット弾・敵といったさまざまな移動物体(キャラクター)に共通する処理をまとめてみましょう。
移動する物体に共通する機能 | |
1 | 自機の移動 |
2 |
入力の読み取りと移動
|
3 |
自機を傾ける処理:ロール
|
4 |
斜め方向の速度調節
|
5 |
移動範囲の制限
|
6 |
自機を描画する
|
移動物体には座標が不可欠
移動物体には座標が不可欠です。画面上の位置はX座標とY座標で表します。重ね合わせの上下を表す場合には、それに加えてZ座標も使うことができます。
ゲームで座標系を扱う方法はいろいろありますが、例えば画面右側をX軸正方向、画面下側をY軸正方向とする方法があります「図.4-6:ゲーム座標」。
▼「図.4-6:ゲーム座標」
画面のサイズの設定
画面のサイズについても、自由に決めることができます。これは、キャラクターを描画するときなどに、ゲームで扱う座標を画面上の座標に変換すればよいからです。ここではサイズを100×100としました。
3Dモデルは、ゲームの座標を3Dグラフィックの座標に変換
3Dモデルを表示する際には、ゲームの座標を3Dグラフィックの座標に変換します。グラフィックの初期化のところで述べたように、3D座標はちょうど画面を上から見下ろすように設定してあります「図.4-7:ゲーム座標と3D座標の対応関係」。そのため、例えば自機のゲーム座標が(x,y)ならば、3D座標は(x,0,-y)になります。
▼「図.4-7:ゲーム座標と3D座標の対応関係」
2DゲームではX座標とY座標だけで考えた方がわかりやすい
3D座標をそのままゲーム座標として使うことも不可能ではないのですが、2Dゲームでは「図.4-6:ゲーム座標」のようにX座標とY座標だけを考えた方がわかりやすくなります。そのため、このように座標を使い分けるのも1つの方法です。
移動物体に必要な移動と描画の機能
移動物体には移動と描画の機能が必要です。ただし、移動と描画の詳細な処理内容については、自機や弾といった物体の種類によって異なります。
そこで、もしクラスを利用する場合には、移動物体のクラスでは移動と描画を行う関数を仮想関数として定義しておきます。
そして、移動物体クラスから派生する自機クラスや弾クラスでこれらの仮想関数をオーバーライドして、それぞれの物体にふさわしい処理を記述します。
「プログラム4-5:移動物体のクラス(Mover.h)」は、移動物体に関するクラスです。弾が画面外に出てしまったり、敵が爆発した場合には、そのタスクを消去しなければなりません。消去すべきタスクを示すために、この例では移動を行うMove関数の戻り値を利用しています。
▼「プログラム4-5:移動物体のクラス(Mover.h)」
class CMover : publicCTask { public: //座標 //他のクラスから操作する都合上、publicメンバにした //privateメンバにしてアクセス用のメソッドを用意してもよい float X,Y,Z; //コンストラクタ //引数で受け取った座標をメンバ変数に設定する CMover(CTaskList*task_list,floatx,floaty,floatz) : CTask(task_list),X(x),Y(y),Z(z) {} //移動 //CMoverクラスの派生クラスでは //この仮想関数をオーバーライドする //移動後に移動物体を消去する場合にはfalseを返し //消去しない場合にはtrueを返す virtual bool Move() { returntrue; } //描画 //CMoverクラスの派生クラスでは //この仮想関数をオーバーライドする virtualvoidDraw(){} };
自機の移動
それでは、実際に自機の移動処理を作成しましょう。まず、フレーム(1/60秒などの一定時間間隔)ごとにプレイヤーの入力を読み取ります。そして、入力内容に応じて少しずつ自機を動かします。
自機の移動に関しては、次のようなポイントがあります。
入力の読み取りと移動
入力内容に応じて自機の速度を設定します。例えば左が入力された場合には、自機が左向きの速度を持つように、速度のX成分を負の値に設定します。また、例えば右上が入力された場合には、速度のX成分を正の値に、速度のY成分を負の値に設定します。
自機を傾ける処理:ロール
左右に移動したときに自機を傾ける処理です「図.4-8:自機のロール設定」。ロールを行うと、自機が空間を飛んでいる雰囲気を出すことができます。
キーボードやジョイスティックの左右への入力があったら、機体を傾けます。左右への入力がない場合には、傾いた自機を少しずつ水平な状態に戻します。
▼「図.4-8:自機のロール設定」
ロールの設定 |
左に移動するときには左に傾ける |
通常の状態 |
右に移動するときには右に傾ける |
斜め方向の速度調節
斜め移動と水平移動の速度の違いに注意が必要
「図.4-6:ゲームの座標」のような座標を利用する場合には、斜め移動と水平移動の速度の違いに注意が必要です。
例えば、自機の速度を1にしたい場合、右へ進むには速度のX成分を1にします。同様に、下に進むときにはY成分を1にします。
▼「図.4-6:ゲーム座標」
自機の斜め移動は上下左右の「1.4倍」になる
しかし、右下へ斜めに進むときに、X成分を1Y成分を1としてしまうと、思ったような結果になりません。自機の速度が1ではなく√2(約1.4)になるからです。
斜め移動と水平移動の速さを同じにするには
斜め移動と水平移動の速さを同じにするには、斜め移動時にX方向とY方向の移動速度を約0.7倍に小さくする必要があります「図.4-9:斜め方向の速度調整」。約0.7倍と
いうのは、√2の逆数(1/sqrt(2.0f))です。
「図.4-9:斜め方向の速度調整」
速度調整がない場合、斜めに移動すると急に自機が速くなってしまいます。速度調節を行うかどうかはゲームによって違いますが、今回は調整することにしました。
移動範囲の制限
自機が画面枠からはみ出ないように、移動範囲を制限します「図.4-10:移動範囲の制限」。例えば、自機の座標を更新した後に、自機の中心座標が一定範囲以内に入っているかどうかを調べ、出ていたら範囲内に戻します。
▼「図.4-10:移動範囲の制限」
「プログラム4-6:自機の移動(MyShip.cpp)」は、自機の移動をまとめたプログラムです。移動物体クラス(CMover)のMove関数を、自機クラス(CMyShip)でオーバーライドしました。
▼「プログラム4-6:自機の移動(MyShip.cpp)」
bool CMyShip: :Move() { // 移動範囲 static const float MaxX-46, MaxY=46; //ロール速度と範囲 staticconstVRoll=0.02f,MaxRoll=0.1f; Chapter04≫»É# //斜め移動の速度調整用定数 staticconstsqrt2=1/sqrt(2.0f); //速度 //この値を変更すると自機の移動速度が変わるfloatvx=0.8f,vy=0.8f; //キーボードとジョイスティックの入力を受け取る //Inputクラスを使用 constCInputState*is-Game->GetInput()->GetState(0); //左右移動とロール if(is->Left){ VX=-VX; if(Roll>-MaxRoll)Roll-=VRoll; }else if(is->Right){ if(Roll<MaxRoll)Roll+=VRoll; }else{ } vx=0; Roll+=(Roll<0)?VRoll:-VRoll; //上下移動 if(is->Up)vy=-vy;elseif(!is->Down)vy=0; //斜め方向の速度調節 if(vx!=0&&vy!=0){ vx*=sqrt2; vy*=sqrt2; } //移動 X+=VX; Y+=vy; //移動範囲の制限 if(X<-MaxX)X=-MaxX;elseif(MaxX<X)X=MaxX; if(Y<-MaxY)Y=-MaxY;elseif(MaxY<Y)Y=MaxY; //このプログラムでは自機を消去することはないので //常にtrueを返す returntrue; }
自機の描画方法について
移動させた後で新しい位置に自機を描画することによって、自機が実際に画面上で動いたように見せることができます。自機を描画する方法はいろいろあります。
例えば、3Dグラフィックを使う場合には、自機の座標に自機の3Dモデルを描画します。ゲームの座標系と3Dの座標系が異なる場合には、座標の変換が必要です。今回の場合、ゲーム座標系の座標(X,Y,Z)は、3D座標系の座標(X,Z,-Y)に対応します。
機体をロールさせるには、3Dモデルの回転も必要です。また、3Dモデルの立体感を出すためには、少し傾けて表示すると効果的です。2Dグラフィックのゲームでも、キャラクターが真上からの視点ではなく、斜め上からの視点で描かれているのをよく見かけます。「プログラム:4-7:自機の描画(MyShip.h、MyShip.cpp)」は、自機の描画に関するプログラムです。
▼「プログラム:4-7:自機の描画(MyShip.h、MyShip.cpp)」
voidCMyShip::Draw(){ //描画色の設定 //ここでは、もともとの3Dモデルの色を使用 Game->MeshSauce->SetColor( D3DXCOLOR(1,1,1,1), D3DXCOLOR(0,0,0,0)); //3Dモデルの描画 //CMeshクラスを使用する //第3引数は回転角度、第4引数は回転順序を指定する Game->MeshSauce->Draw( D3DXVECTOR3(X,Z,-Y),D3DXVECTOR3(1,1,1), D3DXVECTOR3(0.125f,0,Roll), TO_ZYX); }
「シューティングゲームの作り方/自作」関連サイトマップのご紹介
「シューティングゲームの作り方/自作」関連をご紹介します。
シューティングゲーム | ゲーム | 中古・新品通販の駿河屋
「シューティングゲームの作り方/自作」関連ページのご紹介
「シューティングゲームの作り方/自作」関連ページをご紹介します。
【STG】シューティングゲーム・サイトマップのご紹介
80年から2000年代のシューティングゲームについてご紹介します。
シューティングゲーム | ゲーム | 中古・新品通販の駿河屋
シューティングゲーム・関連ページのご紹介
シューティングゲーム・関連ページをご紹介します。
歴代名作シューティングゲームのご紹介|まとめ
歴代シューティングゲーム全ゲームタイトル一覧のご紹介|まとめ
シューティングゲームの人気シリーズのご紹介
シューティングゲーム関連ページのご紹介|まとめ
シューティングゲーム解説ページのご紹介|まとめ
シューティングゲーム・ハード関連(周辺機器)のご紹介|まとめ
シューティングゲーム雑誌/書籍関連のご紹介|まとめ
【ゲームジャンル別】サイトマップのご紹介
【ゲームジャンル別】サイトマップをご紹介します。
ゲームジャンル別サイトマップ | ||||
ゲームTOP > ランキング│傑作・名作│機種別│ジャンル別 |
||||
ゲームジャンル別TOP >関連ページ│名作│ランキング | ||||
【ジャンル別関連ページ】 アクション系(プラットフォーム│対戦アクション│FPS│TPS│STG│フライト)|AVG│RPG│SLG│レース│スポーツ│パズル│テーブル |
||||
【アクション】プラットフォーム│対戦アクション│FPS│TPS│STG│フライト 【アドベンチャー】AVG│ 【RPG】RPG│SRPG│ARPG 【SLG】SLG│ストラテジー│ターン制SLG│RTS 【レース】レース 【スポーツ系】スポーツ│プロレス 【パズル】 【テーブル】麻雀 |
||||
【ジャンル別】おすすめ評価ランキング アクション│AVG│RPG│SLG│レース│スポーツ│パズル│テーブル |
||||
【歴代傑作・神ゲー(2021~1996年)】99~94点│93~92点│91点│90点 ■【アクション系ゲーム】■ アクション│プラットフォーム│対戦アクション│FPS│TPS│フライト│ 【対戦アクション】一覧│98~80点│79~70点 【FPS】まとめ│90点以上│89~86点│85~83点│82~80点 【アドベンチャーゲーム】 ■【RPG系】■ RPG│SRPG│ARPG 【RPG】一覧│傑作(96~90点)│89~85点│84~82点│81~80点│ ■【シミュレーション系ゲーム】■ SLG│ストラテジー│ターン制SLG│RTS│街づくりSLG ■【レース】■ ■【スポーツ系ゲーム】■スポーツ│プロレス ■【パズル】 |
||||
シリーズ・テーマ | ||||
■■│コペンギンTOP > ゲーム│ホビー│書籍・マンガ│■■ |
||||
サイトマップ一覧 |
ゲームジャンル別・関連ページのご紹介
ゲームジャンル別・関連ページをご紹介します。
【TPS名作・傑作・まとめ】TPS傑作・名作・全ゲームタイトルのご紹介│まとめ│~トゥームレイダー│バイオハザード│アンチャーテッドなど~
【格ゲー・名作】アーケード・家庭用・格闘ゲームのご紹介~名作(173 本)・全タイトル(1462本)のご紹介
【名作STG】シューティングゲームのご紹介
【AVG】アドベンチャーゲームのご紹介│まとめ│
【名作RPG】RPGのご紹介│まとめ│
【TOP:SLG】おすすめ名作シミュレーションゲームのご紹介
【TOP】レースゲーム関連(おすすめ名作・評価ランキン)のご紹介
TOP【おすすめスポーツゲーム】のご紹介~MLB,NBA,NFL,FIFAなど~
【TOP】パズルゲームのご紹介
ゲームTOPサイトマップ
ゲームTOPのサイトマップをご紹介します。
【ゲームTOP】サイトマップ | ||||
ゲームTOP > ランキング│傑作・名作│機種別│ジャンル別 | ||||
■ランキングTOP > ハード│ソフト(売上(世界│国内)│海外評価) ■傑作・名作ゲームTOP > ■ゲーム機種別TOP > 据置│携帯│AC│PC│周辺機器 ■ジャンル別TOP > アクション系(プラットフォーム│対戦アクション│FPS│TPS│STG│フライト)|AVG│RPG│SLG│レース│スポーツ│パズル│テーブル |
||||
■■│コペンギンTOP > ゲーム│ホビー│書籍・マンガ│■■ |
||||
サイトマップ一覧 |
ゲーム関連ページのご紹介
ゲーム関連ページをご紹介します。
【ゲームランキング】世界・国内で最も売れたゲームランキングのご紹介
名作ゲームのご紹介│まとめ│家庭用ゲーム・PC・アーケードなど
【機種別ゲームTOP】PC・家庭用・アーケードゲーム・周辺機器のご紹介
ジャンル別ゲームタイトルのご紹介│まとめ│
コペンギン・サイトマップ
コペンギンのサイトマップをご紹介します。
【コペンギンTOP】サイトマップ | ||||
コペンギンTOP > ゲーム│ホビー│書籍・マンガ│ | ||||
■■│コペンギンTOP > ゲーム│ホビー│書籍・マンガ│■■ |
||||
サイトマップ一覧 |
懐かしの名作から最新作までの豊富な品揃え!通販ショップの駿河屋
コペンギンサイトマップ関連ページのご紹介
コペンギン関連ページをご紹介します。