2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

プログラミング詳しいやつ助けて…

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 ★