スタートボタンを押すと一個のボールが現れ、
picture1の中を動き回り、壁に当たると跳ね返る、
スクリーンセイバーのようなプログラムを作って
いるのですが「ボールが壁に当たって跳ね返る」
部分がどうしても上手くいきません。この部分を
どなたか教えてください。お願いしますm(_ _)m
(見やすいように線を引きました。最後の方が「跳ね返りの部分です。それ以外の部分は、文の長さ制限にひっかかるため省いてあるところがあります。)
Private Sub Command1_Click()
x = Int(Rnd * 3900)
y = Int(Rnd * 3900)
r = 100
c = vbRed
Timer1.Enabled = True
Timer1.Interval = 200
Picture1.Circle (x, y), r, vbRed
End Sub
-----------------------------------------
Private Sub Timer1_Timer()
Picture1.FillColor = Picture1.BackColor
Picture1.Circle (x, y), r, Picture1.BackColor
dx = 100
dy = dx
x = x + dx
If x < 0 Then
x = 0 And dx = 0 - dx
If x > Picture1.Width Then
x = Picture1.Width And dx = 0 - dx
End If
End If
y = y + dy
If y < 0 Then
y = 0 And dy = 0 - dy
If y > Picture1.Height Then
y = Picture1.Height And dy = 0 - dy
End If
End If
Picture1.FillColor = vbRed
Picture1.Circle (x, y), r, vbRed
End Sub
No.3ベストアンサー
- 回答日時:
> 当たった瞬間、その場で右往左往してしまいます。
質問と、ソースが違うではないの!
であれば、こうでしょう。
> If x >= Picture1.Width OR x < = 0 Then
> s = -1
> Else
> s = 1
> End If
If x >= Picture1.Width OR x <= 0 Then
s = s * -1
End If
s と z は、グローバル変数にして、初期値を設定してね。
a-kumaさんのご助言のおかげで、無事プログラムが完成したした。本当に助かりました。またどうぞよろしくお願いしますm(_ _)m
No.4
- 回答日時:
ソースの表示が少なかった用です。
グローバル変数のところと、dx,dyの初期化を載せてませんでした。
m(_ _)m
Dim x%, y%, dx%, dy%
Dim r&, c&
Private Sub Command1_Click()
x = Int(Rnd * 3900)
y = Int(Rnd * 3900)
r = 100
c = vbRed
Timer1.Enabled = True
Timer1.Interval = 200
Picture1.Circle (x, y), r, vbRed
dx = 100
dy = dx
End Sub
'-----------------------------------------
Private Sub Timer1_Timer()
Picture1.FillColor = Picture1.BackColor
Picture1.Circle (x, y), r, Picture1.BackColor
x = x + dx
If x < 0 Then
x = 0
dx = 0 - dx
End If
If x > Picture1.Width Then
x = Picture1.Width
dx = 0 - dx
End If
y = y + dy
If y < 0 Then
y = 0
dy = 0 - dy
End If
If y > Picture1.Height Then
y = Picture1.Height
dy = 0 - dy
End If
Picture1.FillColor = vbRed
Picture1.Circle (x, y), r, vbRed
End Sub
No.2
- 回答日時:
Ifのところを見直してください。
If 条件式 Then
成立時の処理
Else
不成立時の処理
End if
xが0より小さいのにPicture1.Widthより大きいのはおかしいでしょ
とりあえずは、以下のように変更してください
If x < 0 Then
x = 0
dx = 0 - dx
End If
If x > Picture1.Width Then
x = Picture1.Width
dx = 0 - dx
End If
y = y + dy
If y < 0 Then
y = 0
dy = 0 - dy
End If
If y > Picture1.Height Then
y = Picture1.Height
dy = 0 - dy
End If
この回答への補足
ご指摘いただいたところは修正しましたが、ボールが壁に
当たった瞬間、その場で右往左往してしまいます。様々な方法を試してみたんですが、どうも上手くいきません。。
理由は、たぶん、壁に当たった時に進行方向が反転するも
のの、それがその後の動作に反映されていないからだと思
うのですが、どう直したらよいのか分かりません。
No.1
- 回答日時:
> If x < 0 Then
> x = 0 And dx = 0 - dx
> If x > Picture1.Width Then
> x = Picture1.Width And dx = 0 - dx
>
> End If
> End If
"And" の使い方が間違っています。英語のようには使えません。
If x < 0 Then
x = 0
dx = 0 - dx
ElseIf x > Picture1.Width Then
x = Picture1.Width
dx = 0 - dx
End If
y 方向も同様に直してね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) Excel VBA ユーザーフォーム 複数のユーザーフォームの閉じ方。 2 2022/04/27 11:29
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像処理について。(移動)
-
画像をランダムに表示させたい...
-
画像処理
-
ボールが壁に当たって跳ね返る...
-
[vb.net] 起動したFrom2を閉じ...
-
VBA public変数はどのようなこ...
-
C#のループでtextboxに値を入れ...
-
他のフォームから別のフォーム...
-
GetNextWindowがDLLファイルUse...
-
[Excel2000]auto_closeを止めさ...
-
アクセスできない保護レベルエ...
-
エクセルVBAでテキストボッ...
-
comboboxのクリックイベントに...
-
VB.NETでのイベントの途中終了
-
ユーザーフォームへのデータ入...
-
VBAのユーザーフォームで、テキ...
-
基本的な質問で本当に申し訳あ...
-
subsequentとnextの違いってな...
-
VBSのプログラム
-
条件に該当したテキストボック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マウスポインタの変更
-
Matlabでsin波を使って矩形波を...
-
SavePictureで保存できない
-
FlexGridで文字色を変更。
-
(VB)ピクチャボックスに表示し...
-
画像処理について。(移動)
-
ボールが壁に当たって跳ね返る...
-
画像処理
-
画像をランダムに表示させたい...
-
VBによる回帰直線のプログラム
-
VBでbmpのビットを抜出す
-
Matlab/SimulinkのChirp信号に...
-
SCALEの使い方教えてください
-
PictureBoxでのアニメーション...
-
画像ファイルの高さと幅の取得
-
リソースファイルの選択
-
picture boxの画像をimageに上...
-
Picture box の サイズを変更
-
消す軌跡と残す軌跡
-
VB6でマウスのドラッグで範囲を...
おすすめ情報