04/06/10 16:14
walker93
sto facendo un programma che simula il moto di un proiettile...
tutto ok, funziona tutto bene tranne la distanza raggiunta dal proiettile
il proiettile è un immagine in una picture box
quindi finche il proiettile non esce dal bordo della finestra la distanza è uguale alla posizione finale meno quella iniziale.
il problema c'è quando supera il bordo (in questo caso torna al bordo di partenza) solo che non so come calcolare la distanza in questo modo...
ho provato alcune formule senza successo...
allego un immagine col problema
Ultima modifica effettuata da walker93 04/06/10 16:16
aaa
04/06/10 16:21
Il Totem
Semplicemente, sposti l'origine del rendering in avanti. Dovrai anche evidenziare il nuovo punto iniziale.
Se lo spostamento compiuto (e non la posizione del proiettile) è maggiore della larghezza della picturebox, puoi allargarla (PictureBox.Size) o zoomare l'immagine (PictureBox.SizeMode).
aaa
04/06/10 17:02
walker93
l'applicazione già la mostro a schermo intero
la picture box di fondo è uniforme ,stesso colore non c'è un immagine solo lo sfondo colorato d'azzurro per il cielo
come faccio a capire che è zoomato???
aaa
05/06/10 0:21
paoloricciuti
Non ne capisco di VB però giusto una cosa: se il tuo problema è sapere la distanza percorsa dal proiettile le due formule da te usate funzionano. Infatti per passare da 900 a 100 percorre 200 passi (da 900 a 1000 e da 0 a 100) se invece il tuo problema è sapere dove atterra c'è un problema di fondo, visto che utilizzi la variabile fine che è+ effettivamente dove atterra il proiettile.
aaa
05/06/10 12:51
walker93
il problema è che se sparo a 45° gradi percorro ad esempio 160 px se sparo a 135° cioè stessa inclinazione ma all'indietro mi calcola una distanza differente sebbene non cambi la forza dello sparo
aaa
06/06/10 14:02
Il Totem
Io credevo che il problema fosse semplicemente disegnare opportunamente i risultati, ma se le formule che hai usato danno risultati che contrastano con le tue ipotesi, allora il problema, come diceva paoloricciuti, è di fondo. Perciò sarebbe meglio se postassi il codice, in modo che possiamo vedere cosa non va.
P.S.: non calcoli anche la velocità del vento, vero? Altrimenti potrebbe dipendere da quello...
aaa
06/06/10 15:27
walker93
ecco ho messo le parti che ritengo rilevanti
'dentro al timer interval=10
i += 0.15
If i = 0.15 Then
start = proiettile.Left + proiettile.Width
End If
proiettile.Left = proiettile.Left + velx * i
'se supera il bordo destro(dist è la distanza)
If proiettile.Left + proiettile.Width > sfondo.Width Then
Threading.Thread.Sleep(200)
dist += sfondo.Width - (proiettile.Left + proiettile.Width)
proiettile.Left = 0
'start = proiettile.Width
indietro = False
Threading.Thread.Sleep(200)
ElseIf proiettile.Left < 0 Then 'altrimenti se supera quello sinistro
Threading.Thread.Sleep(200)
dist += -start 'proiettile.Left
proiettile.Left = sfondo.Width - proiettile.Width
'start = sfondo.Width + proiettile.Width
Threading.Thread.Sleep(200)
indietro = True
End If
If proiettile.Top + proiettile.Height >= sfondo.Top Then
'se va sotto terra lo fermo
i = 0
Timer1.Enabled = False
proiettile.Top = sfondo.Top - proiettile.Height
If start < proiettile.Left Then
dist += (proiettile.Left - start)
'vecchi tentativi:
'-sfondo.Width - proiettile.Left + proiettile.Width
'-((proiettile.Left - start) + mom)
Else
dist += (start - proiettile.Left)
'-proiettile.Left + proiettile.Width - start
End If
dimax.Text = dist \ 10
mom = 0
dist = 0
End If
no niente vento...
Ultima modifica effettuata da walker93 06/06/10 15:30
aaa