Eli tätä kysymystä on kysytty varmaan tuhansia
kertoja ennenkin , mutta kukaan ei koskaan esim.
täälläkään foorumissa ole vastausta keksinyt.
Kysymys kuuluu:
Miten windows -pohjaisissa ohjelmointi
työkaluissa ,esimerrkenä (Delphi, VB) saisi
animaatioden vipatuksen eli väpätyksen
vahennettyä ?
Eli animaation tehtyä, kuva välkkyy silleen ,
että katsominen ärsyttää...
kertoja ennenkin , mutta kukaan ei koskaan esim.
täälläkään foorumissa ole vastausta keksinyt.
Kysymys kuuluu:
Miten windows -pohjaisissa ohjelmointi
työkaluissa ,esimerrkenä (Delphi, VB) saisi
animaatioden vipatuksen eli väpätyksen
vahennettyä ?
Eli animaation tehtyä, kuva välkkyy silleen ,
että katsominen ärsyttää...
Vastaukset 7
Vanhimmat
En ole paljoa VB:llä grafiikkaa pyöritelly mutta
sen verta tiedän että kun käytin Direct Draw:ta
niin ei näkyny kyllä minkään laista vilkkumista.
Tämä ei ehkä vastaa kysymykseesi mutta
toivottavasti siitä on jotain apua.
ps. ehkä kannattaa kertoa HIEMAN tarkemmin
miten/minkälaista grafiikkaa pyörittelet niin
osais kertoa paremmin
En pyörittele mitää 3D-grafiikkaa, ihan normaalia.
Eli mikä se "direct draw" on ?
Kerro siitä voisi olla hyötyä..???
Vähän riippuu mistä on kyse. Monet lataavat
kuvatiedoston levyltä uudestaan ja uudestaan,
viaheessa jossa kuva pitää esittää.
VB:ssa tuo voidaan eliminoida esim. sijoittamalla
kuvat ImageList-ohjaimeen (Project/Components,
[X] Microsoft Windows Common Controls 6.0
kuvien sijoittaminen [klikkaa oikealla, Images-
välilehti, Insert Picture-painike]).
Kolmas kuva asetetaan esim:
k = 3
Picture1.Picture = ImageList1.ListImages
(k).Picture
Vika voi olla muuallakin - viestistäsi ei saa
selvää, mitä olet tehnyt tai jättänyt tekemättä.
En saanut viestistäsi selvää, mutta yleensäkkin on
ohjelmointi ympäristö ollut mikä hyvänsä, 2D, tai
3D -grafiikka, niin jos ruudulle tulostetaan
paljon liikkuvaa kuvaa niin pitää käyttää tupla
bufferointia, netistä löytyy varmaan paljon tietoa
asiasta. On kyllä muistaakseni olemassa vielä
jotain muitakin tekniikoita, mutta en ole varma.
Eli bufferointi...
- Mitä mahtaa olla ?
No asiahan on minulle selvää , että kun teen
vaikka kahden kuvan animaation VB:llä tai
vaikkapa delphillä, niin kuva alkaa tasaisesti
pyörimään ja välillä aina "välähtää"...
- ja välähtäminenhän aiheuttaa ohjelman
hidastumisen..
En osaa oikein selittää , mutta kyllä kaikki
jotka ovat koodanneet VB:llä ja Delphillä tai
jollain muulla , välkkymisen tietävät...
Välkkyminen johtuu siitä että windows piirtää
ikunan yhtaikaa kun yrität piirtää animaatiota.
Kun windows lähettää WM_ERASEBACKGROUND viestin
ikkunalle, laita tulokseksi 0 niin windows ei
piirrä ikkunaa. Delphissä sen voi tehdä
lisäämällä rivin:
"procedure WM_ERASEBACKGROUND(var Msg:
TWMEraseBkgnd); message WM_ERASEBKGND;"
Formin private osioon. proceduuri olisi tällainen:
procedure TForm1.WM_ERASEBACKGROUND(var Msg:
TWMEraseBkgnd);
begin
Msg.Result := 0;
end;
Voit myös käyttää esim tätä koodia animaation
tekoon:
var
Kuvat: array [1..3] of TBitmap;
Kuva: Integer;
I: Integer;
begin
//Luo bittikartat
for I := 1 to 3 do
Kuvat[I] := Tbitmap.Create;
//lataa kuvat ohjelman resurssista
Kuvat[1].LoadFromResourceName
(HInstance,'KUVA1.BMP');
Kuvat[2].LoadFromResourceName
(HInstance,'KUVA2.BMP');
Kuvat[3].LoadFromResourceName
(HInstance,'KUVA3.BMP');
//animointi
Kuva := 1;
repeat
//piirtää kuvan
Form1.Canvas.Draw(10,10,Kuvat[Kuva]);
//siirtyy seuraavaan kuvaan
Inc(Kuva);
if Kuva > 3 then Kuva := 1;
//käsittelee viestit
Application.ProcessMessages;
//odottaa 100 millisekunttia
//ennen kuin piirtää seuraavan kuvan
Sleep(100);
//kunnes ohjelma on suljettu
until Application.Terminated;
end;
Pitää kokeilla...
Toivottavasti jotain hyötyä !