+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

[VB2010] Spostamento e collisione PictureBox

  1. #1
    scorpionato non  in linea Novello
    Salve a tutti mi chiamo sandro
    Ho visto diverse risoluzioni di Post e mi servirebbero i vostri aiuti in 2 cosine....
    A scuola stiamo facendo un gioco di nome space invaders, se hai in mente quello degli anni 70...., Comunque io sono arrivato a un punto che quando sparo con il carro armato vedo la picture proiettili salire in modo del tutto normale(Quindi ho sparato 1 colpo), ma dopo Se ripremo sul tasto che da il comando di far partire la pictureProiettili questa la vedo apparire e ferma nel proprio posto.
    Ho provato a risolvere Dicendo attraverso un comando che se La pictureProiettili si trova nella posizione "365;0" allora timerProiettili deve rifare il processo di prima ritornando in enebled, ma se metto questo codice e avvio il debug mi va in blocco la form e mi esce:
    Cast non valido dalla stringa "365;0" al tipo 'Integer'.
    2) Vorrei fare in modo che quando colpisco con il "proiettile" una delle picture "Alieni" questa faccia vedere un altra picture e dopo ancora che quella picture sparisca...
    Non so se mi sono spiegato bene :/
    In attesa di vostra risposta
    Saluti Sandro
    Ultima modifica di elisab; 20-04-2012 00:48 

  2. #2
    L'avatar di elisab
    elisab non  in linea Topo di biblioteca
    Ciao
    posta il codice dello sparo in cui sposti la picture. Quella di postare il codice prendila come regola perch altrimenti difficile ricevere un aiuto preciso.

    Ho provato a risolvere Dicendo attraverso un comando che se La pictureProiettili si trova nella posizione "365;0" allora timerProiettili deve rifare il processo di prima ritornando in enebled, ma se metto questo codice e avvio il debug mi va in blocco la form e mi esce:
    Cast non valido dalla stringa "365;0" al tipo 'Integer'.
    Posta anche questo perch spiegato a parole difficile darti un'indicazione.
    ℹ️ Leggi di pi su elisab ...

  3. #3
    scorpionato non  in linea Novello
    prima parte:
    Dim n as integer
    Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
            Select Case e.KeyValue
    
    Case Keys.Up
                    PictureBoxProiettili.Location = New Point(picturecarro.Location)
                    TimerProiettili.Start()
            End Select
        End Sub
    
    2 parte ma questa volta sul timer proiettili:
    Private Sub TimerProiettili_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerProiettili.Tick
            n = n - 30
            PictureBoxProiettili.Top = n
            TimerProiettili.Stop()
            If PictureBoxProiettili.Location = New Point("365;0") Then
                TimerProiettili.Stop()
            End If
        End Sub
    
    Ripeto: Il proiettile si muove verso l'altro quando premo la freccetta "su" ma dopo essere arrivato alla fine della form se provo a spararne un altro lo vedo apparire ma rimane fermo sul carro armatino.
    scusa se ho sbagliato qualcosa ma sono ancora un dilettante.
    Ultima modifica di elisab; 15-04-2012 20:32  Motivo: mancato utilizzo dei tag [code][/code]

  4. #4
    L'avatar di elisab
    elisab non  in linea Topo di biblioteca
    Nel primo spezzone non hai indicato il codice di spostamento comunque

        Dim n As Integer
        Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
            Select Case e.KeyValue
    
                Case Keys.Up
                    PictureBoxProiettili.Location = picturecarro.Location
                    n = picturecarro.Location.Y
                    TimerProiettili.Start()
            End Select
        End Sub
    
        Private Sub TimerProiettili_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerProiettili.Tick
            n = n - 30
            PictureBoxProiettili.Top = n
            'TimerProiettili.Stop()
            If PictureBoxProiettili.Location.Y = 0 Then
                TimerProiettili.Stop()
            End If
        End Sub
    
    Non ho visto dove inizializzi/resetti la variabile n
    Per decidere se arrestare il timer t'interessa solo la Y della location

    Quell'if sbagliata
     If PictureBoxProiettili.Location = New Point("365;0") Then
    
    doveva essere cos
     If PictureBoxProiettili.Location = New Point(365,0) Then
    
    La struttura Point richiede valori integer (non stringhe contenenti numeri, perch quando hai un numero tra virgolette come "365" hai una stringa contenente un numero).


    Il codice deve essere postato all'interno dei tag [CODE][/CODE], che fanno in modo che il codice mantenga l'indentazione rendendolo pi leggibile. Premi il pulsante della barra dell'editor raffigurante il # ed incolla il codice all'interno dei tag. Qui un esempio di uso.


    Ciao
    ℹ️ Leggi di pi su elisab ...

  5. #5
    scorpionato non  in linea Novello
    Grazieeeeeeeeeeeeeee Milleeeee!!
    Ora ho risolto 1 ma l'altro non ancora..
    Ti spiego meglio:
    io ho all inizio della form 4 picture messe in fila indiana che si muovono verso destra e che quando vanno verso la fine della form "sbattono" e scendono di 30 come Y e continuano a fare questo processo
    Io vorrei fare 2 file e quindi se provo a fare lo stesso mi appare sempre una file.....
    Spiego da cani ^^ asp che ti posto tutto il codice che cos forse capisci di pi:

    Public Class Form1
        Dim x, y, z, n, x1, x2, x3, x4, x5, x6, x7, y1, y2, y3, y4, y5, y6, y7 As Integer
        Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
            If e.KeyCode = Keys.Up Then
                TimerProiettili.Start()
            End If
        End Sub
        Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
            Select Case e.KeyValue
                Case Keys.Right
                    picturecarro.Location = New Point(picturecarro.Location.X + 20, picturecarro.Location.Y)
                Case Keys.Left
                    picturecarro.Location = New Point(picturecarro.Location.X - 20, picturecarro.Location.Y)
                Case Keys.Up
                    PictureBoxProiettili.Location = New Point(picturecarro.Location)
                    TimerProiettili.Start()
                    n = picturecarro.Location.Y
            End Select
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            My.Computer.Audio.Play(My.Resources.Space_Invaders_Extreme_wav_Part_2_wav, AudioPlayMode.Background)
            x = 0
            z = 10
            x1 = 50
            x2 = 110
            n = 400
            x3 = 160
            TimerProiettili.Stop
    
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerMovimenti.Tick
            PictureBox1.Left = x
            PictureBox2.Left = x1
            PictureBox3.Left = x2
            PictureBox4.Left = x3
            PictureBox5.Left = x4
            x = x + z
            x1 = x1 + z
            x2 = x2 + z
            x3 = x3 + z
            x4 = x4 + z
            PictureBox1.Top = y
            PictureBox2.Top = y1
            PictureBox3.Top = y2
            PictureBox4.Top = y3
            PictureBox5.Top = y4
            If x = 0 Then
                y = y + 30
                y1 = y1 + 30
                y2 = y2 + 30
                y3 = y3 + 30
                y4 = y4 + 30
                z = 30
            End If
            If x = 600 Then
                y = y + 30
                y1 = y1 + 30
                y2 = y2 + 30
                y3 = y3 + 30
                y4 = y4 + 30
                z = -20
            End If
        End Sub
    
        Private Sub TimerProiettili_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerProiettili.Tick
            n = n - 30
            PictureBoxProiettili.Top = n
            TimerProiettili.Start()
            If PictureBoxProiettili.Location = New Point(365, 0) Then
                TimerProiettili.Stop()
            End If
        End Sub
    End Class
    
    Ultima modifica di TheTruster; 15-04-2012 23:21  Motivo: mancato utilizzo dei tag [CODE][/CODE]

  6. #6
    L'avatar di TheTruster
    TheTruster non  in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Quote Originariamente inviato da elisab Visualizza il messaggio
    Il codice deve essere postato all'interno dei tag [CODE][/CODE], che fanno in modo che il codice mantenga l'indentazione rendendolo pi leggibile. Premi il pulsante della barra dell'editor raffigurante il # ed incolla il codice all'interno dei tag. Qui un esempio di uso.
    scorpionato, come gi segnalato da elisab sei pregato di utilizzare i tag [CODE] quando posti del codice.

    TheTruster
    ℹ️ Leggi di pi su TheTruster ...

  7. #7
    L'avatar di elisab
    elisab non  in linea Topo di biblioteca
        Private Sub TimerProiettili_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerProiettili.Tick
            n = n - 30
            PictureBoxProiettili.Top = n
            TimerProiettili.Start()
            If PictureBoxProiettili.Location = New Point(365, 0) Then
                TimerProiettili.Stop()
            End If
        End Sub
    
    Perch fai partire il TimerProiettili all'interno del Tick del TimerProiettili stesso? non ha senso perch se c' il tick il timerProiettili gi partito.

    If PictureBoxProiettili.Location = New Point(365, 0) Then
    
    Te l'ho gi cercato di spiegare ieri, con quell'if fermi il timer solo se l'angolo superiore sinistro del PictureBoxProiettili passa per il punto (365,0).



    Per la collisione devi considerare i rettangoli come posizione e dimensione ci che restituito dalla propriet Bounds della PicureBox.

    Una volta che hai i due rettangoli devi verificare se si intersecano, puoi usare Metodo Rectangle.IntersectsWith (System.Drawing).
    ℹ️ Leggi di pi su elisab ...

  8. #8
    scorpionato non  in linea Novello
    Scusa ma qui in cosa ho sbagliato per il caso della collesione?
    Per risolvere ho provato questo tentativi:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If PictureBoxproiettili.Location = PictureBox1.Location Then
                PictureBox1.Image = New System.Drawing.Bitmap("C:\Users\Utente\Desktop\space\space\Resources\Morte.gif")
    End If
    
    se mi puoi modificare come prima te nel codice mi fai un favore.

  9. #9
    L'avatar di elisab
    elisab non  in linea Topo di biblioteca
    La location un punto, l'angolo superiore sinistro della picture; la location non considera la superficie del proiettile o dell'astronave. Tra le picture c' collisione anche se i due angoli superiori sinistri non concidono, ad esempio nel momento in cui l'angolo superiore sinistro del proiettile coincide con l'angolo inferiore destro dell'astronave c' gi collisione.

    se mi puoi modificare come prima te nel codice mi fai un favore.
    Il forum ti aiuta a risolvere un problema ma non studia o programma al tuo posto, consulta i due link che ti ho messo, fai le prove e poi se non riesci posta il codice.

    Ciao
    ℹ️ Leggi di pi su elisab ...

  10. #10
    scorpionato non  in linea Novello
    Ok grazie
    Prover a fare da me vedendo i tuoi link.

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Collegare picturebox a combobox in VB2010
    Da IlPupo nel forum Visual Basic .Net
    Risposte: 12
    Ultimo Post: 02-01-2015, 12:44
  2. Risolto: [VB2010] Inserire immagine in PictureBox
    Da Blck&White nel forum Visual Basic .Net
    Risposte: 8
    Ultimo Post: 19-02-2013, 18:55
  3. [VB2010] Sfarfallio durante spostamento Panel
    Da imbranato nel forum Visual Basic .Net
    Risposte: 5
    Ultimo Post: 12-01-2013, 15:57
  4. [VB2010] Aggiungere varie immagini a picturebox
    Da Disactive nel forum Visual Basic .Net
    Risposte: 1
    Ultimo Post: 27-08-2012, 19:34
  5. Risposte: 6
    Ultimo Post: 04-07-2012, 22:21