- 「シューティングゲームの作り方/自作:自機を破壊する」のご紹介
- 「シューティングゲームの作り方/自作:自機を破壊する」のご紹介
- 「シューティングゲームの作り方/自作」関連ページのご紹介
- シューティングゲーム・関連ページのご紹介
- 歴代名作シューティングゲームのご紹介|まとめ
- 歴代シューティングゲーム全ゲームタイトル一覧のご紹介|まとめ
- シューティングゲームの人気シリーズのご紹介
- シューティングゲーム関連ページのご紹介|まとめ
- シューティングゲーム解説ページのご紹介|まとめ
- シューティングゲーム・ハード関連(周辺機器)のご紹介|まとめ
- シューティングゲーム雑誌/書籍関連のご紹介|まとめ
- 【TPS名作・傑作・まとめ】TPS傑作・名作・全ゲームタイトルのご紹介│まとめ│~トゥームレイダー│バイオハザード│アンチャーテッドなど~
- 【名作RPG】RPGのご紹介│まとめ│
- 【TOP:SLG】おすすめ名作シミュレーションゲームのご紹介
- 【TOP】レースゲーム関連(おすすめ名作・評価ランキン)のご紹介
- TOP【おすすめスポーツゲーム】のご紹介~MLB,NBA,NFL,FIFAなど~
- 【TOP】パズルゲームのご紹介
- 【ゲームランキング】世界・国内で最も売れたゲームランキングのご紹介
- 名作ゲームのご紹介│まとめ│家庭用ゲーム・PC・アーケードなど
- 【機種別ゲームTOP】PC・家庭用・アーケードゲーム・周辺機器のご紹介
- ジャンル別ゲームタイトルのご紹介│まとめ│
- 【ゲームTOP】ゲーム関連ページのご紹介
- 【書籍・雑誌TOP】書籍・雑誌サイトマップ関連ページのご紹介
- 【ホビーTOP】ホビーサイトマップ関連ページのご紹介
「シューティングゲームの作り方/自作:自機を破壊する」のご紹介
「シューティングゲームの作り方/自作」関連サイトマップのご紹介
「シューティングゲームの作り方/自作」関連をご紹介します。
シューティングゲーム | ゲーム | 中古・新品通販の駿河屋
「シューティングゲームの作り方/自作:自機を破壊する」のご紹介
1発破壊とダメージ性自機は、共に基本的な処理は同じ
弾に接触した自機は破壊されます。1発の弾で自機が破壊されるゲームが多いのですが、自機が一定以上のダメージを受けるまで持ちこたえるゲームもあります。いずれにしても、基本的な処理は同じです。
自機の破壊を行うための手順
「図.5-14:自機がダメージを受けたときの処理」は、自機の破壊を行うための手順です。
まず、自機が破壊されたかどうかは、自機の耐久力から判定することができます。ここでは、被弾するたびに自機の耐久力を1ずつ減らしていき、0以下になったら破壊されることにします。
自機の耐久力の初期値を1にしておけば、一度被弾しただけで自機が破壊されるようになります。また、当たった弾や敵の種類に応じてダメージ値が異なるというアレンジも可能です。
自機が破壊されたら爆発タスクを生成
自機が破壊されたら、爆発や破片などのアニメーションを表示するのが一般的です。ここでは爆発のタスクを生成します。自機と同じ位置に爆発タスクを生成し、自機タスクを消去することによって、自機が爆発したように見せるわけです。
さらに、爆発タスクは一定時間が経過したら、残機がある場合にかぎり新しい自機を登場させます。そして自分(爆発)を削除します。
▼「図.5-14:自機がダメージを受けたときの処理」
自機がダメージを受けたときの処理 | |
【1】 |
自機の破壊処理開始
|
【2】
|
自機の耐久度が0以下か
|
Yes:【3】爆発タスクを生成する
|
|
No:【5】自機の破壊処理終了
|
|
【3】 |
爆発タスクを生成する
|
【4】 |
自機タスクを消去する
|
【5】 |
自機の破壊処理終了
|
当たり判定処理を行う自機のプログラム
当たり判定処理と破壊の処理は、自機の移動処理内で行います。「プログラム5-5:通常時の自機を表すクラス(MyShip.h、MyShip.cpp)」は、通常時の自機を表すクラス(CNormalMyShip)です。
自機が破壊されたら、自機の爆発を表すクラス(CMyShipCrash)のインスタンスを生成
耐久力が0以下になって自機が破壊されたら、自機の爆発を表すクラス(CMyShipCrash)のインスタンスを生成します。また、移動処理(Move関数)には、戻り値としてfalseを返させます。すると、自機タスクはゲーム本体によって消去されます。
自機が破壊された時には、発射中のビームも消去
自機が破壊された時には、発射中のビームを消去する処理も行います。自機の破壊に合わせてビームを消去しないと、ビームだけが画面に残ってしまい不自然だからです。
自機インスタンスへのポインタを設定
自機の爆発時に呼び出している「SetMyShip関数」は、ゲーム本体クラス(CShtGame)の関数です。この関数は、ゲーム本体クラスが保持する自機インスタンスへのポインタを設定します。このポインタは、自機に向かって狙い撃ち弾を発射するためなどに使います。
▼「プログラム5-5:通常時の自機を表すクラス(MyShip.h、MyShip.cpp)」
//通常時の自機を表すクラス class CNormalMyShip : public CMyShip{ protected: //耐久力 float Vit; public: //コンストラクタ、移動 CNormalMyShip(float x, float y); virtual bool Move(); }; //コンストラクタ CNormalMyShip::CNormalMyShip( float x,float y) : CMyShip(x, y), Vit(1) {} //移動 bool CNormalMyShip::Move() { //自機に共通の移動処理 CMyShip::Move(); //当たり判定処理(自機と弾) //タスクイテレータクラス(CTasklter)を使って //すべての弾タスクに関してループする for (CTaskIter i(Game->BulletList); i. HasNext();){ CBullet* bullet=(CBullet*)i.Next(); //接触の判定には移動物体クラス(CMover)の //Hit関数(図5-1:移動物体クラス(Mover.h)を使う if (Hit(bullet)){ //弾に接触したら耐久力を1だけ減らす Vit--; } } //爆発 if (Vit<=0){ new CMyShipCrash(X, Y); DeleteBeam(); Game->SetMyShip(NULL); return false; } return true; }
爆発のクラス
効果クラス(CEffect)と自機の爆発を表すクラス(CMyShipCrash)を定義
自機の爆発も、自機や弾などと同じくタスクとして表現します。このサイトでは、爆発のような効果(エフェクト)の共通機能をまとめた効果クラス(CEffect)と、自機の爆発を表すクラス(CMyShipCrash)を定義します。
効果クラスは、移動物体クラス(CMover)から派生させる
効果クラスは、自機クラス(CMyShip)や弾クラス(CBullet、図5-2)と同様に、移動物体クラス(CMover)から派生させます。自機爆発クラスは、効果クラスから派生させます。
爆発を生成したら、まず爆発音
爆発を生成したら、まず爆発音を再生します。そして一定時間(サンプルでは50フレーム)が経過したら、自機を復活させ、自分(爆発)を消去します。
爆発の描画に関して
爆発の描画に関しては、「図.5-15爆発の描画」のように4つの3Dモデルを表示しています。拡大率、アルファ値、位置を時間とともに少しずつ変化させることによって、広がりながら消えていく爆発を表現しました。
▼「図.5-15爆発の描画」
「爆発の描画」 | |
【1】 |
4つの3Dモデルで爆発を表現する
|
【2】 |
時間とともに拡大率と間隔を増加させ、アルファ値を減少させる
|
【3】 |
最後は薄くなって消滅する
|
描画は自由に
今回は、ほとんどのキャラクターを1つの3Dモデルで表現していますが、描画処理は自由に記述することができるため、この爆発のように複数の3Dモデルを使ってキャラクターを描画することも可能です。また、3Dモデル以外の方法、例えば2D画像などを用いてキャラクターを描画することもできます。
「自機の爆発に関するプログラム」のご紹介
「プログラム5-6:爆発のクラス(Effect.h、Effect.cpp)」は、自機の爆発に関するプログラムです。
「プログラム5-6:爆発のクラス(Effect.h、Effect.cpp)」
//効果のクラス class CEffect : public CMover{ public: //タスクリストを指定するために //new演算子とdelete演算子をオーバーロードする //タスクリストは効果タスクリスト(EffectList)を使用 void* operator new(size_t t) { return operator_new(t, Game->EffectList); } void operator delete(void*p) { operator_delete(p,Game->EffectList); } //コンストラクタ //効果に当たり判定は必要ないので //当たり判定を指定しない移動物体クラスの //コンストラクタ(図5-1)を使用 CEffect::CEffect(float x, float y) : CMover(Game->EffectList, x, y, EFFECT_Z) {} }; //爆発のクラス class CMyShipCrash : public CEffect{ protected: //タイマー int Time; public: //コンストラクタ、移動、描画 CMyShipCrash(float x, float y); virtual bool Move(); virtual void Draw(); }; //コンストラクタ CMyShipCrash::CMyShipCrash(float x, float y) : CEffect(x, y), Time(0) { //爆発音を再生 Game->SEBossCrash->Play(); } //移動 //移動物体クラスの移動処理(Move関数)をオーバーライド bool CMyShipCrash::Move() { Time++; if (Time>50){ //新しい自機を復活させる Game->SetMyShip(new CRevivalMyShip(X, Y)); //爆発を消す return false; } return true; } //描画 //移動物体クラスの描画処理(Draw関数)をオーバーライド void CMyShipCrash::Draw() { float scale=0.2f+0.2f*Time, alpha=1.0f-0.02f*Time, dist=0.5f*Time; Game->MeshCrashSauce->Draw( X,Z,-Y, scale,1,scale,0,0,0,TO_ZYX,alpha,false); Game->MeshCrashSauce->Draw( X+dist*cos(D3DX_PI*0.12f),z,-Y+dist*sin(D3DX_PI*0.12f), scale,1,scale,0,0,0,TO_ZYX,alpha,false); Game->MeshCrashSauce->Draw( X+dist*cos(D3DX_PI*0.78f),z,-Y+dist*sin(D3DX_PI*0.78f), scale,1,scale,0,0,0,TO_ZYX,alpha,false); Game->MeshCrashSauce->Draw( X+dist*cos(D3DX_PI*1.44f),z,-Y+dist*sin(D3DX_PI*1.44f), scale,1,scale,0,0,0,TO_ZYX,alpha,false); }
「シューティングゲームの作り方/自作」関連サイトマップのご紹介
「シューティングゲームの作り方/自作」関連をご紹介します。
シューティングゲーム | ゲーム | 中古・新品通販の駿河屋
「シューティングゲームの作り方/自作」関連ページのご紹介
「シューティングゲームの作り方/自作」関連ページをご紹介します。
【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 > ゲーム│ホビー│書籍・マンガ│■■ |
||||
サイトマップ一覧 |
懐かしの名作から最新作までの豊富な品揃え!通販ショップの駿河屋
コペンギンサイトマップ関連ページのご紹介
コペンギン関連ページをご紹介します。