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 2: | Riga 2: | ||
Private DrawingArea1 As DrawingArea | Private DrawingArea1 As DrawingArea | ||
Private c As Short = -1 | Private c As Short = -1 | ||
− | Private clr As Integer | + | Private clr As Integer |
Private vch As Integer = Color.Blue | Private vch As Integer = Color.Blue | ||
Riga 27: | Riga 27: | ||
Do | Do | ||
Inc c | Inc c | ||
− | Wait 0. | + | Wait 0.2 |
If Object.IsValid(DrawingArea1) Then | If Object.IsValid(DrawingArea1) Then | ||
DrawingArea1.Refresh | DrawingArea1.Refresh |
Versione delle 16:59, 9 mag 2023
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 .Center .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 .Center .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