■ このスレッドは過去ログ倉庫に格納されています
プログラミング詳しいやつ助けて…
- 1 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:27:26.136 ID:TGhbhAxs0.net
- VBでブロック崩し的な処理を書きたいんだが上手くいかない…
ボールがブロックにあたったらボールが跳ね返るって処理をとりあえず考えてみたけどちゃんと動いてくれない
'上とのあたり判定
If bx < (lx + Label1.Width / 2) & bx > (lx - Label1.Width / 2) &
(by + PictureBox1.Height / 2) > (ly - Label1.Height / 2) & (by + PictureBox1.Height / 2) < (ly + Label1.Height / 2) Then
y = -y
'下とのあたり判定
ElseIf bx < (lx + Label1.Width / 2) & bx > (lx - Label1.Width / 2) &
(by - PictureBox1.Height / 2) > (ly - Label1.Height / 2) & (by - PictureBox1.Height / 2) < (ly + Label1.Height / 2) Then
y = -y
'左とのあたり判定
ElseIf (bx + PictureBox1.Width / 2) < (lx + Label1.Width / 2 + PictureBox1.Width) & (bx + PictureBox1.Width / 2) > (lx - Label1.Width / 2) &
by > (ly - Label1.Height / 2) & by < (ly + Label1.Height / 2) Then
x = -x
'右との当たり判定
ElseIf (bx - PictureBox1.Width / 2) < (lx + Label1.Width / 2 + PictureBox1.Width) & (bx - PictureBox1.Width / 2) > (lx - Label1.Width / 2) &
by > (ly - Label1.Height / 2) & by < (ly + Label1.Height / 2) Then
x = -x
End If
はげそう、誰か助けて…ちなみにbxとかlxはそれぞれボールとブロックの中心座標のこと
- 2 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:33:11.138 ID:pQ5vyUR60.net
- 詳しくないけど来たけどやっぱり分からない
- 3 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:34:32.909 ID:TGhbhAxs0.net
- >>2
まじで何しに来たんだよ、まあゆっくりしていけや
- 4 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:38:24.336 ID:TGhbhAxs0.net
- おい、誰か分かる高学歴ニートいるだろ、助けてくれよ
- 5 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:38:29.865 ID:06L3MWz20.net
- VB知らないけど読みにくそうなコードだな
- 6 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:39:22.224 ID:8/K6mFjs0.net
- 読む気失せるコードだな
- 7 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:39:25.955 ID:oqVPdSBa0.net
- これだけで分かるほど頭良くない
- 8 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:41:27.135 ID:19L6C2pU0.net
- 10年プログラムで飯食ってるけどわからない
- 9 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:44:57.946 ID:TGhbhAxs0.net
- これだけでは分からないといわれてもこれ以外のところは宣言の部分だから特に何も書いてないんだよな…
- 10 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:48:50.449 ID:19L6C2pU0.net
- 真面目に読んでみたけどもっと細かく()を付けて計算とか判定の優先順位を明確にした方がいいと思う
案外それで想定してない判定されることもある
- 11 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:50:45.795 ID:S8RasXH80.net
- なんてのか・・・
ボールの中心=ブロックの中心の時だけ跳ね返るんだろ?
1px単位でそれが指定されるんだろ?
中心に当てる事が無理ゲーだろ
- 12 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:50:51.702 ID:TGhbhAxs0.net
- >>10
おk…もっかい一から書いてみるわ
- 13 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:50:52.865 ID:MdXuQAur0.net
- fortranしかやったことないから案の定わからない
- 14 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:51:38.148 ID:S8RasXH80.net
- あとなんでボックスの中心座標求めたの?
普通って左上角の座標じゃなかったっけ?
- 15 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:51:52.783 ID:19L6C2pU0.net
- それとVBの条件式に「&」って使えるんだっけ?
「and」「or」で「&」って文字列結合じゃない?
- 16 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:53:05.071 ID:TGhbhAxs0.net
- >>11
いや、ブロックの中心座標にはそれぞれブロックの幅の半分を+か-かすることでボールの当たり判定の範囲を指定してるつもりなんだが、書き方まちがってたかな?
- 17 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:53:59.603 ID:TGhbhAxs0.net
- >>15
使えるよ
- 18 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:54:27.020 ID:S8RasXH80.net
- >>16
そういうことか
yについての判定なしにしてまず下からあたったら消えるようにしてから拡張したら?
- 19 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:54:50.929 ID:arLRfU7D0.net
- 読むのめんどくせぇけど、ちゃんと辺り判定できてるか?
y方向の係数の符号が逆になったか表示してみろ
- 20 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:56:05.655 ID:E4IuKaFB0.net
- VBよめん。アルゴリズムはわかる
なにができんの?
- 21 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:56:30.770 ID:TGhbhAxs0.net
- >>18
ありがとう、いま下からの判定だけでやってみたらちゃんと跳ね返ってきたわ、あとは範囲を指定できれば…
- 22 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 22:57:07.578 ID:E4IuKaFB0.net
- ちなみに4点と4点の上下左右の当たり判定のifはすさまじい事になるよ
だるいから最初は4点と1ドットとの比較が楽
- 23 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:00:03.161 ID:TGhbhAxs0.net
- おっと、&もしかして条件式で使えない!? AND に変えたら上の判定だけは上手くいった…
- 24 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:04:45.301 ID:xZNTgkHM0.net
- モンスターストライクみたいな操作システムか?
それに大乱闘スマッシュブラザーズのふっとばし動作を追加しよう!
- 25 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:06:46.058 ID:arLRfU7D0.net
- >>23
とりあえずIF文はやめておけ
- 26 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:09:06.498 ID:19L6C2pU0.net
- 俺も最近VBやってないから曖昧で断言できないけど&って文字列結合とかビット演算だった気がするんだよな
- 27 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:10:06.899 ID:TGhbhAxs0.net
- ブロックの上の部分とだけの当たり判定なら
If by > Label1.Top - PictureBox1.Height / 2 And bx > Label1.Left And bx < Label1.Left + Label1.Width Then
y = -y
Endif
これでいけた、ここに下をelseifで追加するとおかしな動きになる
- 28 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:16:01.615 ID:arLRfU7D0.net
- >>27
だからIF使うなって
- 29 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:18:50.853 ID:19L6C2pU0.net
- Dim val1 as Integer
Dim val2 as Integer
val1 = Label1.Top - PictureBox1.Height / 2
val2 = Label1.Left + Label1.Width
If (by > val1) And (bx > Label1.Left) And (bx < val2) Then
y = -y
Endif
簡単に直してみた
計算式は変数に入れたほうが見やすくなるよ
- 30 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:20:51.566 ID:TGhbhAxs0.net
- >>28
Ifしかしらんねん、すまん…
>>29
ありがたや…
- 31 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:26:02.840 ID:aBcsxhTg0.net
- y = -y これ何してるの?×(−1)かい?
- 32 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:28:33.178 ID:arLRfU7D0.net
- >>30
Ifだと処理速度がバラバラになるぞ
ゲームには向かない
- 33 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:28:48.286 ID:TGhbhAxs0.net
- >>31
そうそう
- 34 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:29:24.874 ID:TGhbhAxs0.net
- >>32
そうなのか…ちなみにIF以外の方法って知らないんだけど何使うの?
- 35 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:33:09.666 ID:goj2w5FJ0.net
- bit演算でも1,0=true,falseなら同じ話なんだよなあ
あと俺はVB知らない
- 36 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:34:57.200 ID:S8RasXH80.net
- どうして無理してまでVBなのか気になる
Pythonでスプライトでやったら楽だったような
- 37 : 【25.1m】 :2015/05/31(日) 23:35:22.624 ID:AnX0Vtx40.net
- >>34
マジレスすると整数値の飽和を利用する
- 38 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:35:49.189 ID:TGhbhAxs0.net
- なんかいけそう
- 39 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:37:52.958 ID:TGhbhAxs0.net
- >>36
いや、実はさ、これ課題なんだよね…CしかいじったことないからVBの書き方よくわからんはげそう
- 40 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:39:36.750 ID:19L6C2pU0.net
- Dim BlCenter as Integer 'ブロックの中心
Dim BlRight as Integer 'ブロックの右端
BlCenter = Label1.Top - PictureBox1.Height / 2
BlRight = Label1.Left + Label1.Width
If (bx > Label1.Left) And (bx < BlRight) Then
If (by > BlCenter) or (下の当たり判定) Then
y = -y
Endif
ElsIf (左右での共通判定) then
if (左の判定) or (右の判定) then
x = -x
Endif
Endif
勝手に元ソースから予測して書いてみた
あってるから知らんからこんな感じで書くと見やすいって参考程度にしてね
共通の判定があればその判定をしてからその中でまた分岐するといい
基本的には同じコードは書かないようにするってやるとスッキリする
もちろん例外もあるし同じコード書いた方がいい場合もあるから臨機応変に
ソースの全体がわかればもっとアドバイスしやすいけど
- 41 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:41:29.981 ID:arLRfU7D0.net
- a=1のとき、
(a=1)=-1
a<>1のとき、
(a=1)=0
()の中の条件式の結果で-1か0になるから、計算しろ
メリットは条件の成立有無によらず処理速度はおなじになる
- 42 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:41:34.006 ID:a8Bcedvq0.net
- なんで今更VB?
久しぶりにコード見たわ
- 43 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:42:20.136 ID:TGhbhAxs0.net
- おおおおお、なんか一から見直したらできた!!
まだ右の当たり判定作ってないけど
'上とのあたり判定
If by > Label1.Top - PictureBox1.Height / 2 And by < Label1.Top + Label1.Height + PictureBox1.Height / 2 And
bx > Label1.Left And bx < Label1.Left + Label1.Width Then
y = -y
'下とのあたり判定
ElseIf by < Label1.Top + Label1.Height + PictureBox1.Height / 2 And by > Label1.Top And
bx > Label1.Left And bx < Label1.Left + Label1.Width Then
y = -y
'左との当たり判定
ElseIf bx > Label1.Left - PictureBox1.Width / 2 And bx < Label1.Left + Label1.Width + PictureBox1.Width / 2 And
by > Label1.Top And by < Label1.Top + Label1.Height Then
x = -x
End If
これでちゃんとうごいた、後は変数とかにまとめて見やすくするわ、いやーまじで助かったありがとう
- 44 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:42:53.347 ID:goj2w5FJ0.net
- VB, クソ言語っぽい
- 45 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:49:11.895 ID:TGhbhAxs0.net
- >>44
まあ、GUIプログラミングの練習みたいなもんだから
- 46 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:52:44.742 ID:19L6C2pU0.net
- 出来たんならよかった
どうしてそのロジックで動くか理解すのを忘れずにな
理解しとけばいくらでもいじれるから
- 47 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:52:52.564 ID:xZNTgkHM0.net
- 汚いコード>>43
綺麗なコード>>40
- 48 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:53:54.332 ID:aBcsxhTg0.net
- >>33
そんな書き方あるんだ!VBから入ったんだがなー、忘れたわ。
- 49 :以下、\(^o^)/でVIPがお送りします:2015/05/31(日) 23:58:29.099 ID:TGhbhAxs0.net
- >>47
そっか、上と下の判定の結果一緒だからORにすればいいのか
- 50 :以下、\(^o^)/でVIPがお送りします:2015/06/01(月) 00:00:13.159 ID:BKIX8GVP0.net
- たかがブロック崩しでも当たり判定は奥が深いからな
とりあえず動いたとして次は妙なところで意図とは違う跳ね返り方を
するってのに直面するはず
- 51 :以下、\(^o^)/でVIPがお送りします:2015/06/01(月) 00:00:56.037 ID:gqS1nTX70.net
- >>50
斜めにあたると変な動きするねこれ
- 52 :以下、\(^o^)/でVIPがお送りします:2015/06/01(月) 00:14:11.268 ID:X6305OHJ0.net
- >>47
popupするとインデントしてる、知らんかった。
- 53 :以下、\(^o^)/でVIPがお送りします:2015/06/01(月) 00:22:03.454 ID:gqS1nTX70.net
- >>40
これめちゃくちゃ参考になりました
あざす
- 54 :以下、\(^o^)/でVIPがお送りします:2015/06/01(月) 00:32:28.094 ID:X6305OHJ0.net
- 上の当たり判定
by < BlCenter かつ、ボールが上に移動している、y = マイナスの時
原点は左上だよね
総レス数 54
14 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★