Мерцание движущихся объектов на форме

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
V@NY$
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.01.2005 (Пт) 19:16

Мерцание движущихся объектов на форме

Сообщение V@NY$ » 28.01.2005 (Пт) 19:51

пожалусто не надо говорить что я тупой и мне здесь нечего делать...
как зделать чтобы у меня на форме например shape при движении не мерцал?
я знаю что надо использовать BitBlt или DirectX, но у меня не получается. прочитал статьи по DirectX и у меня не получилось зделать работующий проект (не понял там ни одной строчки :oops: ).

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 28.01.2005 (Пт) 23:54

V@NY$ писал(а):пожалусто не надо говорить что я тупой и мне здесь нечего делать...
как зделать чтобы у меня на форме например shape при движении не мерцал?
я знаю что надо использовать BitBlt или DirectX, но у меня не получается. прочитал статьи по DirectX и у меня не получилось зделать работующий проект (не понял там ни одной строчки :oops: ).
Приведи свой код - как ты пытался это сделать.
И тебе помогут. А не видя кода, решать за тебя задачу - это вряд ли кто-нибудь будет делать.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

V@NY$
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.01.2005 (Пт) 19:16

Сообщение V@NY$ » 29.01.2005 (Сб) 12:56

Код: Выделить всё
Dim all As Integer
Dim X As Integer
Dim Y As Integer
Dim Z As Integer
Dim W As Integer


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)



Select Case KeyCode
        Case vbKeyW
        TUp.Enabled = True
       
        Case vbKeyS
        TDown.Enabled = True
End Select

End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
       
        Case vbKeyW
        TUp.Enabled = False
       
        Case vbKeyS
        TDown.Enabled = False
       
        End Select
End Sub


Private Sub GO_Click()
Gravity.Enabled = True
GO.Visible = False
End Sub

Private Sub Gravity_Timer()

Ship.Top = Ship.Top + SpeedD.Caption

SpeedD.Caption = SpeedD.Caption + (Mass.Caption / 2)


    If SpeedD.Caption <= (-Power.Caption) Then
    SpeedD.Caption = (-Power.Caption)
    End If

   
BoxAnalize

End Sub

Sub BoxAnalize()
Randomize

If W >= 1000 Then
GTime.Caption = GTime.Caption + 1
W = 0
MoveB.Caption = MoveB.Caption + 1
Else
W = W + 20
End If

For all = 0 To 17
   
    If (Ship.Top + Ship.Height) >= Box(all).Top Then
        If Ship.Top <= (Box(all).Top + Box(all).Height) Then
            If Ship.Left <= (Box(all).Left + Box(all).Width) Then
                If (Ship.Left + Ship.Width) >= Box(all).Left Then
                EndE
                End If
            End If
        End If
    End If
   
X = X + 1
If X >= 500 Then
X = 0
Dlinna.Caption = Dlinna.Caption + 1
End If

'============================================================

Box(all).Left = Box(all).Left - MoveB.Caption

If Box(all).Left + Box(all).Width < 0 Then
Box(all).Left = Form1.ScaleWidth


    If all >= 0 And all <= 7 Then
    Y = Int(Rnd * (-1000))
    Box(all).Top = Form1.ScaleHeight + Y
    Box(all).Height = Y * (-1)
    End If
   
    If all >= 8 And all <= 15 Then
    X = Int(Rnd * (1000))
    Box(all).Top = 0
    Box(all).Height = X
    End If
   
    If all >= 16 And all <= 17 Then
    Box(all).Top = Int(Rnd * (Form1.ScaleHeight))
    Box(all).Height = Int(Rnd * (200)) + 200
    Box(all).Left = Int(Rnd * (Form1.ScaleWidth) / 2) + Form1.ScaleWidth
    End If

   
End If

'============================================================

Next

End Sub

Private Sub TUp_Timer()
SpeedD.Caption = SpeedD.Caption - Power.Caption / 10

    If SpeedD.Caption <= (-Power.Caption) Then
    SpeedD.Caption = (-Power.Caption)
    End If
   
End Sub

Sub EndE()
MsgBox Dlinna.Caption
End
End Sub

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 29.01.2005 (Сб) 13:01

Я вижу, у тебя там несколько объектов на форме, но не вижу, каких :) Было бы лучше, если бы ты сюда сам проект кинул :)

V@NY$
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.01.2005 (Пт) 19:16

Сообщение V@NY$ » 29.01.2005 (Сб) 13:07

А как это сделать?

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 29.01.2005 (Сб) 13:09

Да просто открой твой файл формы (Form1.frm) блокнотом и скопируй сюда весь текст :)

V@NY$
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.01.2005 (Пт) 19:16

Сообщение V@NY$ » 29.01.2005 (Сб) 13:19

Код: Выделить всё
VERSION 5.00
Begin VB.Form Form1
   BackColor       =   &H003069C0&
   BorderStyle     =   4  'Fixed ToolWindow
   Caption         =   "Form1"
   ClientHeight    =   3195
   ClientLeft      =   45
   ClientTop       =   285
   ClientWidth     =   4770
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   3195
   ScaleWidth      =   4770
   ShowInTaskbar   =   0   'False
   StartUpPosition =   3  'Windows Default
   Begin VB.CommandButton GO
      Caption         =   "GO!"
      Height          =   375
      Left            =   3840
      TabIndex        =   5
      Top             =   120
      Width           =   735
   End
   Begin VB.Timer Gravity
      Enabled         =   0   'False
      Interval        =   20
      Left            =   1200
      Top             =   1845
   End
   Begin VB.Timer TDown
      Enabled         =   0   'False
      Interval        =   20
      Left            =   1200
      Top             =   1425
   End
   Begin VB.Timer TUp
      Enabled         =   0   'False
      Interval        =   20
      Left            =   1200
      Top             =   1005
   End
   Begin VB.Label GTime
      BorderStyle     =   1  'Fixed Single
      Caption         =   "0"
      Height          =   255
      Left            =   1200
      TabIndex        =   6
      Top             =   120
      Width           =   735
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   165
      Index           =   17
      Left            =   2760
      Top             =   2880
      Width           =   300
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   165
      Index           =   16
      Left            =   240
      Top             =   2880
      Width           =   300
   End
   Begin VB.Label Dlinna
      BorderStyle     =   1  'Fixed Single
      Caption         =   "0"
      Height          =   255
      Left            =   1920
      TabIndex        =   4
      Top             =   120
      Width           =   735
   End
   Begin VB.Label MoveB
      BorderStyle     =   1  'Fixed Single
      Caption         =   "40"
      Height          =   255
      Left            =   3240
      TabIndex        =   3
      Top             =   2880
      Width           =   735
   End
   Begin VB.Label SpeedD
      BorderStyle     =   1  'Fixed Single
      Caption         =   "0"
      Height          =   255
      Left            =   3960
      TabIndex        =   2
      Top             =   2910
      Width           =   735
   End
   Begin VB.Label Mass
      BorderStyle     =   1  'Fixed Single
      Caption         =   "5"
      Height          =   255
      Left            =   3960
      TabIndex        =   1
      Top             =   2655
      Width           =   735
   End
   Begin VB.Label Power
      BorderStyle     =   1  'Fixed Single
      Caption         =   "60"
      Height          =   255
      Left            =   3960
      TabIndex        =   0
      Top             =   2400
      Width           =   735
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   15
      Left            =   4200
      Top             =   800
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   14
      Left            =   3600
      Top             =   800
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   13
      Left            =   3000
      Top             =   800
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   12
      Left            =   2400
      Top             =   800
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   11
      Left            =   1800
      Top             =   800
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   10
      Left            =   1200
      Top             =   800
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   9
      Left            =   600
      Top             =   800
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   195
      Index           =   8
      Left            =   0
      Top             =   800
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   7
      Left            =   4200
      Top             =   2160
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   6
      Left            =   3600
      Top             =   2160
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   5
      Left            =   3000
      Top             =   2160
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   4
      Left            =   2400
      Top             =   2160
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   3
      Left            =   1800
      Top             =   2160
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   2
      Left            =   1200
      Top             =   2160
      Width           =   615
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   1
      Left            =   600
      Top             =   2160
      Width           =   615
   End
   Begin VB.Shape Ship
      BackColor       =   &H00C0C000&
      BackStyle       =   1  'Opaque
      Height          =   255
      Left            =   1800
      Top             =   1320
      Width           =   375
   End
   Begin VB.Shape Box
      BackColor       =   &H00004080&
      BackStyle       =   1  'Opaque
      Height          =   200
      Index           =   0
      Left            =   0
      Top             =   2160
      Width           =   615
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim all As Integer
Dim X As Integer
Dim Y As Integer
Dim Z As Integer
Dim W As Integer
Dim VANYS As Integer


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)



Select Case KeyCode
        Case vbKeyW
        TUp.Enabled = True
       
        Case vbKeyS
        TDown.Enabled = True
End Select

End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
       
        Case vbKeyW
        TUp.Enabled = False
       
        Case vbKeyS
        TDown.Enabled = False
       
        End Select
End Sub


Private Sub GO_Click()
Gravity.Enabled = True
GO.Visible = False
End Sub

Private Sub Gravity_Timer()

Ship.Top = Ship.Top + SpeedD.Caption

SpeedD.Caption = SpeedD.Caption + (Mass.Caption / 2)


    If SpeedD.Caption <= (-Power.Caption) Then
    SpeedD.Caption = (-Power.Caption)
    End If

   
BoxAnalize

End Sub

Sub BoxAnalize()
Randomize

If W >= 1000 Then
GTime.Caption = GTime.Caption + 1
W = 0
MoveB.Caption = MoveB.Caption + 1
Else
W = W + 20
End If

For all = 0 To 17
   
    If (Ship.Top + Ship.Height) >= Box(all).Top Then
        If Ship.Top <= (Box(all).Top + Box(all).Height) Then
            If Ship.Left <= (Box(all).Left + Box(all).Width) Then
                If (Ship.Left + Ship.Width) >= Box(all).Left Then
                EndE
                End If
            End If
        End If
    End If
   
X = X + 1
If X >= 500 Then
X = 0
Dlinna.Caption = Dlinna.Caption + 1
End If

'============================================================

Box(all).Left = Box(all).Left - MoveB.Caption

If Box(all).Left + Box(all).Width < 0 Then
Box(all).Left = Form1.ScaleWidth


    If all >= 0 And all <= 7 Then
    Y = Int(Rnd * (-1000))
    Box(all).Top = Form1.ScaleHeight + Y
    Box(all).Height = Y * (-1)
    End If
   
    If all >= 8 And all <= 15 Then
    X = Int(Rnd * (1000))
    Box(all).Top = 0
    Box(all).Height = X
    End If
   
    If all >= 16 And all <= 17 Then
    Box(all).Top = Int(Rnd * (Form1.ScaleHeight))
    Box(all).Height = Int(Rnd * (200)) + 200
    Box(all).Left = Int(Rnd * (Form1.ScaleWidth) / 2) + Form1.ScaleWidth
    End If

   
End If

'============================================================

Next

End Sub

Private Sub TUp_Timer()
SpeedD.Caption = SpeedD.Caption - Power.Caption / 10

    If SpeedD.Caption <= (-Power.Caption) Then
    SpeedD.Caption = (-Power.Caption)
    End If
   
End Sub

Sub EndE()
MsgBox Dlinna.Caption
End
End Sub

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 29.01.2005 (Сб) 13:41

У меня не мерцает ничего :?

V@NY$
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 28.01.2005 (Пт) 19:16

Сообщение V@NY$ » 29.01.2005 (Сб) 14:12

странно, а у меня мерцает. :?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: PetalBot и гости: 8

    TopList