忍者ブログ
まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

R-typeのような波動砲を実装したくて、まず波動砲用のメーターを作ろうと思ったのですが
出来ればエスプガルーダのような、自機の周りを囲むような円形のメーターを表示させたいと
思って、まずは簡単なプログラムを作って考えてみました。

作りたいメーターのイメージとしてはこんな感じ。
05222.jpg
自機の周りをメーターが囲っています。

で、どうやって実装しようかと思ったのですが、最初は円形の画像を用意してちょっとづつ表示場所を
増やそうかと思ったのですが、画像が円形なのでちょっとづつ増やすってのが出来なくて挫折。

次に思いついたのが、小さい画像を回転させながら円形に表示する方法。
s-05221.jpg
この画像のような感じで、角度をちょっとづつ増やしながら回転させて表示してやれば、円形の棒に
見えるのではないかと思い作ってみたら上手く出来ました^^

プロジェクトファイルはコチラ↓
http://blog.cnobi.jp/v1/blog/user/63629cf35d5259ece1529ed13f0745b1/1242974292

このプログラムを動かすとこんな感じです↓
s-WS000556.jpg
Xキーを押すと徐々にメーターが上がっていって、離すと下がります。
表示プログラムとしてはこんな感じ。
/////////////////////////////////////////////////////////////////////////////////////////////////////////
if( Key[ KEY_INPUT_X ]  == 1 )//Xキーが押されたら
{
 if( g_ang<4.71) {g_kazu++;g_ang=-1.57;}//角度が設定以下ならメーターを増やす
  for(i=0;i<g_kazu;i++)//角度を増やす処理
  {
   if( g_ang>=4.71) g_ang=4.71;//設定以上増やさない
   if( g_ang<4.71)//設定以下なら増やす
   {
    g_ang+=0.07;
    enemy[i].g_r=g_ang;
   }
   
  }
}
else
{//ボタンを押していない時
 for(i=0;i<g_kazu;i++)
 {
  enemy[i].anime=0;
 }
 g_ang-=4;
 if(g_ang<0) g_ang=-1.57;
 g_kazu-=4;
 if(g_kazu<0) g_kazu=0;
}


for(i=0;i<g_kazu;i++)//回転座標の計算
{
 g_r=enemy[i].g_r;//cos,sin計算用
 enemy[i].ex=cos(g_r)*g_ds+(tx+24);//表示座標の計算x
 enemy[i].ey=sin(g_r)*g_ds+(ty+24);//表示座標の計算y
 ang=atan2(enemy[i].ey-(ty+24),enemy[i].ex-(tx+24));//表示角度の計算
 DrawRotaGraph( enemy[i].ex , enemy[i].ey , 1.0f ,ang , g_haikei01[enemy[i].anime] , TRUE ) ;//メーターの表示
 enemy[i].anime++;//アニメ用
 if(enemy[i].anime>=8) enemy[i].anime=0;
}
 DrawGraph( tx , ty , g_ship , TRUE ) ;//自機表示
 DrawGraph( tx-24 , ty-24 , g_meter , TRUE ) ;//メーター枠表示
/////////////////////////////////////////////////////////////////////////////////////////////////////////
まずメーター自体を表示させて、その上にメーターの枠を表示させています。
サインコサインで円の計算をして、Xキーを押せば押すほど角度と表示メーター数を増やして
表示するって感じ。
ただ、この方法だとメーターが最大まで上がった時は、メーター描画を90回繰り返しているので
効率が悪いような気がするのですが、他に良い方法も思いつかないので、とりあえず
この方法で実装してみて重そうだったら、諦めて普通のメーターにしようかと思ってます^^;

PR
この記事にコメントする
お名前
タイトル
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
考えてみました
プログラムの事はさっぱりなのでトンチンカンなアイディアかもしれませんが、中心まで切り込みの入った、紙で作った2枚の円盤を組み合わせるイメージで・・・、

一枚はエネルギーの溜まりをグラデで表面に描き、もう一枚はマスク(溜め用の円盤より表示順位は上だがこれ自体は非表示)で初期は完全に重なっていて、ボタンを押すとマスク円盤が回転して溜め円盤の下に隠れていく・・・みたいな方法ならば簡単に出来るかも・・・?

それで本当に実現出来るかは自身無いですが(^^;
(工作は得意なので机上で考えました)
荒作 2009/05/22(Fri)23:08:08 編集
無題
荒作さん>
なかなか面白い発想ですね。私には思いつかない方法です^^
透明じゃないマスクなら実現出来そうなのですが、透明なマスク円盤ってのが表示出来そうにないんですよねぇ・・・
kt. 2009/05/23(Sat)15:05:48 編集
無題
メーターを4分割して、4分の1溜まった部分は
弧状の画像と置き換えていくというのはどうでしょうか?
これならコピー数は4分の1+(0~3)で済みます。
アニメーションさせるなら多少工夫は要りますが
パターンなりグラデ模様の画像をゲージに沿って移動させるなどで
表現できると思います。
あり 2009/05/24(Sun)11:13:12 編集
無題
ありさん>
良さそうな方法ですね。コレなら4分の1まで描画回数が軽減出来そうなので、ちょっと作って試してみます^^
kt. 2009/05/24(Sun)19:40:49 編集
この記事へのトラックバック
この記事にトラックバックする:
Twitter
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
最新コメント
[04/20 kt.]
[04/19 うぇむ]
[11/24 kt.]
[11/21 NONAME]
[11/24 kt.]
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
忍者ブログ [PR]