Differenze tra le versioni di "Disegnare in una DrawingArea una pseudo-galleria rettangolare tridimensionale in prospettiva con effetto grafico di movimento in avanti"
Da Gambas-it.org - Wikipedia.
Riga 9: | Riga 9: | ||
With Me | With Me | ||
− | |||
.W = Screen.AvailableWidth | .W = Screen.AvailableWidth | ||
.H = Screen.AvailableHeight | .H = Screen.AvailableHeight | ||
Riga 82: | Riga 81: | ||
With Me | With Me | ||
− | |||
.W = Screen.AvailableWidth | .W = Screen.AvailableWidth | ||
.H = Screen.AvailableHeight | .H = Screen.AvailableHeight |
Versione attuale delle 12:36, 23 nov 2024
Disegniamo in una DrawingArea una pseudo-galleria rettangolare tridimensionale in prospettiva con effetto grafico di movimento di chi guarda in avanti, dando altresì l'impressione di percorrere tratti della galleria, ciascuno diversamente colorato rispetto al precedente:
Private DrawingArea1 As DrawingArea Private c As Short = -1 Private clr As Integer Private vch As Integer = Color.Blue Public Sub _new() With Me .W = Screen.AvailableWidth .H = Screen.AvailableHeight .Arrangement = Arrange.Fill End With With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1" .Background = Color.White End With End Public Sub Form_Open() Me.Show Do Inc c Wait 0.2 If Object.IsValid(DrawingArea1) Then DrawingArea1.Refresh Else Break Endif Loop End Public Sub DrawingArea1_Draw() Dim b As Byte ' Definisce il rettangolo per disegnare la iniziale pseudo-galleria in 3D: For b = c + 1 To 20 With Paint .Rectangle((DrawingArea1.W * 0.5) - ((DrawingArea1.W * (b / 20)) / 2), ((DrawingArea1.H * 0.5) - (DrawingArea1.H * (b / 20)) / 2), DrawingArea1.W * (b / 20), DrawingArea1.H * (b / 20)) .LineWidth = 2.5 .Brush = Paint.Color(vch) .Stroke() End With Next ' Definisce il rettangolo per disegnare la nuova pseudo-galleria con un colore diverso: If c == 0 Then clr = Rand(&000099, &FFFF99) For b = 0 To c With Paint .Rectangle((DrawingArea1.W * 0.5) - ((DrawingArea1.W * (b / 20)) / 2), ((DrawingArea1.H * 0.5) - (DrawingArea1.H * (b / 20)) / 2), DrawingArea1.W * (b / 20), DrawingArea1.H * (b / 20)) .LineWidth = 2.5 .Brush = Paint.Color(clr) .Stroke() End With Next If c = 20 Then Paint.End() c = 0 vch = clr clr = Rand(&000099, &FFFF99) Endif End
o anche con i quadrati a distanza proporzionale per un effetto un po' più realistico:
Private DrawingArea1 As DrawingArea Private c As Short = -1 Private clr As Integer Private vch As Integer = Color.Blue Public Sub _new() With Me .W = Screen.AvailableWidth .H = Screen.AvailableHeight .Arrangement = Arrange.Fill End With With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1" .Background = Color.White End With End Public Sub Form_Open() Me.Show Do Inc c Wait 0.1 If Object.IsValid(DrawingArea1) Then DrawingArea1.Refresh Else Break Endif Loop End Public Sub DrawingArea1_Draw() Dim b As Short For b = c + 1 To 24 With Paint .Rectangle((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b), (DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b), ((DrawingArea1.W * 0.5) - ((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b))) * 2, ((DrawingArea1.H * 0.5) - ((DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b))) * 2) .LineWidth = (0.1 * b) + (b / 6) .Brush = Paint.Color(vch) .Stroke() End With Next If c == 0 Then clr = Rand(&000099, &FFFF99) For b = 0 To c With Paint .Rectangle((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b), (DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b), ((DrawingArea1.W * 0.5) - ((DrawingArea1.W * 0.5) - ((b * 0.125) ^ 3) * (b + b))) * 2, ((DrawingArea1.H * 0.5) - ((DrawingArea1.H * 0.5) - ((b * 0.1) ^ 3) * (b + b))) * 2) .LineWidth = (0.1 * b) + (b / 6) .Brush = Paint.Color(clr) .Stroke() End With Next If c = 24 Then Paint.End() c = 0 vch = clr clr = Rand(&000099, &FFFF99) Endif End