画像をある地点からある地点へと移動させるには?


サイ  2006-07-22 07:06:04  No: 132408

VB.NETを使っているのですが
授業で前、PICTUREBOXの画像を、その画面上で飛ばすというのはしたのですが
Aの地点からBの地点まで移動させる方法がちょっとわかりません。(そこに着いたら止まるように)

comboboxを使って、地点の名前とかのリストをつけてるのですが
例えば  福岡を選んだら  福岡の地点に画像がいてくれるとか
そういうのをしたいんですよ、そしてGOとか押したら選んだ地点まで飛んでいくという

説明ヘタで申し訳ありません、アドバイスあればよろしくおねがいします


KG  2006-07-22 19:04:43  No: 132409

>授業で前、PICTUREBOXの画像を、その画面上で飛ばすというのはしたのですが

これが理解できないのですが、実際どんなコードなのでしょうか?
これが出来ているなら

>そしてGOとか押したら選んだ地点まで飛んでいくという

これも似たようなコードできると思いますが・・・


サイ  2006-07-22 21:42:00  No: 132410

コードはこのようなものです

   Public X, X0, Y, Y0 As Integer                '変数の宣言

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        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
        End
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        X0 = 20 : Y0 = 20 : X = 0 : Y = 0 '変数の初期化
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        PictureBox1.SetBounds(X, Y, 16, 16)

        X = X + X0                                '座標の更新
        Y = Y + Y0

        If X > (480 - 4) Or X < 0 Then X0 = -X0 '四辺にあたると方向転換
        If Y > (260 - 30) Or Y < 0 Then Y0 = -Y0
    End Sub
End Class

ただ、これだったら、そのタイマーの時間間隔で座標のあれこれで飛んでいるという感じなので
そうではなくて、ただ、A地点からB地点まで飛ばせて止まらせたいのです


KG  2006-07-22 21:58:08  No: 132411

うーんこのコードを理解していれば、あとは組み替えるだけだと思うのですが
Button1をクリックするとTimerが有効になって画像が飛ぶ(あえてこの表現で)
Button2をクリックするとTimerが無効になった止まる。

じゃぁどこで画像を動かしているかとなるとTimerのイベントですよね。
>    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
>        PictureBox1.SetBounds(X, Y, 16, 16)
>
>        X = X + X0                                '座標の更新
>        Y = Y + Y0
>
>        If X > (480 - 4) Or X < 0 Then X0 = -X0 '四辺にあたると方向転換
>        If Y > (260 - 30) Or Y < 0 Then Y0 = -Y0
>    End Sub

最初の1行以外は座標の計算です。PictureBox1.SetBoundsについて調べてみてはいかがでしょう?


サイ  2006-07-23 00:17:52  No: 132412

いまいろいろと試行錯誤しております
また分からなくなれば質問したいと思います
しばし葛藤中


サイ  2006-07-23 02:45:17  No: 132413

あぁ・・・勉強不足・・・混乱してきました涙
If RadioButton1.Checked And RadioButton8.Checked = True Then
            PictureBox2.Left = PictureBox2.Left + 1
        End If

これだったら、右にずっと進むだけですよね・・・・
ななめってどうやって進む・・・はぁ・・・
MSDNが全部英語で理解不能


KG  2006-07-23 03:20:19  No: 132414

Leftプロパティの増減で左右に
Topプロパティの増減で上下に動かせますよ。

斜めに動かしたたければ(動いたように見せるなら)

同じタイミングで同じ値をTopとLeftに与えてあげればいいかと思います。


サイ  2006-07-23 03:30:29  No: 132415

おお、ありがとうございます

If PictureBox2.Left > 75 And PictureBox2.Top > 30 Then Timer1.Enabled = False
        PictureBox2.Left = PictureBox2.Left + 1
        PictureBox2.Top = PictureBox2.Top - 1

ってしたら斜めにいってくれました^^;
問題は、ラジオボタンで  出発地点  到着地点を作って
出発地点別にそれぞれの座標移動を行うようにしたいです。
これから試してみます!  IF・・・を使うのかな?


KG  2006-07-23 03:50:53  No: 132416

ラジオボタンから地点を判断して、その座標のTopとLeftをどこかに
保持しましょう。

出発点と到着地点のTopとLeftの差分だけ動かしてあげれば良いかと思います。


サイ  2006-07-23 05:19:53  No: 132417

もうむりかなと・・・かなりしんどいです
なんでうまくいかないのかわからないや・・・
誰かサンプルとか作ってくれないかしら涙

ご飯食べたらもっかい挑戦します・・・


通ってみた  2006-07-23 19:20:20  No: 132418

勉強を他人にやらせても、何の力にもなりません

出発点のX座標、Y座標と到着点のX座標、Y座標を比較してみてください

例えば出発点のX座標が100で到着点のX座標が200なら、その差は100です
10回に分けて到着させるなら、1回の移動距離は10になります

例えば出発点のX座標が100で到着点のX座標が0なら、その差は-100です
10回に分けて到着させるなら、1回の移動距離は-10になります

Y座標も同じですね

あとは日本語をプログラムに換えれば完成間近でしょう


特攻隊長まるるう  2006-07-25 04:06:55  No: 132419

まるちだね。
http://vbnet-iku2.hp.infoseek.co.jp/cgi-bin/treecrsdx01/index.cgi?m=look&bnum=3013


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加