ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄ¿ Ù -Ä-[ VGA ohjelmointi ]Ä-- À ¿ -Ä-[ liikkuvat spri ]Ä-- Ú ³ -Ä-[ tet virtuaali ]Ä-- ³ ³ -Ä-[ n„yt”ss„ ]Ä-- ³ ÀÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -Ä- OSA 3 Ä-- Hei j„lleen! VGA ohjelmoinnin oppaan kolmannessa osassa k„sittelemme liikkuvia spritej„ virtuaali n„yt”ss„. ------------------------------------------------------------------------------ -Ä-[ Virtuaali spritet ]Ä-- Kuten varmaan muistatkin, niin viime osassa (osa 2) k„sitteli spritej„ ja virtuaali n„ytt”„. Nyt aion kertoa teille miten spritej„ voi liikuttaa. Spriten liikuttaminen virtuaali n„yt”ss„ on periaatteessa helppoa hommaa, joka k„y n„in: muuta spriten sijaintia ja tyhjenn„ n„ytt”. T„ss„ on er„s esimerkki, joka on jo valmiina k„„nnettyn„: ÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄ Program Sprit; Uses Crt; Type VirSize = Array[1..5*320] Of Byte; { Virtuaali n„yt”n koko } VirPointer = ^VirSize; { Osoittaja } Var X, Y, Z : Integer; { Muuttujat } Lii : Integer; VirScr : VirPointer; Vir : Word; Nappain : Char; Const Spriten_leveys = 16; { Spriten leveys } Spriten_korkeus = 5; { Spriten korkeus } Vir_koko = 5*320; { Virtuaali n„yt”n koko } VGA_osoite = $A000; { VGA n„yt”n osoite } Sprite : Array[1..Spriten_korkeus*Spriten_leveys] Of Byte = (22,23,22,0,22,23,22,0,22,23,22,0,22,23,22,0, 23,20,23,0,20,24,20,0,20,24,20,0,23,20,0,0, 24,23,24,0,0,24,0,0,0,24,0,0,23,22,0,0, 23,20,23,0,0,23,0,0,0,23,0,0,23,20,0,0, 22,0,22,0,0,22,0,0,0,22,0,0,22,24,22,0); Procedure Video(Tila : Byte); Assembler; { N„ytt” proseduuri } Asm MOV AH,00 MOV AL,Tila INT 10H End; Procedure Vertical; Assembler; { Vertical retrace, jota } Asm { tutkitaan seuraavassa } CLI { osassa } MOV DX,3DAH @@Yksi: IN AL,DX AND AL,08H JNZ @@Yksi @@Kaksi: IN AL,DX AND AL,08H JZ @@Kaksi STI End; Begin Video($13); { Asettaa n„yt”n MCGA tilaan } Lii := 5; { Sprite liikkuu 5 pikseli„ } GetMem(VirScr,Vir_koko); { Varaa muistia virtuaali n„yt”lle } Vir := Seg(VirScr^); { Virtuaali n„yt”n segmentti } FillChar(Mem[Vir:0],Vir_koko,0); { Tyhjent„„ virtuaali n„yt”n } Repeat { Aloittaa toiston } Nappain := UpCase(ReadKey); { Nappain := Napinpainallus } Case Nappain Of { Jos painaa nappia, niin } #77 : Begin { -> } For Z := Lii-5 to Lii do Begin { Lii := 5 eteenp„in } For X := 0 to Spriten_leveys-1 do { Spriten leveys } For Y := 0 to Spriten_korkeus-1 do { Spriten korkeus } If (Mem[Vir:X+Z+(320*Y)]) = 0 Then { Jos spriten alla on mustaa } Mem[Vir:X+Z+(320*Y)] := Sprite[Y*Spriten_leveys+X]; { Niin piirr„ sprite } Move(VirScr^,Mem[VGA_osoite:0],Vir_koko); { Muuttaa virtuaali n„yt”n MCGA n„yt”ksi } FillChar(Mem[Vir:0],Vir_koko,0); { Tyhjent„„ virtuaali n„yt”n } Delay(5); { Odottaa 0,0005 sekuntia } Vertical; { Vertical retrace (Osa 4) } End; { For lopetus } Inc(Lii,5); { Liikkuu 5 pikseli„ lis„„ } End; { -> lopetus } #75 : Begin { <- } For Z := Lii+5 Downto Lii do Begin { Lii := 5 taaksep„in } For X := 0 to Spriten_leveys-1 do { Spriten leveys } For Y := 0 to Spriten_korkeus-1 do { Spriten korkeus } If (Mem[Vir:X+Z+(320*Y)]) = 0 Then { Jos spriten alla on mustaa } Mem[Vir:X+Z+(320*Y)] := Sprite[Y*Spriten_leveys+X]; { Niin piirr„ sprite } Move(VirScr^,Mem[VGA_osoite:0],Vir_koko); { Muuttaa virtuaali n„yt”n MCGA n„yt”ksi } FillChar(Mem[Vir:0],Vir_koko,0); { Tyhjent„„ virtuaali n„yt”n } Delay(5); { Odottaa 0,0005 sekuntia } Vertical; { Vertical retrace (Osa 4) } End; { For lopetus } Dec(Lii,5); { Liikkuu 5 pikseli„ taakse } End; { <- lopetus } End; { Case lopetus } Until Port[$60]=1; { Paina ESC n„pp„int„ } FreeMem(VirScr,Vir_koko); { Vapauta virtuaali muisti } Video($3); { Asettaa n„yt”n teksti tilaan } End. { Lopettaa ohjelman } ÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄ Voit liikuttaa yll„olevan ohjelman sprite„ nuolin„pp„imill„. Ohjelmassa on jokaiseen komentoon eri kommentti, joten yrit„ saada selv„„ ja muistia harjoitella armottomasti, niin, ett„ p„„ paisuu. ------------------------------------------------------------------------------ T„ss„ se nyt sitten j„lleen kerran olikin. Seuraavassa osassa k„sittelemme Vertical retracea ja MCGA palettia. Seuraava osa ilmestyy joskus 5.12.1995. - Acrobat (Atte)