• 締切済み

VB2008でブロック崩しを作っているのですが、玉は動くようになり次に

VB2008でブロック崩しを作っているのですが、玉は動くようになり次に自機を動かそうと思いやってみたのですが動きません。 もう一つプロジェクトを作って自機を動かす文だけでやってみるときちんと動きます。 Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown Dim w As Graphics = Pic1.CreateGraphics() w.DrawImage(picback, zikiX, zikiY, rect, GraphicsUnit.Pixel) Select Case e.KeyCode Case Keys.Left : zikiX -= 3 Case Keys.Right : zikiX += 3 End Select w.DrawImage(ziki, zikiX, zikiY) w.Dispose() End Sub Private Sub ballmove() Dim g As Graphics = Pic1.CreateGraphics() tamasita = y + 28 tamawidth = x + 28 zikiwidth = zikiX + 15 zikisita = zikiY + 73 rec.X = x : rec.Y = y : rec.Width = 28 : rec.Height = 28 g.DrawImage(picback, x, y, rec, GraphicsUnit.Pixel) g.DrawImage(ziki, zikiX, zikiY) If x + 28 >= Pic1.Width Then flag_x = False ElseIf x < 1 And flag_x = False Then flag_x = True End If If y + 28 >= Pic1.Height Then flag_y = False ElseIf y < 1 And flag_y = False Then flag_y = True End If If flag_x = True Then x = x + 3 Else x = x - 3 End If If flag_y = True Then y = y + 3 Else y = y - 3 End If g.DrawImage(tama, x, y) g.Dispose() End Sub

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

ソースを追いかけたわけでないですが、玉が動いていたらバーが動かないとか。その逆か。イベントを見直す。 玉とカーソルバーは同時に稼動されるようになっていますか。タイマー使ってますか。

関連するQ&A

  • モードレスボタンを押す事により処理を中断する。

    初めまして、以下のVBAを組みました。メインプロシージャは以下の通りです。処理時間が長いので、途中でボタンを押す事により、中断したいと思っております。しかし、ボタンおしても止まりません。何卒ご教授の程宜しくお願い申し上げます。 c = 0 g = 0 UserForm.Show vbModeless UserForm.Repaint flag = False For y = kk To ll For x = ii To jj If ws1.Cells(y, x).Value = ws2.Cells(y, x).Value Then Else g = g + 1 c = c + 1 ws2.Cells(y, x).Interior.ColorIndex = 3 ws3.Cells(g, "A") = Cells(y, x).Address(RowAbsolute:=False, ColumnAbsolute:=False) End If DoEvents If flag Then Exit For Next x If flag = True Then GoTo ErrorHandler: Next y flag = False Unload UserForm Exit Sub ErrorHandler: flag = False Unload UserForm MsgBox "エラーで終了しました。" End Sub ユーザーフォームは以下の通りです。 Private Sub CommandButton1_Click() flag = True End Sub 当然flagはメインプロシージャの前に定義しております。 以上、宜しくお願い申し上げます。

  • 描画した後での塗りるぶし VB

    丸を描画後にColorDialogで指定された色で丸の範囲だけ塗りつぶすというプログラムを作っているのですが、なかなかうまくいきません。 丸は、このように描画するようにしています。 Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove If (e.Button = MouseButtons.Left) Then Dim g As Graphics = PictureBox1.CreateGraphics() Dim ePos As MouseEventArgs PictureBox1.Refresh() g.DrawEllipse(New Pen(Color.Black, 2), Spos.X, Spos.Y, e.X - Spos.X, e.Y - Spos.Y) ePos = e g.Dispose() End If End Sub Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown If (e.Button = System.Windows.Forms.MouseButtons.Left) Then Spos = e End If End Sub VB2010を使っています。 どなたか教えていただけるとありがたいです。よろしくお願いします。

  • ボタンが押されたときの反応 Basic

    Active Basicでゲームプログラムを書いています。 ボタンを押したときの反応で、上下左右に画像を動かしたいのですが、 ボタンを押すと、いったん静止してから、連打処理(?)のように動きます。 やりたいことは、ボタンを押すとすぐに上下左右に一定間隔で画像を動かすことです。 Sub MainWnd_KeyDown(KeyCode As Long, flags As Long) If KeyCode=37 Then If x<=3 Then Exit Sub End If MyBmpInfo=2 x=x-5 Else If KeyCode=38 Then If y<=0 Then Exit Sub End If MyBmpInfo=1 y=y-5 Else If KeyCode=39 Then If x>=600 Then Exit Sub End If MyBmpInfo=3 x=x+5 Else If KeyCode=40 Then If y>=400 Then Exit Sub End If y=y+5 End If InvalidateRect(hMainWnd,ByVal 0,TRUE) End Sub と書きました。 すみませんが、どなたかご存知の方がいらっしゃいましたら、ご教授ください。 お願いします。

  • End Ifは不要な場合もある?

    Excel2010使用で下記のVBAのコードを書きました。 Sub イフとエンドイフは組ではなかったのか()  Dim Flag As Boolean  Dim S As Worksheet   For Each S In Worksheets    If S.Name = "合計" Then Flag = True '   Else '    Flag = False '   End If   Next S   If Flag = True Then    MsgBox "「合計」というシートはすでに存在します"   Else    Worksheets(1).Copy after:=Worksheets(Worksheets.Count)    ActiveSheet.Name = "合計"   End If End Sub 前半の >' Else >' Flag = False >' End If の部分があると「Elseに対応するIfがありません」というエラーが出ます。 Elseに関する記述だけをコメントアウトすると「End Ifに対応するIfブロックがありません」というエラーが出ます。 この部分をコメントアウトすればきちんと動作するのですが、If文はちゃんと存在しているにもかかわらず、またほとんど同じ記述の後半ではエラーが出ないというのに、なぜこのようなエラーが出るのかわかりません。 なにか勘違いをしているのでしょうか。

  • 【VB】もっと簡単に書けないかな?

    お世話になっております。VB2005を最近かじりました。 フォーム上にボタンが100個ほど並んでいます。 グローバル変数としてboolean型のフラグを立てて、 ボタンを押したらボタンの色がピンクに、もう一度押したら元の色にという ごく簡単なプログラムを書きたいのですが、 1個のボタンごとに Private Flag as Boolean   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Select Case Flag     Case False       Button1.BackColor = Color.Pink       Flag = True     Case True       Button1.BackColor = Color.FromKnownColor(KnownColor.ControlLight)       Flag = False     End Select   End Sub というプログラムを書くと100個同じようなプログラムを書かなくてはいけなくなり、大変手間がかかりメンテも大変です。 もっと簡単にする方法があったら教えていただきたく存じます。

  • Internet Explorerの起動状態をチェック

    IEが起動中の時はそれを使い、未起動の場合は新規に作成する、、、というのがしたくて次のようなコードをつくってみました。 ところが、 Set myIE = myShellwindows のところでエラーになります。 これを防ぐにはどのようにするといいのでしょうか? Sub Set_IE() Dim myIE As Object Dim myShellwindows As Object Dim myObject As Object Dim Flag As Boolean Set myShellwindows = CreatmyObject("Shell.Application").Windows() Flag = False For Each myObject In myShellwindows If TypeName(myObject) = "IWebBrowser2" Then Flag = True Exit For End If Next If Flag = True Then Set myIE = myShellwindows Else Set myIE = CreatmyObject("InternetExplorer.application") myIE.Visible = True End If Set myShellwindows = Nothing Set myIE = Nothing End Sub

  • VB6 ドラッグ&ドロップ

    Image1をPicture1(正方形)にドラッグ&ドロップするプログラム を作りたいと思っています。 このプログラムだとImage1全体がドラッグされるのではなく、 Image1の絵はその位置に残ってImage1の外枠だけがドラッグされてしまいます。 外枠だけでなくImage1の絵も一緒にドラッグできるようにするにはどうすればいいのでしょうか? また、このプログラムだとドロップする場所(Picture1_)以外で ドロップしてしまった場合でも画面上からImage1の絵と外枠が消えてしまいます。 ドロップする場所(Picture1_)以外でドロップしてしまった場合は、 Image1全体を画面上に残しておきたいのですがどうすればいいのでしょうか? Option Explicit Dim dx As Single, dy As Single Private Sub Form_Load() Image1.Picture = LoadPicture(App.Path & "picture.jpg") Image1.Stretch = True End Sub Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Source.Move X - dx, Y - dy End Sub Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Image1.Drag 1 dx = X: dy = Y 'マウスダウン位置 End Sub Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single) Source.Visible = False 'ドロップオブジェクトを非表示にする Picture1.BackColor = RGB(255, 255, 255) End Sub Private Sub Picture1_DragOver(Source As Control, X As Single, Y As Single, _ State As Integer) If State = 0 Then Picture1.BackColor = RGB(0, 0, 255) If State = 1 Then Picture1.BackColor = RGB(255, 255, 255) End Sub

  • VB.NET Form1からForm2を開いたり閉じたりする方法

    VB.NET2005でForm1にあるCheckBoxをTrueにするとform2をモードレスフォームとして開き、CheckBoxをFalseにするとform2を閉じる方法がわかりません。また、form2の[×]で閉じた時にはForm1にあるCheckBoxをFalseにする方法がわかりません。 '----------------------------------- Private Sub CheckBox2_CheckedChanged ・・・   Dim f_cnt As Integer   Dim form2 As New Form2()   f_cnt = My.Application.OpenForms.Count   If CheckBox1.Checked = True Then     If f_cnt = 1 Then form1.Show() 'モードレスフォームとして表示する   Else    form2.Close() ←閉じない   End If End Sub '-----------------------------------

  • もしも新規Excelファイルを開いてる場合は閉じる

    Excel2003です・ ユーザーが新規Excelファイル(book1)かテスト用ファイルを開いている場合は閉じる処理を考えております。 Option Explicit Dim ws As Workbook, flag As Boolean Private Sub Workbook_Open() For Each ws In Workbooks If ws.Name = "Book1" Then flag = True Next ws If flag = True Then Workbooks("Book1.xls").Close   Else   End IF For Each ws In Workbooks If ws.Name = "テスト用.xls" Then flag = True Next ws If flag = True Then Workbooks("テスト用.xls").Close   Else   End IF End Sub このコードだとBook1を開いているのに、Trueで拾ってくれません。 ws.Name = "Book1.xls"にしても同じです。 どこかおかしい部分があるのでしょうか?

  • VB2005 コード記述作法

    VBのコード記述作法に自身がなく不安です。 CADのラバーラインのような感じです。 PictureBoxを置いてFormの上下左右にアンカーしてるだけです。 lineモードにXorがないので下記のようにしました。 今は、とりあえず動いてますが、<?>印部分をここに記述しても安定動作しますか? (メモリの無駄使いとか・CPUの負荷とか) 又Form1_Resizeで再描画してますが、Windowを最小化すると当然でしょうが PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height) でエラーになります。 これを防ぐ方法を教えて下さい。 Public Class Form1 Private sx, sy, ex, ey As Integer Private flg As Boolean = False Private fg, bg As Graphics   '----<?>---- Private d(100, 4) As Integer Private po As Integer = 1 '-------------------------------- Private Sub PictureBox1_MouseDown(~~ If flg = False Then sx = e.X sy = e.Y ex = sx ey = sy flg = True fg = PictureBox1.CreateGraphics() '----<?>---- Else flg = False ex = e.X ey = e.Y PictureBox1.Refresh() fg.Dispose() '----<?>---- bg = Graphics.FromImage(PictureBox1.Image) '----<?>---- bg.DrawLine(Pens.Black, sx, sy, ex, ey) bg.Dispose() '----<?>---- PictureBox1.Refresh() d(po, 1) = sx d(po, 2) = sy d(po, 3) = ex d(po, 4) = ey po = po + 1 End If End Sub '-------------------------------- Private Sub PictureBox1_MouseMove(~~ If flg = True Then PictureBox1.Refresh() fg.DrawLine(Pens.Blue, sx, sy, e.X, e.Y) ex = e.X ey = e.Y End If End Sub '-------------------------------- Private Sub Form1_Resize(~~ Dim x As Integer PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height) bg = Graphics.FromImage(PictureBox1.Image) ' ----<?>---- For x = 1 To po - 1 bg.DrawLine(Pens.Black, d(x, 1), d(x, 2), d(x, 3), d(x, 4)) Next bg.Dispose() ' ----<?>---- End Sub '-------------------------------- End Class

専門家に質問してみよう