自機ショットに角度をつけたいのですが
自機ショットに角度をつけたいのですが
龍神録の館で紹介されいてる自機が発射するショットは真っ直ぐ進んでますよね。
あれを、シューティンゲームの館のショットみたいに斜めに発射できるようにしたいのですが、どこを変更すればいいのでしょうか?
あれを、シューティンゲームの館のショットみたいに斜めに発射できるようにしたいのですが、どこを変更すればいいのでしょうか?
Re:自機ショットに角度をつけたいのですが
x方向のスピードってどう変えるんですか?
cshot[k].spd=20;
のところがスピードというのはわかったんですけど、これを、
1と、3のショットならx-10
2と、4のショットならx+10
とするにはどうすればよいのでしょうか?
cshot[k].spd=20;
のところがスピードというのはわかったんですけど、これを、
1と、3のショットならx-10
2と、4のショットならx+10
とするにはどうすればよいのでしょうか?
Re:自機ショットに角度をつけたいのですが
>1と、3のショットならx-10
>2と、4のショットならx+10
言われている事が良く分かりませんが
私の考えでは、弾の登録時に
cshot[k].angle=-PI/2;
としている箇所を適当に直してやればいいと思います。
>2と、4のショットならx+10
言われている事が良く分かりませんが
私の考えでは、弾の登録時に
cshot[k].angle=-PI/2;
としている箇所を適当に直してやればいいと思います。
Re:自機ショットに角度をつけたいのですが
すいません。
>1と、3のショットならx-10
>2と、4のショットならx+10
というのは、添付した画像(1)のことです。
cshot[k].angle=-PI/2;
の部分は直し方がわからないので、とりあえず斜めに発射するということで4way弾の角度をそのまま入れたら、斜めにはいくんですけど90°曲がってしまいます。(添付した画像(2))
どうすれば前に飛んで行くようになりますか?
>1と、3のショットならx-10
>2と、4のショットならx+10
というのは、添付した画像(1)のことです。
cshot[k].angle=-PI/2;
の部分は直し方がわからないので、とりあえず斜めに発射するということで4way弾の角度をそのまま入れたら、斜めにはいくんですけど90°曲がってしまいます。(添付した画像(2))
どうすれば前に飛んで行くようになりますか?
Re:自機ショットに角度をつけたいのですが
毎回毎回すいません。
cshot[k].angle=-PI/2;
の、-PI/2の部分をそのまま、
(PI*4)/3(PI*5)/3-PI/2
にすると、エラーが出てしまうんですが・・・。
①の角度=、②の角度=・・・というように、別々に指定することはできませんか?
cshot[k].angle=-PI/2;
の、-PI/2の部分をそのまま、
(PI*4)/3(PI*5)/3-PI/2
にすると、エラーが出てしまうんですが・・・。
①の角度=、②の角度=・・・というように、別々に指定することはできませんか?
Re:自機ショットに角度をつけたいのですが
さすがに列挙しても無理です。
(17章目の)ch0_shot_patternやch1_shot_patternといった関数内では①、②、③、④をiの値で割り振ってます。
つまり、iの値に応じてcshot[k].angleを調整すると良いでしょう。
(17章目の)ch0_shot_patternやch1_shot_patternといった関数内では①、②、③、④をiの値で割り振ってます。
つまり、iの値に応じてcshot[k].angleを調整すると良いでしょう。
Re:自機ショットに角度をつけたいのですが
横レス失礼します角度をつける際にこのような方法では駄目なのでしょうか?
// ビームの表示 ---------------------------------------------------------------- for ( i=0;i<BEAM_MAX;i++ ) { if (gBeam.flg==ON) { if(gBeam.type==TYPE1) // 真ん中 DDRectBltSprite( DDSCREEN, (int)gBeam.x, (int)gBeam.y, BEAM_XSIZE, BEAM_YSIZE, sBeam, 0, BEAM_YSIZE*2, BEAM_XSIZE, BEAM_YSIZE ); else if(gBeam.type==TYPE2) // 右上1 DDRectBltSprite( DDSCREEN, (int)gBeam.x, (int)gBeam.y, BEAM_XSIZE, BEAM_YSIZE, sBeam, 0, BEAM_YSIZE*3, BEAM_XSIZE, BEAM_YSIZE ); else if(gBeam.type==TYPE3) // 右下1 DDRectBltSprite( DDSCREEN, (int)gBeam.x, (int)gBeam.y, BEAM_XSIZE, BEAM_YSIZE, sBeam, 0, BEAM_YSIZE, BEAM_XSIZE, BEAM_YSIZE ); else if(gBeam[i].type==TYPE4) // 右上2 DDRectBltSprite( DDSCREEN, (int)gBeam[i].x, (int)gBeam[i].y, BEAM_XSIZE, BEAM_YSIZE, sBeam, 0, BEAM_YSIZE*4, BEAM_XSIZE, BEAM_YSIZE ); else if(gBeam[i].type==TYPE5) // 右下2 DDRectBltSprite( DDSCREEN, (int)gBeam[i].x, (int)gBeam[i].y, BEAM_XSIZE, BEAM_YSIZE, sBeam, 0, 0, BEAM_XSIZE, BEAM_YSIZE ); } }
Re:自機ショットに角度をつけたいのですが
恐らくラジアンと角度についての対応を詳しくご存じないのだと思います。
円周率をご存知ですよね。あの3.141592....という奴です。
あれをπをPIとしてdefineで予め定義してありますね。
これは180°を示します。一周360°は2*PIですね。
ここで、-90°と270°は同じ方向であることと、
xは増えると右へ
yは増えると下へ向くことを考えると、-90°か270°は真上になります。
つまり-PI/2か1.5*PIですね。
サンプルではこの前者が使われています。
だから、真上より10°位ずらしたければ
-PI/2 ± PI/10
ということになります。これで角度がかえられます。
スピードは.spdの値を変更することでかえられます。
これらは
void calc_cshot()
で計算されています。
//ショットの移動計算
void calc_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot.flag==1){
int dranx=(int)(cshot.spd+11/2),drany=(int)(cshot.spd+55/2);
cshot.x+=cos(cshot.angle)*cshot.spd;
cshot.y+=sin(cshot.angle)*cshot.spd; cshot.cnt++;
if(cshot[i].x<-dranx || cshot[i].x>FMX+dranx ||
cshot[i].y<-drany || cshot[i].y>FMY+drany)//画面から外れたら
cshot[i].flag=0;
}
}
}
この部分をしっかり理解されると疑問も晴れると思います。
コサインとサインを利用して角度からx成分、y成分にわけ、スピードをかけています。
もし何かここでわからなければまたご質問下さい。
Re:自機ショットに角度をつけたいのですが
関数自体はかれこれ数年前に使ったものでソースを見ても分からないですがまぁDirectX の2D汎用関数ではあるのですがどう答えたらいいですかね??例えばDirectDraw を利用したゲームアプリケーションをサポートするヘルパー関数を使ってますとかなら答えられるんですが・・・
Re:自機ショットに角度をつけたいのですが
関数の仕様はまぁ定義されていると思われる文字列を見たら大体想像出来ますが、
例えばこんな風に
http://homepage2.nifty.com/natupaji/DxL ... html#R3N10
何の値を引数にしているのか説明してもらえると助かります。
例えばこんな風に
http://homepage2.nifty.com/natupaji/DxL ... html#R3N10
何の値を引数にしているのか説明してもらえると助かります。
Re:自機ショットに角度をつけたいのですが
以下のような事でいいんですかね?
// ■スプライト処理つきサーフェス間の画像の転送
// スプライト処理つきサーフェス間の画像の転送を行う.
// サイズが違う場合には,拡大/縮小が行われる.
//
// 宣 言) void DDRectBltSprite(
// LPDIRECTDRAWSURFACE7 pDestSurface,
// int dx, int dy, int dw, int dh,
// LPDIRECTDRAWSURFACE7 pSrcSurface,
// int sx, int sy, int sw, int sh );
//
// 引 数) pDestSurface : 転送先サーフェス
// dx, dy : 転送先左上座標 (x,y)
// dw, dh : 転送先領域(幅と高さ)
// pSrcSurface : 転送元サーフェス
// sx, sy : 転送元左上座標 (x,y)
// sw, sh : 転送元領域(幅と高さ)
//
// 戻り値) なし
// ■スプライト処理つきサーフェス間の画像の転送
// スプライト処理つきサーフェス間の画像の転送を行う.
// サイズが違う場合には,拡大/縮小が行われる.
//
// 宣 言) void DDRectBltSprite(
// LPDIRECTDRAWSURFACE7 pDestSurface,
// int dx, int dy, int dw, int dh,
// LPDIRECTDRAWSURFACE7 pSrcSurface,
// int sx, int sy, int sw, int sh );
//
// 引 数) pDestSurface : 転送先サーフェス
// dx, dy : 転送先左上座標 (x,y)
// dw, dh : 転送先領域(幅と高さ)
// pSrcSurface : 転送元サーフェス
// sx, sy : 転送元左上座標 (x,y)
// sw, sh : 転送元領域(幅と高さ)
//
// 戻り値) なし
Re:自機ショットに角度をつけたいのですが
上のコードと弾に角度を付けて発射することとどのように関係するのかよくわからないですが、
コードはかなり綺麗に書いていらっしゃいますし、試してみて思い通りにいけば、
それでいいのではないかと思いますよ。
コードはかなり綺麗に書いていらっしゃいますし、試してみて思い通りにいけば、
それでいいのではないかと思いますよ。
Re:自機ショットに角度をつけたいのですが
まぁそうなんですがね
ちなみに関連するコードは全て横シューティング用のコードだったりします。
ライブラリー関連は全て学校の担任が独自に製作したものを使用させていただいて卒業向けに作った物でした。
結局ゲーム学科を卒業した物のネットワークエンジニアに転向してしまったため分からない事が多いんですよね。
また不明な点を調べた結果と併せていくつか質問するかもしれませんがよろしくお願いいたします。
ちなみに関連するコードは全て横シューティング用のコードだったりします。
ライブラリー関連は全て学校の担任が独自に製作したものを使用させていただいて卒業向けに作った物でした。
結局ゲーム学科を卒業した物のネットワークエンジニアに転向してしまったため分からない事が多いんですよね。
また不明な点を調べた結果と併せていくつか質問するかもしれませんがよろしくお願いいたします。
Re:自機ショットに角度をつけたいのですが
龍神録の自機ショットのプログラムををシューティングゲームの館のショットのプログラムに置き換える時に
GV.cppやdefine.cppとかに追加しなきゃいけないものってありますか?
GV.cppやdefine.cppとかに追加しなきゃいけないものってありますか?
Re:自機ショットに角度をつけたいのですが
変数名も関数名も違うので、GV.hなどに変数名を追加しただけでは機能を移植できないと思います。
自機ショットに関係するものはch_tに含まれる構造体の内容と画像用変数、そしてcshot.cppに書かれている内容が主だと思いますから、
そこを確認すれば良いと思います。
関数を移植する時は、内容をしっかり理解して移植する必要がありそうです。
自機ショットに関係するものはch_tに含まれる構造体の内容と画像用変数、そしてcshot.cppに書かれている内容が主だと思いますから、
そこを確認すれば良いと思います。
関数を移植する時は、内容をしっかり理解して移植する必要がありそうです。