はじめまして。
私は今、VBでゲームを作っています。
そのゲームでは、ボタンを押してラベルを動かしたり、他のボタンを押してラベルを止めたりしています。
そこで今、困っているのが、Form1内の端にぶつかるとラベルが止まるという感じにしたいんです。
でも、何を記述していいのかわかりません。
解る方、解答をよろしくお願いします。
Public Class Form1
Dim Vec As Integer
Private Sub Timer1_Tick( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick
If Label1.Location.X + Label1.Size.Width >= Me.Width - 8 Then
Vec = -4
ElseIf Label1.Location.X <= 0 Then
Vec = 4
End If
Label1.Location = New Point(Label1.Location.X + Vec, Label1.Location.Y)
End Sub
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Vec = -4
Timer1.Enabled = True
End Sub
Private Sub Button2_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
Timer1.Enabled = False
End Sub
Private Sub Button3_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button3.Click
Me.Close()
End Sub
Private Sub Button4_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button4.Click
Vec = 4
Timer1.Enabled = True
End Sub
End Class
Timer1_Tick()で、Label1.Location.X + VecがForm1内の端にぶつかっていないかチェックすればよいのではないでしょうか。
解答ありがとうございます。
しかし、すいません。
私の知識ではとても、わかりません。
詳しい説明とVBのプログラムをお願いします。
アクアと申します。どうぞ宜しくお願い致します。
当方の環境を申し上げます。
OSはWindows Vista Ultimate SP1
VisualBasic2008 Professional Editionです。
ご質問なさる際は開発環境の記載を心掛けてください。
ただし今回ご提示いただいたコードを推察するとVisualBasic.NET(2002)以上であれば大丈夫でしょう。
今回の質問は
フォームのどちらかの端にLabelが当たると止まるようにしたい。
という事ですよね。
Timer_Tick()のプロシージャに記載されている内容は一定の時間の経過に従いイベントを実行し、イベントが発生する毎にLabelコントロールの座標を変化させています。
ご提示いただいたコードでの記述箇所は3行目から14行目までのコードです。
とおりすがりさんのアドバイスで
> Timer1_Tick()で、
とありますが、このプロシージャの中のコードに注目すると既にLabelの位置を変化させる判定があるのが確認できます。
そして今回の質問を解決するには当にこのプロシージャ内に命令文に手を加える事が必要となります。
理解を深めるために、このプロシージャを日本語に分解します。
If(もし) Label1のx座標+Label1の幅 >= このフォームの幅-8 Then(ならば)
変数(Vec)に -4を代入する
ElseIf(上の条件に該当しない場合で、もし) Label1のx座標が <=0 Then(ならば)
変数(Vec)に 4を代入する
End If
Label1の位置 = (x座標を現在のx座標+変数(Vec),現在のy座標のまま)の座標軸に代入する
となります。
更にデフォルメして表現すると(本当の意味で正しい表現ではありません。)
If(もし) Label1がこのフォームの右端 Then(ならば)
左に進む
ElseIf(上の条件でなくて、もし) Label1がこのフォーム左端 Then(ならば)
右に進む
End If
となります。
質問はフォームのどちらかの端にLabelが当たると止まるようにしたい訳ですから、進まずにこのプロシージャの処理から抜ければいいのです。
‾‾‾‾
プロシージャから抜ける処理は
Exit Sub
もしくは
Return
と記述します。
現実の業務でプログラムを作る場合にこんなコードを書いたら、上司から確実に叱られますが、宿題レベルなら十分でしょう。^^;;;
ズレたので修正。
修正前:
質問はフォームのどちらかの端にLabelが当たると止まるようにしたい訳ですから、進まずにこのプロシージャの処理から抜ければいいのです。
‾‾‾‾
修正後:
質問はフォームのどちらかの端にLabelが当たると止まるようにしたい訳ですから、
進まずに
‾‾‾‾
このプロシージャの処理から抜ければいいのです。
>私の知識ではとても、わかりません。
>詳しい説明とVBのプログラムをお願いします。
提示されたプログラムをご自分で書かれているなら十分可能だと思いますよ。それを考えるのが作る楽しさでは?
左に移動中か、右に移動中かはVecで判定できるわけですから、
左に移動中で左端にぶつかったらタイマーを停止・Exit Sub
右に移動中で右端にぶつかったらタイマーを停止・Exit Sub
それだけでOKかと。
Timer_Tick()内の”Vec=4”や”Vec=-4”を”Vec=0"に置き換えてみて
ください。ヒントになるかも。
わかりやすい説明ありがとうございます。
ようやく理解ができました。
本当にありがとうございました。
ツイート | ![]() |