マリオが甲羅を蹴飛ばす処理
マリオが甲羅を蹴飛ばす処理
タイトルのとおりの疑問です
かの有名なスーパーマリオブラザーズを例にとらしていただきます
マリオが右から甲羅を蹴飛ばしたら甲羅は左に飛んでいきます
マリオが左から甲羅を蹴飛ばしたら甲羅は右に飛んでいきます
2Dの場合、この2つの処理を書いてやればいいと思うのですが
模擬3D(バードビューとか)の場合、2つの処理じゃ足りません
どの方向からも甲羅を蹴飛ばせるので2Dの時のように書こうとしたら100パターン以上です
ですので教えてほしいのです
甲羅を蹴飛ばしたらマリオがいる場所の反対方向に飛んでいく処理を
どうかお願いします 分かるところまでと言われてもしょっぱなから分からないのです
投げやりな感じはしますがごめんなさい
(プログラミングの館、DXライブラリサンプルプログラムは最後まで読んだつもりです)
かの有名なスーパーマリオブラザーズを例にとらしていただきます
マリオが右から甲羅を蹴飛ばしたら甲羅は左に飛んでいきます
マリオが左から甲羅を蹴飛ばしたら甲羅は右に飛んでいきます
2Dの場合、この2つの処理を書いてやればいいと思うのですが
模擬3D(バードビューとか)の場合、2つの処理じゃ足りません
どの方向からも甲羅を蹴飛ばせるので2Dの時のように書こうとしたら100パターン以上です
ですので教えてほしいのです
甲羅を蹴飛ばしたらマリオがいる場所の反対方向に飛んでいく処理を
どうかお願いします 分かるところまでと言われてもしょっぱなから分からないのです
投げやりな感じはしますがごめんなさい
(プログラミングの館、DXライブラリサンプルプログラムは最後まで読んだつもりです)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マリオが甲羅を蹴飛ばす処理
そもそも、あたり判定や当たった後の処理以前に好きな方向に飛ばすこと自体が出来ますか?
これが分かっていないと、その話ができないのですが。
これが分かっていないと、その話ができないのですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マリオが甲羅を蹴飛ばす処理
マリオを任意の方向に向けて歩かせる処理は書けるのでしょうか?
それができれば難しいことではないと思いますけど。
それができれば難しいことではないと思いますけど。
Re: マリオが甲羅を蹴飛ばす処理
〉〉ソフト屋さん
当たり判定ですか?丸の当たり判定は面倒くさくて見てないのですが
矩形くらいならできます(左上、右下を使うやつですね)
甲羅を好きな方向に飛ばすとはどういうことでしょうか?
表示座標をいじれるとかそういうことでしょうか?
〉〉ISleさん
マリオを任意の方向に動かすことはできます
ただ、DXライブラリしか使えないのですが・・・
当たり判定ですか?丸の当たり判定は面倒くさくて見てないのですが
矩形くらいならできます(左上、右下を使うやつですね)
甲羅を好きな方向に飛ばすとはどういうことでしょうか?
表示座標をいじれるとかそういうことでしょうか?
〉〉ISleさん
マリオを任意の方向に動かすことはできます
ただ、DXライブラリしか使えないのですが・・・
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マリオが甲羅を蹴飛ばす処理
やってみると分かりますが円のほうが簡単です。金理 李 さんが書きました:当たり判定ですか?丸の当たり判定は面倒くさくて見てないのですが
矩形くらいならできます(左上、右下を使うやつですね)
そうです。2Dのベクトル操作できるかですね。金理 李 さんが書きました:甲羅を好きな方向に飛ばすとはどういうことでしょうか?
表示座標をいじれるとかそういうことでしょうか?
シューティングの弾の処理といってもよいでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マリオが甲羅を蹴飛ばす処理
丸の当たり判定みてきました
ピタゴラスの定理なんて言われても中坊なので分からないんですが
とりあえずやり方は(コードの書き方)は覚えました
sinとcos、丸の当たり判定は初めて使ったのですが
こんな感じでしょうか?<ソフト屋さんの言っていた甲羅を好きな方向にとばすやつ
甲羅をストップさせる処理はしてないですが
ピタゴラスの定理なんて言われても中坊なので分からないんですが
とりあえずやり方は(コードの書き方)は覚えました
int x = x1-x2;
int y = y1-y2;
int range = range1+range2;
int PI/なんか;
if(x*x+y*y<range*range){
flag=1;
};
if(flag==1){
x2 += sin(angle)*speed;
y2 += cos(angle)*speed;
};
DrawGraph(x1,y1,mario.png,TRUE);
DrawGraph(x2,y2,koura.png,TRUE);
こんな感じでしょうか?<ソフト屋さんの言っていた甲羅を好きな方向にとばすやつ
甲羅をストップさせる処理はしてないですが
Re: マリオが甲羅を蹴飛ばす処理
int PIなんかはint angle = PI /なんかでした
PI/5って具体的に何度くらいなのでしょう?(とぶ方向は?)
あと、それと反対方向に甲羅を飛ばす処理もできればお願いいたします
PI/5って具体的に何度くらいなのでしょう?(とぶ方向は?)
あと、それと反対方向に甲羅を飛ばす処理もできればお願いいたします
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マリオが甲羅を蹴飛ばす処理
PIが180度ですので、180/5で36度ですね。
この式の場合
x2 += sin(angle)*speed;
y2 += cos(angle)*speed;
0度でyがプラス方向に移動します。画面方向で言うと下。
90度でxがプラス方向なので画面方向で右。
180度でyがマイナス方向なので画面方向で上。
270度でxがマイナス方向なので画面方向で左。
となりますので、36度だと下ちょい右方向へ移動します。
衝突の場所の反対方向に飛ばすには、衝突したマリオと甲羅のX,Yの相対座標でマリオに対する甲羅の角度を求めます。
使う関数はatan2です。これも三角関数ですね。
高校レベルの数学ですが使い方さえ覚えれば大丈夫です。
angle = atan2( 甲羅X-マリオX,甲羅Y-マリオY)
でマリオから見た甲羅の角度が求まりますので、これを甲羅の移動方向に使ってください。
この式の場合
x2 += sin(angle)*speed;
y2 += cos(angle)*speed;
0度でyがプラス方向に移動します。画面方向で言うと下。
90度でxがプラス方向なので画面方向で右。
180度でyがマイナス方向なので画面方向で上。
270度でxがマイナス方向なので画面方向で左。
となりますので、36度だと下ちょい右方向へ移動します。
衝突の場所の反対方向に飛ばすには、衝突したマリオと甲羅のX,Yの相対座標でマリオに対する甲羅の角度を求めます。
使う関数はatan2です。これも三角関数ですね。
高校レベルの数学ですが使い方さえ覚えれば大丈夫です。
angle = atan2( 甲羅X-マリオX,甲羅Y-マリオY)
でマリオから見た甲羅の角度が求まりますので、これを甲羅の移動方向に使ってください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マリオが甲羅を蹴飛ばす処理
なるほどてっきりPIってのがまた必要かと思っていましたがそうじゃないんですね
atan2は確か追尾弾の処理の時に意味が分からなくて断念していたものですが
使い方を教えてくださったのでなんとかできそうです
それと、甲羅の跳ね返り処理なのですが
単純に符号を反転さしてやればいいですかね?
(この場合は、スピードの値を反転さしてやればいいのかな?)
atan2は確か追尾弾の処理の時に意味が分からなくて断念していたものですが
使い方を教えてくださったのでなんとかできそうです
それと、甲羅の跳ね返り処理なのですが
単純に符号を反転さしてやればいいですかね?
(この場合は、スピードの値を反転さしてやればいいのかな?)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マリオが甲羅を蹴飛ばす処理
単純に跳ね返るならそうですが、当たる場所を考慮して跳ね返す必要はないのでしょうか?金理 李 さんが書きました:それと、甲羅の跳ね返り処理なのですが
単純に符号を反転さしてやればいいですかね?
(この場合は、スピードの値を反転さしてやればいいのかな?)
物に当たったときに元来た方向に真っ直ぐ跳ね返るのはあんまりないんじゃないですか?
壁に横からボールを当てたら跳ね返る場合はどうなるか現実を考えてみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マリオが甲羅を蹴飛ばす処理
ですよね・・・
この場合は上下からまたは左右から当たった場合の
処理を別々に考えてやる必要がある気がするのですが
丸の当たり判定じゃいい方法が思いつかないんですよね
(上下左右に移動している場合それぞれの方向に
フラグを持たせてやるというやりかたも思いついたのですが
それも間違っている気がしてきましたし)
この場合は上下からまたは左右から当たった場合の
処理を別々に考えてやる必要がある気がするのですが
丸の当たり判定じゃいい方法が思いつかないんですよね
(上下左右に移動している場合それぞれの方向に
フラグを持たせてやるというやりかたも思いついたのですが
それも間違っている気がしてきましたし)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マリオが甲羅を蹴飛ばす処理
丸いものと衝突する場合は円で良いと思いますが、壁やブロック状のものは四角の当たり判定で良いと思います。
当たり判定で当たった四角の場合は、辺の角度から反射角を計算する必要があります。
丸の場合は、更に面倒くさい計算が入りますね。
当たり判定で当たった四角の場合は、辺の角度から反射角を計算する必要があります。
丸の場合は、更に面倒くさい計算が入りますね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マリオが甲羅を蹴飛ばす処理
いろんなサイトを見ていたのですが
反射角=2×反射面の角度‐入射角
らしいのですがこれもatan2を使うのでしょうか?
反射面の角度というのがよくわかりませんが・・・
反射角=2×反射面の角度‐入射角
らしいのですがこれもatan2を使うのでしょうか?
反射面の角度というのがよくわかりませんが・・・
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マリオが甲羅を蹴飛ばす処理
反射面の角度は、反射面の傾き角度です。金理 李 さんが書きました:いろんなサイトを見ていたのですが
反射角=2×反射面の角度‐入射角
らしいのですがこれもatan2を使うのでしょうか?
反射面の角度というのがよくわかりませんが・・・
例えば、
x2 += sin(angle)*speed;
y2 += cos(angle)*speed;
の数式で支配されているのならば、地面に水平な壁は90度の傾きをもつ反射面です。
>反射角=2×反射面の角度‐入射角
それは単なる中学数学で計算できますよ。
例えば、
入射角:0度
反射面の角度:90度
なら
反射角:180度
です。
色々計算して理解に努めてみてください。
PIを使うラジアン角でも同様です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マリオが甲羅を蹴飛ばす処理
体は中坊でも頭は小坊←これ言うの忘れてました
試せって言われても
合っているか不安なので聞きます(コンパイラはさっきからデリーティングとか言って動かないし)
90度って│←こんな感じの壁ってことですか?
入射角0度って数値はありえるんですか?これじゃあ壁に当たらない気がします
(バカなこと言ってたらすいません)
式はangle = 2*90-angleこんな感じでしょうか?(バカなこと言っ(略))
試せって言われても
合っているか不安なので聞きます(コンパイラはさっきからデリーティングとか言って動かないし)
90度って│←こんな感じの壁ってことですか?
入射角0度って数値はありえるんですか?これじゃあ壁に当たらない気がします
(バカなこと言ってたらすいません)
式はangle = 2*90-angleこんな感じでしょうか?(バカなこと言っ(略))
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マリオが甲羅を蹴飛ばす処理
使い方は理解しないと困るので頑張りましょう。
この数式で支配される世界では、
x2 += sin(angle)*speed;
y2 += cos(angle)*speed;
│ ← は0度の壁です。
── ← が90度の壁です。
移動方向と角度の関係はこうなります。()中はPIを使ったラジアン角。 この数式の時にしか通用しないので注意してくださいね。
>式はangle = 2*90-angleこんな感じでしょうか?(バカなこと言っ(略))
度数法で壁の角度が固定なら正解です。
一般化すると
out_angle = 2*kabe_angle-in_angle
ですね。
この数式で支配される世界では、
x2 += sin(angle)*speed;
y2 += cos(angle)*speed;
│ ← は0度の壁です。
── ← が90度の壁です。
移動方向と角度の関係はこうなります。()中はPIを使ったラジアン角。 この数式の時にしか通用しないので注意してくださいね。
>式はangle = 2*90-angleこんな感じでしょうか?(バカなこと言っ(略))
度数法で壁の角度が固定なら正解です。
一般化すると
out_angle = 2*kabe_angle-in_angle
ですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マリオが甲羅を蹴飛ばす処理
│が0°、━が90°だとしたら
四角の当たり判定を作るときに縦の辺と横の辺の
二つの当たった場合の処理を考えなくてはいけないんじゃないんですか?
質問しっぱなしで悪いのですが縦の辺と横の辺を分ける方法なんて知らないんですが・・・
四角の当たり判定を作るときに縦の辺と横の辺の
二つの当たった場合の処理を考えなくてはいけないんじゃないんですか?
質問しっぱなしで悪いのですが縦の辺と横の辺を分ける方法なんて知らないんですが・・・
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マリオが甲羅を蹴飛ばす処理
そうか、四角の当たり判定後に線分の交差判定がいりますね。
線分とは、無限大の長さが有る直線の一部分のこと。
線分1:四角の辺
線分2:甲羅の移動の軌跡
とします。これを線分の交差判定で交差するか判定することでどの辺と衝突したか分かります。
VBですが概念理解
「もっと簡単に-線分交差判定-」
http://www5d.biglobe.ne.jp/~tomoya03/sh ... ection.htm
よく分からなくても使い方だけでも理解すればOK。
「線分の交差判定-C/C++-水無瀬の部屋」
http://katsura-kotonoha.sakura.ne.jp/pr ... 0015.shtml
線分とは、無限大の長さが有る直線の一部分のこと。
線分1:四角の辺
線分2:甲羅の移動の軌跡
とします。これを線分の交差判定で交差するか判定することでどの辺と衝突したか分かります。
VBですが概念理解
「もっと簡単に-線分交差判定-」
http://www5d.biglobe.ne.jp/~tomoya03/sh ... ection.htm
よく分からなくても使い方だけでも理解すればOK。
「線分の交差判定-C/C++-水無瀬の部屋」
http://katsura-kotonoha.sakura.ne.jp/pr ... 0015.shtml
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マリオが甲羅を蹴飛ばす処理
今更の返信で申し訳ないですが言わせてください
線分なんていきなり知らんものが出てきたから(中学でやりましたが)混乱しています
線分を使うってことは左上、右上、左下、右下のすべての点のxとyの情報が入りますね
それと甲羅の移動の軌跡ってなんですか?どうやって調べるのでしょう
無知なうえにバカですいません
(先ほど、ここの掲示板を使っていたのを忘れて新しいHNで投稿してしまいました
この名前で統一しますのでお許しください)
線分なんていきなり知らんものが出てきたから(中学でやりましたが)混乱しています
線分を使うってことは左上、右上、左下、右下のすべての点のxとyの情報が入りますね
それと甲羅の移動の軌跡ってなんですか?どうやって調べるのでしょう
無知なうえにバカですいません
(先ほど、ここの掲示板を使っていたのを忘れて新しいHNで投稿してしまいました
この名前で統一しますのでお許しください)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マリオが甲羅を蹴飛ばす処理
いりますね。当たり判定できる以上は情報はあるはずです。金理 さんが書きました:線分なんていきなり知らんものが出てきたから(中学でやりましたが)混乱しています
線分を使うってことは左上、右上、左下、右下のすべての点のxとyの情報が入りますね
移動開始座標と角度と速度で求めた移動後の座標を結ぶ線分が軌跡です。金理 さんが書きました:それと甲羅の移動の軌跡ってなんですか?どうやって調べるのでしょう
無知なうえにバカですいません
ゲームを作る以上は数学は避けれません。頑張りましょう。
教科書を引っ張り出してきて勉強するのも手です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。