反応が遅い?

タグの編集
投稿者 初心者  () 投稿日時 2008/7/31 20:03:00
全て表示
投稿者 るきお  () 投稿日時 2008/8/1 05:53:00
画像をすばやく左右に移動させたいのであればPictureBoxを使わないで直接描画します。 
ただし、これでもそれほど速くなく、もっと速くしたいのであればDirectXの導入を検討します。 
 
以下、直接描画する例です。 
移動量を増やせば一応素早くはなりますが動きが荒くなりますよね。 
他の方からも指摘が出ているように入力方式も見直した方がいいかもしれませんが、とりあえずKeyDownを踏襲しました。 
 
Public Class Form1 
 
    Dim Photo As Image 
    Dim PhotoLocation As Point 
 
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
 
        Select Case e.KeyCode 
            Case Keys.Right 
                PhotoLocation.X += 20 
            Case Keys.Left 
                PhotoLocation.X -= 20 
            Case Else 
                Return 
        End Select 
 
        Me.Invalidate() 
 
    End Sub 
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
 
        Photo = Image.FromFile("C:\Windows\隅田川.bmp") 
        PhotoLocation = New Point(200, 100) 
        Me.KeyPreview = True 
        Me.DoubleBuffered = True 
        Me.BackColor = Color.Black 
 
    End Sub 
 
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint 
 
        e.Graphics.DrawImage(Photo, PhotoLocation) 
 
 
    End Sub 
 
End Class
投稿者 るきお  () 投稿日時 2008/8/1 06:01:00
補足します。 
「PictureBoxを使わないで直接描画します。 」と書きましたが、これは別にFormに描画という意味ではなく、DrawImageなどの描画メソッドを使って描画するという意味で、 
描画先はFormでもPictureBoxでも大差ありません。 
 
私のサンプルを実行するには何もないフォームにコードを貼り付けてプログラムを開始するだけです。何もコントロールを配置する必要はありません。 
 
ただし、初心者さんが提示されたコードと速度はほとんど変わらないです。若干速い気はしますが気のせいかもしれません…。
投稿者 初心者  () 投稿日時 2008/9/12 06:22:00
皆さん、例を出してくれると幸いです。
投稿者   () 投稿日時 2008/9/14 03:16:00
>>6 
何を作ってるんだ? 
あのさぁ、キーボードでキャラ動かしたりするのは、やめた方がよい。 
ちなみに私はキーボードで動かすonlineGameは、やらない。理由? 
指が疲れる。1時間でケイレンしそうになった。 
マウスで処理した方がいいよ。 
画面にジョイスティクを描画するか、ラベルでも使った方がいい。 
koeigameはマウスで動かせるから、あまり疲れない。 
{上}{下}{右}{左} 
処理は速い。
投稿者   () 投稿日時 2008/9/14 05:03:00
>>6 
まぁ、反映してるかどうか知らんが。 
見えてる? 
マウス処理なら50倍の速さになる。 
それにツッコミ所は、イベントのトコ。 
Form1_keydownでよいのでは? 
それと、マウス処理で50倍の速さになっても、gameセンターのように綺麗に移動しないよ。 
もうちょっと、速い言語なら綺麗に動く。 
マシン語に近い言語なら綺麗に動く。
投稿者 初心者  () 投稿日時 2008/9/14 05:25:00
>>8 
Form1_KeyDownってどうやって作る(?)のですか?
投稿者 初心者  () 投稿日時 2008/9/14 05:27:00
>>9 
それと、マウス処理ってどんな感じですか?学校の授業とかで急がしのでVBあまり勉強できていないので、どうかお願いします。
投稿者 初心者  () 投稿日時 2008/9/14 06:30:00
Form1_KeyDownは解決しました。ご迷惑をお掛けしました。
投稿者   () 投稿日時 2008/9/14 07:55:00
>>11 
学校の勉強のが難しいはず。 
basicは簡単なはずですよ。 
 
ではでは。
投稿者 初心者  () 投稿日時 2008/9/14 08:19:00
>>12 
 解決しました。みなさんのおかげです。学校の授業やVBをこれからもがんばっていきたいと思っています。本当に感謝しています。 
 Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
        If e.KeyCode = Keys.Right Then 
            Timer1.Enabled = True 
        End If 
 
        If e.KeyCode = Keys.Left Then 
            Timer2.Enabled = True 
        End If 
    End Sub 
 
    Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp 
        If e.KeyCode = Keys.Right Then 
            Timer1.Enabled = False 
        ElseIf e.KeyCode = Keys.Left Then 
            Timer2.Enabled = False 
        End If 
    End Sub 
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
        If Label1.Location.X <= 192 Then 
            Label1.Location = New Point(Label1.Location.X + 5, Label1.Location.Y) 
        End If 
    End Sub 
 
    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick 
        If Label1.Location.X >= 0 Then 
            Label1.Location = New Point(Label1.Location.X - 5, Label1.Location.Y) 
        End If 
    End Sub