Kirjoittaja: ez
Kirjoitettu: 26.12.2003 – 26.12.2003
Tagit: koodi näytille, vinkki
Varmaan hyvin monella meistä on VB-ohjelma, jossa on grafiikkaa joka on välkkynyt ikävästi. VB.NET:in myötä basicillä on helppoa toteuttaa kaksoispuskurointi joka poistaa ohjelmista välkkymisen.
Idea perustuu siihen, että kaikki piirretään ensiksi puskuriin ja kun kaikki on piirretty siirretään valmis kuva näkyville.
Yritin tehdä koodista mahdollisimman yksinkertaisen, jotta perusidea olisi helppoa hoksata!
Imports System.Drawing.Imaging
Private g As Graphics
Private puskuri As Graphics
Private puskurinKuva As New Bitmap(400, 300, PixelFormat.Format32bppRgb)
Private alkuAika As Int32 'Tähän talletetaan aika silmukan alussa
Private pallonX As Short = 200
Private nopeusX As Double = 5
Private pensseli As System.Drawing.SolidBrush 'Tällä piirretään pallo
Private säde As Short = 30 'Pallon säde
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Formin koko
Me.Width = 400
Me.Height = 300
'Luodaan grafiikat
g = Me.CreateGraphics
'Luodaan puskuri
puskuri = Graphics.FromImage(puskurinKuva)
'Luodaan pensseli ja asetetaan väriksi punainen
pensseli = New System.Drawing.SolidBrush(Color.Red)
'Formi näkyviin
Me.Show()
'Ikuinen silmukka
Do While 1 = 1
'Asetetaan alkuaika viivettä varten
alkuAika = System.Environment.TickCount()
'Päivitetään pallon paikkaa
pallonX += nopeusX
'Jos pallo on saavuttamassa reunan muutetaan suunta
If pallonX < 50 Or pallonX > 320 Then nopeusX = -nopeusX
'Pyyhitään puskurin kuva
puskuri.Clear(Color.Black)
'Piirretään pallo puskuriin
puskuri.FillEllipse(pensseli, pallonX, 140, säde, säde)
'Sitten piirretään puskurin kuva formille. Nyt voimme olla
'varmoja, että piirrämme valmiin kuvan, joten välkkymistä ei ole havaittavissa.
g.DrawImage(puskurinKuva, 0, 0)
'Aiheutetaan viive
Do While System.Environment.TickCount() - alkuAika < 30
Application.DoEvents()
Loop
Loop
End Submiten tätä vb.nettii käytetään niinku pitääks se laittaa internettisivulle koko koodi vai miten?
Ihan samalla tavalla kuin VB6:ssa. Kyseinen koodi ei liity mitenkään internettiin... Niin, ku näet niin toi on aliohjelma suoritetaan kun formi latautuu.
ei helvetti... internettisivulle, lol!!1
tuota, tuohan käy melko helposti niinkin, että asettaa formin asetuksista(designeristä) doublebuffer:in trueksi...