Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Far muovere una shape in un form
Forum - Visual Basic 6 - Far muovere una shape in un form

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
dany92 (Normal User)
Newbie


Messaggi: 7
Iscritto: 17/11/2008

Segnala al moderatore
Postato alle 16:17
Lunedì, 17/11/2008
Ciao a tutti ragazzi. Devo fare un programmino che mi permetta di muovere una shape (cerchio) tramite 4 pulsanti nelle 4 direzioni e cambiarne la dimensione tramite una scrollbar all'interno di un form. A fare questo ho già provveduto ma ora mi è sorto un bel dubbio. Devo fare in modo che quando la shape arrivi ad un estremo del form ricominci il suo cammino dall'estremo opposto del form...non so se mi sono spiegato bene... ecco comunque il codice del programmino:

Private Sub cmdDx_Click()
shpPallina.Left = shpPallina.Left + 100
End Sub

Private Sub cmdGiu_Click()
shpPallina.Top = shpPallina.Top + 100
End Sub

Private Sub cmdSu_Click()
shpPallina.Top = shpPallina.Top - 100
End Sub

Private Sub cmdSx_Click()
shpPallina.Left = shpPallina.Left - 100
End Sub

Private Sub hsbDimensione_Change()
shpPallina.Width = hsbDimensione.Value * 10
shpPallina.Height = hsbDimensione.Value * 10
End Sub


Grazie anticipatamente a tutti coloro che mi aiuteranno:k:

Ultima modifica effettuata da dany92 il 17/11/2008 alle 16:18
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 21:10
Lunedì, 17/11/2008
Bè dovresti utilizzare degli if e controllare che i tuoi valori non superino il width e l'heigth del form...

PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 22:25
Lunedì, 17/11/2008
ho avuto lo stesso problema per un mio programma
2 shape dovevano rimbalzare sullo schermo
il prog è qui
http://www.pierotofy.it/pages/download.php?filename=100p97 ...

PM Quote
Avatar
dany92 (Normal User)
Newbie


Messaggi: 7
Iscritto: 17/11/2008

Segnala al moderatore
Postato alle 16:08
Martedì, 18/11/2008
Grazie prenderò qualche spunto :k::k:

PM Quote
Avatar
P4p3r0g4 (Member)
Guru


Messaggi: 1319
Iscritto: 29/12/2006

Segnala al moderatore
Postato alle 16:10
Martedì, 18/11/2008
beh se il movimento e` un avanzamento lineare in x,y
x = x + k
y = y + w
basterebbe invertire il segno di k quando si supera il limite destro o sinstro
mentre invertire il segno di w quando si supera il limite superiore o inferiore.

PM Quote
Avatar
dany92 (Normal User)
Newbie


Messaggi: 7
Iscritto: 17/11/2008

Segnala al moderatore
Postato alle 18:13
Mercoledì, 19/11/2008
Grazie a tutti ragazzi è riuscito tutto bene grazie a voi...evito di aprire un altro topic e quindi vi faccio un'altra domanda sempre qui che riguarda lo stesso argomento.: devo fare un programmino nel quale sia presente una shape (shpCircle) che in pratica deve muoversi linearmente (da sinistra a destra) nel form e quando tocca uno dei bordi deve "rimbalzare". La velocità di movimento della shape la definisco io per mezzo di una scrollbar. Ho dichiarato una variabile booleana (avanti) che dovrebbe essere vera all'avvio del form e appena tocca il bordo destro del form stesso deve diventare falsa e far variare quindi il movimento della pallina nel verso opposto e così via...ora ho fatto il programma ma il problema è che quando tocca il bordo destro del form fa un passetto indietro e poi ritorna ad andare avanti facendo questo movimento all'infinito....come potrei risolvere??

ecco il codice intanto:


Option Explicit
Dim Avanti As Boolean

Private Sub cmdStart_Click()
tmrTempo.Enabled = True
End Sub

Private Sub cmdStop_Click()
tmrTempo.Enabled = False
End Sub

Private Sub Form_Load()
tmrTempo.Interval = hsbTempo.Value
Avanti = True
End Sub

Private Sub hsbTempo_Change()
tmrTempo.Interval = hsbTempo.Value
End Sub

Private Sub tmrTempo_Timer()
If (shpCircle.Left + shpCircle.Width) = (Form1.ScaleLeft + Form1.ScaleWidth) Then
    Avanti = True
Else
    Avanti = False
End If

If Avanti = True Then
    shpCircle.Left = shpCircle.Left + 100
Else
    shpCircle.Left = shpCircle.Left - 100
End If
End Sub


Ultima modifica effettuata da dany92 il 19/11/2008 alle 18:14
PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 18:33
Mercoledì, 19/11/2008
Per capire gli errori devi "leggere" il codice...nelle ultime righe tu dici:

se la pallina supera i bordi:
avanti = true
altrimenti
avanti = false

poi dici...

se avanti = true allora
muovi + 100 (avanti)
altrimenti
muovi - 100 (indietro)

allora la pallina tocca il bordo e avanti diventa falso, poi tornando indietro però non tocca più il bordo e quindi avanti ridiventa true allora avanza ma c'è di nuovo il bordo e quindi va indietro ma andando indietro non c'è più il bordo così va avanti...e così via, ora capisci il perchè?
Riesci a cavartela da solo o hai bisogno di aiuto?

PM Quote
Avatar
dany92 (Normal User)
Newbie


Messaggi: 7
Iscritto: 17/11/2008

Segnala al moderatore
Postato alle 16:43
Giovedì, 20/11/2008
sisi l'errore lo capisco ma il fatto è che non so come continuare in modo da far restare avanti = falso...se potessi aiutarmi mi faresti un grosso favore...grazie:k:

PM Quote
Avatar
antometal (Member)
Guru


Messaggi: 691
Iscritto: 12/09/2007

Segnala al moderatore
Postato alle 19:41
Giovedì, 20/11/2008
a me così funziona
Codice sorgente - presumibilmente VB.NET

  1. Public Avanti As Boolean
  2. Private Sub Form_Load()
  3. Avanti = True
  4. End Sub
  5.  
  6. Private Sub tmrTempo_Timer()
  7.     If shpCircle.Left + shpCircle.Width >= Form1.ScaleWidth Then Avanti = True
  8.     If shpCircle.Left <= 0 Then Avanti = False
  9.  
  10.     If Avanti = False Then shpCircle.Left = shpCircle.Left + 100
  11.     If Avanti = True Then shpCircle.Left = shpCircle.Left - 100
  12. End Sub


PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo