貴様ら!ブロック崩し作るので見てください
■ このスレッドは過去ログ倉庫に格納されています
0001ヒッキー@プログラミング
NGNG作りたくなりました。
Bitbltなど使う予定ですが、細かい技術がないので、
小出しにプログラムしようと思います。
(タマが動くだけとか、キーボードで自機を動かすだけとか)
オナーニスレだけどよろしくね。
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNG自力で描画したりして、基礎を覚えるのも良いよ。
VBやDirectXのインターフェース覚えるのを頑張ってもいいが、
こっちは一生使える知識だし。
時代錯誤か?
0054デフォルトの名無しさん
NGNG俺が昔VBで作ったブロック崩しが変な動作だったのは点で判定したせいだったのか。
0055デフォルトの名無しさん
NGNG画面を正方形にして、上下左右の各辺にプレイヤーを配置する形で。
005640=44=50
NGNG連続書き込みで悪いけど、やり方教えて。
特に、自前でバッファを用意するってとこ。
VBだけで可能なの?
0057デフォルトの名無しさん
NGNGVBでやる利点無いよね?
中々面白そうなので、俺が作る事にした(w
剛体力学ブロック崩し。
005940=44=50=56
NGNG初心者がプログラミングを勉強しやすいのが利点。
なんてったって、インタプリタだし。
0060デフォルトの名無しさん
NGNG線でもダメなら
面でやれ
0061デフォルトの名無しさん
NGNG1は?
0062ヒッキー@プログラミング
NGNGありがとうございます。がんばります。
>>40
うい〜。vbKeyLeftとかで矢印つかえるようになりました!
>>47
C++ですか…MFCというのがどうもよく分からなくて放置してました。
>>49
線で衝突というのはどうしましょう?四角く範囲区切るということですか?
>>51
難しいです…
>>52
完成したあかつきにはどっかから画像探して貼り付けます。
>>53
はーい。がんばりたいと思います。
>>55
Winsockコントロール使ったことがあるので、何とかなるかも。
最後に考えます
>>61
帰ってきました。
0063デフォルトの名無しさん
NGNG0064ヒッキー@プログラミング
NGNG↑次のファイルうぷしました。
とりあえず、Y軸方向へ進むときに角度を計算しました。
>>36氏に感謝。
>>63
なるだけがんばります。
006540
NGNGあと、タイマーコントロールを使わないで、
代わりにループさせると処理が安定して早くなる。
VBのタイマーコントロールは優先度が一番低いらしいから。
で、ループ処理のなかに DoEvents と sleep をいれると、
うまくOSにも制御が戻るから。
sleep はAPIで、使い方は sleep(100)とか。
括弧の中の数字が、アプリの実行の停止時間で、1=0.001秒だったはず。
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG似たスレどこかで見ました。
006840
NGNG右に移動中、右からきた玉が自機を透ける。
0069ヒッキー@プログラミング
NGNGほおほお。sleep入れてみました。
VBのタイマーコントロールは怪しいらしいですね。
APIのGetTickCount使うようにしました。
>>66
脱がしたいです。
>>67
おもしろかったので真似しましたゴルァ!
0070ヒッキー@プログラミング
NGNGありがとうございます。
なんか、あまり考えずに書いたので、右側が跳ね返るときも
左側が跳ね返るときも同じ処理を書いていたようです…鬱
04を再アップしました
007140
NGNG了解!
俺は初心者だし、お互いがんばろう。
ついでに言うと、GetTickCountの使い方がわからん(ー_ー;
0072デフォルトの名無しさん
NGNGスレタイトルの最初が>貴様ら<で、最後が>ください<になってるので
思わずみてしまった。
伽藍とバザール的良スレ。最後までやりとげてほしい。
このスレと結果報告を兼ねるHPで有意義な情報を公開にょ
0073デフォルトの名無しさん
NGNG毎回SIN/COSを計算させずに 変数VX,VYを使う事
ball_x = ball_x + VX;
ball_y = ball_y + VY
そして、壁にあたれば VX,VYを
左右壁なら VX = -1*VX 上の壁がラケットなら VY=-1*VY と符号を変更する
その場合-1ではなく -1.0001 のようにするとだんだん速度が大きくなって面白い
2、あたり判定は ball_x/y と VX/Y を足した後の線分との距離を使う事
ラケットとなら線分の交差と点との距離を使え
交差なら 交差判定で検索しろ
点と線分の距離は
http://pc.2ch.net/test/read.cgi/tech/1003559977/3
0074
NGNG>>36
角度でやると、衝突後の反射ベクトル求めるのが大変だから、
素直にxyのベクトルでやった方がいいのでは?
応用(たとえば重力とか)やろうとしたときも、角度と長さでやると
後々困難になるしー。
>>62
線での衝突判定というのは、ボールのすり抜け防止の策です。
現在の位置と次ステップの位置の二点を結ぶ直線として、目的の線分との
交差判定を行います。
こうすると、どんなに速いボールでもブロックすり抜けなどの検出エラーは
出ませんぜ。
まあ今は壁だけの段階だからまだ関係ないけどね。
頑張ってね。
0075
NGNGあらら、かぶった。ごめん
0076ヒッキー@プログラミング
NGNGGetTickCountは、Windowsが起動してからの時間をミリ秒単位で
返す関数のようです。引数は無しです。
で、10ms経った時間を計ろうと思ったら、現在時間から前に計った時間を
引いて、10を超えたら…みたいに書いたらいいみたいです。
>>72
はい、なんとかHPにまとめてみたいと思います。
有意義な意見をくださる方がイパーイいらっしゃるので、
僕の為にだけではもったいないです。
>>73
そうですよね。Sinとか毎回計算してたら遅くなりそうですしね。
んで、線分の交差を検索したところ、外積やら知らない単語が
出てきたので、それを調べようとして泥沼状態です…
>その場合-1ではなく -1.0001 のようにするとだんだん…
ほおほお、たしかに(藁 取り入れてみたいです。
>>74
そういうことでしたか。ようやく納得できました。
ありがとうございます!
0077デフォルトの名無しさん
NGNGhttp://piza2.2ch.net/tech/kako/996/996157997.html
0078デフォルトの名無しさん
NGNGバーの端っこにぶつかったら急角度で跳ね返る、
要するに物理法則を無視した動きをするけどその辺はどのように解決する?
その辺をどうにかしないと、
バーやブロックや壁の垂直面・水平面が全て水平だったらボールの動く角度は
常に一定になるけど……。
0079デフォルトの名無しさん
NGNGアナログなコントローラでないと無理だけど。
008040
NGNG俺としては、物理学的なものは無視して、まずは形にすることをお勧めする。
0081デフォルトの名無しさん
NGNG単純に端に8ピクセルより近ければ 端からの距離を Dとして
VY:=-VT : VX=VX*D/8 とかでもそれなり
0082デフォルトの名無しさん
NGNGそれじゃボールのスピードが変わっちゃうYO!
0083デフォルトの名無しさん
NGNGリアルタイムゲームでキー押下イベントを使うVBアプリは糞と呼ばれます
描画はバックバッファを使うこと
非表示のPictureコントロール(AutoRedraw=True)に全部描いてから
FromにPictureコントロールの内容をコピーしよう
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNG>>83
キーコード
カーソルキー左 37 、カーソルキー上 38、シフトキー 16
だっけ?左右逆かも。
0087デフォルトの名無しさん
NGNGvbKeyLeftとかってやつな
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNG0090ヒッキー@プログラミング
NGNG↑次のファイルうぷしました。なんか、めり込みます…
線で跳ね返る処理をコピペしたら、おかしくなりました。
タマに、斜め方向に線をいれてます。(X状に)
>>77
リンク先、参考にさせてもらいます。どもです。
>>78
そうですね〜。完成が見えてきたら考えてみます。
>>79
アルカノイドのコンパネみたいなやつあったら嬉しいんですけどね(藁
>>80
うい〜。形を作ることを考えます。
>>81
そうですね〜。まずは好きにやってみます。
>>83
う…今回うぷした分でキー入力は修正しました。さんくす。
>>85
うい。してみました。
>>87
APIでキー入力の処理をしたので、VK_LEFTに変わってしまいました。
>>88
う〜ん、どのくらいでしょう。
趣味でたまにちょくちょくするくらいで、
期間的にはだいぶ長いことやってます…。
最初はファミリーベーシックで挫折(小学生時代)
ポケコンのベーシックにはまる(中学3年〜高校生)
CとVB勉強(高校〜)みたいな。
0091デフォルトの名無しさん
NGNGバグが酷いんだが、なんとかならんか?
激しく酷いぞ。
0092デフォルトの名無しさん
NGNG擬似スプライト処理をしたほうがいいね。ボールのフチが見えて萎える。
それからバックバッファを使わないと後々困ると思うよ。
いまのままだと、ボールやバーの移動量をふやすと軌跡がのこっちゃうでしょ。
0093デフォルトの名無しさん
NGNGこれは今すぐ直しなさい。
Form1_Unloadイベントに一行End書くだけでしょ。
タスクマネージャ見て驚いたよ。
0094ヒッキー@プログラミング
NGNGすいません、徐々に直していきます。
>>92
うい。了解。
前にフチを消す処理を書いたような覚えが…探してみます。
バックバッファですか。そこに書いてから実際の画面に転送ですよね。
やってみます。
>>93
ごめんなさい…ウチでもタスクマネージャ見たら溜まってたんで
焦りました。05を再アップしました。
今まで試してくださった方、大変申し訳ないです。
0095ヒッキー@プログラミング
NGNG↑次うぷしました。
背景になじませてみました
0096
NGNG覚えるの早いねー。
ブロックの管理あたりで一騒動ありそう・・・。
何か考えてる?
0097デフォルトの名無しさん
NGNG消化できてても吸収できてないと後々にひびく。
1が無理してなきゃいいが・・・
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNG消化はできてるだろ。
問題は、覚えたかどうかだ。
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNGこのスレをヴァカ学生どものテキストに使いたいくらいじゃよ。
結局GDI描画にしたのねん。
メモリ上に仮想VRAMおったてて、スクリーンにBitBltかけるライブラリとか
なら探せばいくらでもありそう。
でも、プログラム的にはGDIのBitBltと同じような処理になっちまうだがな。
まあ、ともかく1よ、テキトーにがんばってくれや。
燃え尽きんようにな。
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNGそうなの?
0104デフォルトの名無しさん
NGNGソースは全然見てねーけどな。
0105デフォルトの名無しさん
NGNGいや、その線はないだろう。ソースを見てみれ。
ある程度経験を積んだ奴はどんなに素人らしいコードを
書こうとしても、必ずその「痕跡」がコードに現れてくるものだ。
ただ>>1は、スレの育て方のコツを知っているみたいなので
もしかしたら「プロの2チャンネラー」かもしれん・・・
0106デフォルトの名無しさん
NGNG010773
NGNG衝突判定の為にはBallMove()の先頭で
next_x = ball_x + vx
next_y = ball_y + vy
として ball_x/y next_x/y の線分との距離判定を使いなさいと言った筈だ
1、まず、線分と線分の距離を求めるルーチンを作りなさい。
そして、 枠とラケットへの線分との距離を順に求めなさい
その距離がボールの大きさより小さければその回に衝突する
0108ヒッキー@プログラミング
NGNGだんだん難しくなってきたので昨日ほどの進捗は無いかもしれませんが…。
>>96
おー、ありがとうございます。嬉しいです。
ブロックの管理ですか…配列の中に入れようと思いますが、
まだぼんやりとしか思い浮かばないので、ちょっと紙に書いて考えます。
>>97
ちょっと無理目です。でも努力をしないと技術がつかないと思うので
がんばりたいと思います。
>>101
どもです。
スクリーンにBitbltですか。ウインドウから位置を計算してその上に
乗せればいいわけですね。
学校の先生ですか?がんばってください。
先生から受ける影響(ソースの書き方とか)大きいです。
>>105
2chねらー歴は数ヶ月です(藁
何度かスレ立てて、どうやったら面白いか考えてました。
おっしゃる通り、素人でございます。
強制するのはよくないよ。
自分で考えて作るのがプログラムの楽しさだ。
0110デフォルトの名無しさん
NGNGいまのままだと処理内容が増えるにつれて
リニアに遅くなるよね
0111デフォルトの名無しさん
NGNGゲームってそうゆうもんだよ。
0112デフォルトの名無しさん
NGNG>動くのしか作れないもので…VESAのライブラリ拾って16bit色
漢発見!
0113デフォルトの名無しさん
NGNGんなこたーない
1フレームの処理Pにかかる時間をn(msec)とし、
フレーム更新間隔をm(msec)としたら、
本来1フレームはPを処理したあとに(m-n)msecを
sleepすべきである。(これを画面走査線の動作に
あわせるのが、vsyncである)
したがって、n<=mである限り1フレームの更新間隔は
nによらず一定で、その値はmである。
0114デフォルトの名無しさん
NGNG1フレームの更新間隔m=(10+n)msecとなることは自明。
プログラムの組み方によるが、たとえばブロック1つにつき
処理時間lを要するとすれば、ブロック数kに対しn=a+l*kである
つまり、m=(a'+l*k)となり、変数kによってmが線形的に変化する
こととなる。
これは、「ブロックが大量にあるスタート時とブロック残り数が
少ない最後のほうでフレーム更新間隔が異なる」ことを意味する。
フレーム更新間隔の変化は、パドルの動作、ボールや演出の動作にも
影響を与え、ゲームとしての品質を低下させる。
0115ヒッキー@プログラミング
NGNGsleepの処理を改善してみました。>>113氏に感謝。
>>107
線分と線分の距離を求めるアルゴリズムを検索してみます。
ちょっと考えがついていってないので、しばしお待ちを…
>>110 - >>113 - >>114
ご指摘ありがとうございます。
たぶん、おっしゃる通りに改善できたと思います。
0116デフォルトの名無しさん
NGNGブロックとの衝突判定をどうするのかまだ決まっていない状態で
議論しても始まらんだろ。
とりあえずぱっと思い付いた(つーか、ありがちな)方法だが、
普通ブロックって奴を画面に配置する時は縦横きれいに整列されているので、
その構造を利用するだけでも
線1本との交差判定にかかる処理時間
縦方向に配置するブロックの最大数を r
横方向に配置するブロックの最大数を c
とした場合、その衝突判定にかかる処理時間は(生存しているブロックの
数に関わらず)
l * r * c
で済むんではないの?
(ついでに線との衝突判定を律義に1本ずつ計算せずに
「どの線とぶつかる可能性があるか」を計算で拾い出せば
もっと速いけどな)
0117116
NGNG>線1本との交差判定にかかる処理時間
を
>線1本との交差判定にかかる処理時間を l
に読み替えてくれ。
0118ヒッキー@プログラミング
NGNG0119ヒッキー@プログラミング
NGNG0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNG別に今回のブロック崩しでどういう処理をするかは論じてない
あくまでゲームループ一般の話題であり、ブロック衝突に
かかる計算量は、あくまで一例としたまでで
気に食わないなら「ボールが複数に分裂した場合」でも
「敵が複数出現する場合」でもかまわない
それよりあれだけの情報で新しいリリースではちゃんと修正している
>>1はかなり理解力が高いと思う
ソース見たけど、いわゆる「処理落ち」まできちんと考慮してるみたいだ
初心者は初心者なんだろうけど、頭はかなりよさそうだね
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG反射の処理が冗長な割に正確じゃないのよね。思い切って書き直したほうがいいと思う
if パドルの上端(上半分)に接触 then vy=-abs(vy)
if パドルの下端(下半分)に接触 then vy=abs(vy)
ってなふうにad hocに書いたほうが妙なバグに悩まされずに済むよ
0124速報
NGNGhttp://game.2ch.net/gamedev/
0125デフォルトの名無しさん
NGNGおお、待ち望んでいたものが。ワショーイ
0126デフォルトの名無しさん
NGNGってことは、これは板違いにつき終了ってことね。
0128デフォルトの名無しさん
NGNGまだインフラ整備されてないようだから、それまではいいんじゃない?
0129デフォルトの名無しさん
NGNG0130デフォルトの名無しさん
NGNG0131ヒッキー@プログラミング
NGNG↑次あぷしました。
1.タマがめり込む現象の改善
2.線分の交差で跳ね返っていたのを消して、もっと単純に
>>123
思い切って書き直しました。
めり込みがなくなったかと思います。
>>124
昨日、記念カキコしてきました(藁
これが終ったら、向こうに逝きたいと思います。
>>127
あああああああああああああああああああああ、ちょっと待って(w
久々age
0132デフォルトの名無しさん
NGNGこういうのがゲ術板でも出てくるといいのだが。
0133デフォルトの名無しさん
NGNG0134
NGNG厨房減ればいいけど。
0135ヒッキー@プログラミング
NGNG↑次あぷしました。
ブロックとぶつかるようにしました。
>>120
本当にヒッキーです。かれこれ数ヶ月になります。
>>133
ワラタ
>>134
おぉ、ほんとだ。良い板になるといいですね。
0136デフォルトの名無しさん
NGNGもっとスピード早くして。
0137ヒッキー@プログラミング
NGNG早くしてみました。
0138デフォルトの名無しさん
NGNGいまんとこ定数ごっちゃになってないけど、
大丈夫か?きちんと見た目わかりやすく定義した方がよくないか?
そんなこという俺もいっつも適当だけど、鬱
0139ヒッキー@プログラミング
NGNG↑ついにゲームっぽくなりました。
>>138
定数ですか。
AND演算に使ってないので、大丈夫だと思います。
ただ、マジックナンバーをなくそうかと。
定義、見やすくしてみたいと思います。
0140デフォルトの名無しさん
NGNGなどと言ってみるテスト。
0141デフォルトの名無しさん
NGNG210点でクリアー.
1はいい調子だね.
0142デフォルトの名無しさん
NGNGいいね、いいね。シンプルだけど遊べるよ。
ただ、「この角度でボールに当たったら、こうは動かんだろ〜」という
ストレスが多少ありますね〜。
0143デフォルトの名無しさん
NGNG実は、リリース版まで上がってて小出しにしてるのかとか
一瞬疑ってしまったよ
モチベーションって大切だよな、うんうん
0144デフォルトの名無しさん
NGNG01462
NGNG0147ヒッキー@プログラミング
NGNG↑計算してみました。角度とか。
あと、ステージ2を追加しました。
>>140
間違えそうになりましたよ(藁
>>141
おお、どうもありがとうございます。21個、ブロックがあるので
210点になります。
>>142
たしかにちょっと変ですね…。
自機の横にあたったときは上に行くようにしてます。
>>143
このスレ立てたときに1から作りました。
みなさんのおかげで、なんとかゲームらしくなりました。ありがと〜。
>>144
まだまだがんばります!
>>145
うい〜。APIは僕も最初、ちんぷんかんぷんでした。
ある日、突然目覚めました。
>>146
お〜、どもです。スレ維持する為にがんばります。
昨日、アルゴリズムの本を買ってきました。
もうちょっと勉強します…
0148デフォルトの名無しさん
NGNG昔のブロック崩しは、ブロックの横からの判定がなくて当たり前で、
衝突判定はかなり単純なものだったなあ。
ボールの角度も、エポック社の取説では、ラケットに当たった位置に
よって、4方向(!)ぐらいだけだったような。
そのレベルはとっくに超えてて、いいぞゴルァ!
0149デフォルトの名無しさん
NGNG「貴様ら!○○作るので見てください」をシリーズ化キボン。
0150デフォルトの名無しさん
NGNG0151ヒッキー@プログラミング
NGNG↑3面追加&グラフィック変更しました。
>>148
おぉ、MSXですか。
当時はプログラムを打つと言えばファミリーベーシックしか知りませんでした。
MSXを知ったのはプレステ出てからです(藁
お褒めいただき、ありがとうございますゴルァ!
>>149
これ終ったら、また新たなスレ立てようと思っております。
みんなでシリーズ化したら面白そうですね。
0152デフォルトの名無しさん
NGNGそれちょっと考えてみた。
しかし、現時点でかなり1に遅れをとっている状態であり、
怖くて立てる勇気がない。
■ このスレッドは過去ログ倉庫に格納されています