アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBを始めたばかりの初心者です。
VB2008を使ってPictureBoxに取り込んだイラストをキーボードを使って自由に動かしたいと思っています。

今作ったものの問題点

1.現状、全く同時に→と↑のキーを押せば右上に動きます。
 また、→キーを押してイラストが右に動いているときに、↑キーを押すと上に動きます。
 これを右上に動くようにする方法が知りたいのです。

2.キーを押し続けてイラストを動かし続けようとすると、一回動いて止まってから動き続けるという風になってしまいます。
 これを止まらずに動くようにしたいのです。

ちなみにこれ↓が今のソースコードです。

Public Class Form1

Private Sub form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Up Then
PictureBox1.Top = PictureBox1.Top - 10
End If
End Sub
Private Sub form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Down Then
PictureBox1.Top = PictureBox1.Top + 10
End If
End Sub
Private Sub form1_KeyLeft(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Left Then
PictureBox1.Left = PictureBox1.Left - 10
End If
End Sub
Private Sub form1_KeyRight(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Right Then
PictureBox1.Left = PictureBox1.Left + 10
End If
End Sub
End Class

これ↑を実行する場合は、デザインにPictureBoxを表示してください。PictureBoxに入れるイラストは適当なものを入れてください。

よろしくお願いします。

A 回答 (1件)

4方向のフラグをForm1クラスに準備してTimerで動かすようにしてみましょう



dim bUP, bDown, bLeft, bRight as Boolean
と宣言しておきます
FormのKeyUpとKeyDownを
---- FormのKeyUpイベント
Select Case e.KeyCode
  case Keys.Up
    bUp = False
  case Keys.Down
    bDown = False
  case Keys.Left
    bLeft = False
  case Keys.Right
    bRight = False
  end select

---- FormのKeyDown イベント
Select Case e.KeyCode
  case Keys.Up
    bUp = True
  case Keys.Down
    bDown = True
  case Keys.Left
    bLeft = True
  case Keys.Right
    bRight = True
  end select
---- FormのLoadイベント
Me.keyPreview = True
Timer1.Enabled = True

--- Timer1のTickイベント
dim pt as Point = PictureBox1.Location
if bUp or bDown then
  pt.Y -= IIF( bUp, 10, 0 )
  pt.Y += IIF( bDown, 10, 0 )
end if
if bLeft or bRight then
  pt.X -= IIF( bLeft, 10, 0 )
  pt.X += IIF( bRight, 10, 0 )
end if
PictureBox1.Location = pt
といた具合でどうでしょう
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えていただいたとおりに行うと、正しくできました。
このソースコードの意味はこれから勉強していきたいと思います。
また質問させていただくときには、よろしくお願いします。

お礼日時:2009/05/19 20:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!