Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
140 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 6088
次のページ(過去)
返信[9]
親投稿
Hanzo rzsense
ORE以外に定義した配列はどうなったのかを心配される向きもあるでしょうが、これについては、複素数という概念の説明が不可避なので、現在の私の科学力では、恐縮ながらわかりやすく解説することができません。 ご要望があれば、勉強して回答致します。
1そうだね
プレイ済み
返信[8]
親投稿
Hanzo rzsense
以上で下準備は終了です。次はFFTですが、 FFT ORE,OIM,IRE,IIM:ARYOP #AOPMUL,ORE,ORE,ORE これだけです。これだけで、配列OREの中に、どの周波数成分の音がどれだけ含まれるかという情報が格納されます。 具体的には、ORE[8191]が、8180Hz(サンプリングレート)の音の強さ、ORE[0]が0Hzの音の強さを表します。ORE[4096]は8180Hzの半分、つまり4090Hzの音の強さ、ということになります。ますはこれに従って、横軸に周波数、縦軸にORE[]としてグラフを描いてみましょう。 ちなみに、FFTでは、配列の半分より上のデータ(この場合は要素番号が4096以上のデータ)は正しくありません。これはいわゆる「標本化定理」というものですが、まぁあまり深く考えず、そういうものだと思ってください。
1そうだね
プレイ済み
返信[6]
親投稿
Hanzo rzsense
せっかくなので、やってみましょう。 まず、配列を4つばかり定義して、中身を0に統一します。 DIM IRE[8192],IIM[8192],ORE[8192],OIM[8192] FILL IRE,0:FILL IIM,0:FILL ORE,0:FILL OIM,0 次に、サンプリングレートを8180Hzとして、8ビットでも16ビットでもいいので符号付きで録音し、配列IREにマイク音声データをコピーします。サンプリングレート8180Hzで、要素数8192の配列なら、1秒ちょっとぶんの音声データになります。このあたりは大丈夫ですよね?
2そうだね
プレイ済み
返信[15]
親投稿
Hanzo rzsense
たびたびすみません。 元々のリストの38行目あたり(回転変換を元に戻す部分)に、以下を追加してみてください。 X[C]=2*RD*CO+X[N]:Y[C]=2*RD*SI*Y[N] スプライト同士がめり込もうとすると、無理やり引き離します。
0そうだね
プレイ済み
返信[3]
親投稿
Hanzo rzsense
単音の周波数を知りたいのであれば、音の波形のピークとピークの間の時間を測って、その逆数を取ればそれが周波数になりますが、恐らくは和音の中に含まれる周波数を全て知りたいのだと思われるので、前のお二方のご指摘どおり、FFT(高速フーリエ変換)という方法を使って、周波数を計算するのがベストです。 もし「高度サウンドユニット」をお持ちであれば、このFFTを簡単に実行できますが、そうでなければ、FFTのアルゴリズムをご自分で作る必要があります。
2そうだね
プレイ済み
返信[14]
親投稿
Hanzo rzsense
ただ、多分、上記のことをやっても、最終的には、めり込んだ状態になってしまうと思います。このめり込みを完全に避けるためには、スプライトが重なったときのスプライトの位置補正を適切に行う必要がありますが、恐縮ながら、その方法については現時点では no idea です…
0そうだね
プレイ済み
返信[13]
親投稿
Hanzo rzsense
スプライトの数のわりに、反発係数Eが小さ過ぎるのだと思います。何かに衝突するたびに、E掛けで速度が失われるので、スプライトの数が多いほど、衝突する機会が増え、すぐに減速するのでは? 重力がかかっているなら、スクリーンショットのようにスプライトが下に溜まるのは道理です。スプライトをもうちょっと減らして、Eを1に極めて近い1未満の値(0.99とか)にして試してみましょう。 なお、衝突判定の半径は、実際のスプライトサイズより小さめにしているので、スプライトがたくさんある場合は、最終的にめり込み気味の状態で安定することになります。それがどうしてもイヤな場合は、RDの値を大きくしてみてください(上限16)
1そうだね
プレイ済み
返信[10]
親投稿
Hanzo rzsense
この回転変換、円と直線の衝突判定とか、三角形同士の衝突判定のときとかにも応用できるテクニックなので、覚えておいて損はないです。 サンプルプログラムはそのうち消しちゃいますけど、もう大丈夫ですよね?
0そうだね
プレイ済み
返信[8]
親投稿
Hanzo rzsense
33~37行目は、自分と相手が近づいているのか、遠ざかっているのかの判定と、近づいているときの反発処理です。自分と相手が近づいているか遠ざかっているかは、両者の回転後の速度のX成分を比較して判断します。反発処理は基本、両者の速度のX成分を交換するだけです。両者が遠ざかっているなら、何もせず放っておきます。 38~41行目は、速度成分を逆方向に回転、つまり元に戻す処理です。 回転変換についての詳細は「回転 座標変換」でインターネット検索してみましょう。
1そうだね
プレイ済み
返信[7]
親投稿
Hanzo rzsense
解説しよう。(これ、懐かしいと思ってくれる人いるかな) まず、49~64行目は、お気づきのとおり、外枠との衝突判定です。外枠からはみ出したときに座標を修正しています。速度の反転は、速度成分が外向きのときだけ行っています。 このプログラムのキモは、28~41行目です。 まず、28~32行目では、自分の中心座標を原点として、自分の中心座標と衝突相手の中心座標を結ぶ直線がX軸と重なるように、自分および衝突相手の速度成分を回転しています。変数名にNがついているのが自分、Cがついているのが衝突相手です。回転の計算では、回転角のサインとコサインが必要で、それを求めているのが28行目です。
1そうだね
プレイ済み
返信[3]
親投稿
Hanzo rzsense
You can judge collision by distance between two objects. You can calculate it with the Pythagorean theorem as follows. DX=X2-X1:DY=Y2-Y1 D=SQR(DX*DX+DY*DY):'distance between two objects
0そうだね
未プレイ
返信[3]
親投稿
Hanzo rzsense
添付の一番上のものをダウンロードして試してみてください。 解らない点は、ご遠慮なく訊いてください。
0そうだね
プレイ済み
返信[20]
親投稿
Hanzo rzsense
・配列の値が最大(最小)となるときの配列の要素番号を返す関数があれば… ・水平走査線ごとにBGやスプライトの座標・拡大率・回転角を変えられるようにできれば… ・TALKで女声、および英語の発音ができれば…
4そうだね
プレイ済み
返信[7]
親投稿
Hanzo rzsense
Biography on my profile? I've written just introduction to keys of SmileBASIC programs I've made as follows. RAPAE8D: it includes various kinds of programs CACQ33L4: aircraft landing simulator JEE3V3NE: samurai sword action L4DXQ384: like "simon says" but it depends on Japanese Y33NQ54S: wandering around the maze VKAKV3ZP: car racing DSEEX3QJ: supersonic kite racing DEEE33Q4: golf
1そうだね
未プレイ
返信[5]
親投稿
Hanzo rzsense
Not only game's names Indi Jones- Indiana Jones Anna Yuki- Frozen Inside Head- Inside Out
2そうだね
未プレイ
返信[10]
親投稿
Hanzo rzsense
おっと、話の腰を揉んでしまいまして恐縮です。 (このやりとり、既視感が…) 最後の1対1対戦の決着がつくとき、私には確かに閃光が見えました。 ズームとか間の取り方とかが絶妙ですね。 自分のゲームのエフェクトを作る際に、参考にさせていただきます。
0そうだね
プレイ済み
返信[5]
親投稿
Hanzo rzsense
一応「貴公子」には理由があって、まげさんはmkII時代、コンソールを自在に操るプログラマーとして定評があったので、ニックネームをつけるなら「コンソールの何々」だな、と。 で、今は亡きF1ドライバー「アイルトン・セナ」が「音速の貴公子」と呼ばれていたのをなぜだか思い出しまして、語呂が似ているもので「コンソールの貴公子」と呼ばせていただくに至ったわけです。
1そうだね
プレイ済み
返信[4]
親投稿
Hanzo rzsense
ただ、残念なことに、この方法だと正しいfpsは出せません。なぜなら、1フレームは大体16.6msecくらいなんですが、MILLISECは整数なので「.6」の部分が扱えないためです。なるべく正確なfpsを出すには、次のようにして60フレームごとにfpsを計算するのはいかがでしょうか? WHILE TRUE MS=MILLISEC FOR I=0 TO 59:VSYNC 1:NEXT I ?60*1000/(MILLISEC-MS) WEND
2そうだね
プレイ済み
返信[2]
親投稿
Hanzo rzsense
あ、ゼロ除算を避けないと。 FI=MILLISEC-MS IF FI>0 THEN ?1000/FI
0そうだね
プレイ済み
返信[1]
親投稿
Hanzo rzsense
?1000/(MILLISEC-MS) ですね。 fpsとは、1秒(1000msec)間のフレーム数ですので。
2そうだね
プレイ済み