ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄ¿ Ù -Ä-[ VGA ohjelmointi ]Ä-- À ¿ -Ä-[ virtuaali n„y- ]Ä-- Ú ³ -Ä-[ t”t ja spritet ]Ä-- ³ ÀÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ -Ä- OSA 2 Ä-- Hei taas! T„ss„ se sitten j„lleen tulee. VGA ohjelmoinnin oppaan toisessa osassa otamme esiin virtuaali n„yt”n ja spritet. ------------------------------------------------------------------------------ -Ä-[ Virtuaali n„ytt” ]Ä-- Ajattele esim. peli„, jossa jokin hahmo liikkuu ruudun p„„st„ p„„h„n. Normaalissa MCGA n„ytt” tilassa hahmo v„risee niin pahasti, ett„ sit„ ei v„ltt„m„tt„ edes n„e. Mutta virtuaali n„yt”ss„ sit„ ei tapahdu, koska me emme varsinaisesti n„e sit„, koska n„ytt” talletetaan muistiin. Kun n„ytt” on talletettu, niin sen j„lkeen virtuaali n„ytt” muutetaan MCGA n„yt”lle. Siis ei mit„„n v„lkkymist„ ja kaikkein parasta on se, ett„ virtuaali n„ytt” on yht„ nopea kuin MCGA n„ytt”. Mutta jos emme n„e virtuaali n„ytt”„, niin mit„ hy”ty„ siit„ on? Ei tietenk„„n mit„„n, mutta silloin siit„ on hy”ty„, kun se muutetaan MCGA n„yt”lle, joka tapahtuu komennolla Move[Virtuaali_naytto^,Mem[$A000,0],64000). T„ss„ on tarvittava koodi virtuaali n„yt”n asettamiseen. ÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄ Program Virtuaal; Uses Crt; Type Virtuaali_video = Array[1..64000] Of Byte; { Virtuaali n„ytt”n koko } Virtuaali_osoittaja = ^Virtuaali_video; { Virtuaali n„yt”n osoittaja } Var Virtuaali_naytto : Virtuaali_osoittaja; { Virtuaali n„ytt” } Virtuaali : Word; { Varsinainen virtuaali n„yt. } Procedure Video(Tila : Byte); Assembler; { Meid„n n„ytt” proseduuri } Asm MOV AH,00 MOV AL,Tila INT 10H End; Begin GetMem(Virtuaali_naytto,64000); { Varaa muistia virtuaali n„yt”lle } Virtuaali := Seg(Virtuaali_naytto^); { Virtuaali n„yt”n segmentti } FillChar(Mem[Virtuaali:0],64000,0); { Tyhjent„„ virtuaali n„yt”n } Video($13); { Asettaa n„yt”n MCGA tilaan } Mem[Virtuaali:0]:=1; { Piirt„„ sinisen pikselin } Move(Virtuaali_naytto^,Mem[$A000:0],64000); { Muuttaa virtuaali n„yt”n MCGA n„yt”ksi } Delay(5000); { Odottaa 5 sekuntia } Video($3); { Asettaa n„yt”n teksti tilaan } FreeMem(Virtuaali_naytto,64000); { Vapauttaa virtuaali muistin } End. ÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄ ------------------------------------------------------------------------------ -Ä-[ Spritet ]Ä-- L„hes jokaisessa graafisessa peliss„ kaytet„„n spritej„. Spritet ovat yksinkertaisesti liikkuvia kohteita. Niit„ on aika helppo tehd„. Leveys Korkeus \ ³ \ ³ Const Sprite : Array[1..10*10] Of Byte = (0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, ÄÄ Kuva 1,1,1,0,0,0,0,0,0,0, 1,0,1,0,0,0,0,0,0,0, 1,1,1,0,0,0,0,0,0,0, 1,0,1,0,0,0,0,0,0,0); Yll„olevassa esimerkiss„ on tehty juuri sprite. N„in saat spriten n„kyviin ruutuun. ÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄ Program Sprit; Uses Crt; Procedure Video(Tila : Byte); Assembler; { Meid„n n„ytt” proseduuri } Asm MOV AH,00 MOV AL,Tila INT 10H End; Var X, Y : Integer; Const Sprite : Array[1..10*10] Of Byte = { Meid„n oma sprite } (0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 1,1,1,0,0,0,0,0,0,0, 1,0,1,0,0,0,0,0,0,0, 1,1,1,0,0,0,0,0,0,0, 1,0,1,0,0,0,0,0,0,0); Begin Video($13); { Asettaa n„yt”n MCGA tilaan } For X := 1 to 10 do { Leveys } For Y := 0 to 9 do { Korkeus } Mem[$A000:Y*320+X] := Sprite[Y*10+X]; { Piirt„„ spriten } Delay(5000); { Odottaa 5 sekuntia } Video($3); { Asettaa n„yt”n teksti tilaan } End. { Lopettaa ohjelman } ÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄÄÄÄÄÄPOIKKI!ÄÄÄÄÄÄÄ ------------------------------------------------------------------------------ T„ss„ se nyt sitten j„lleen olikin. Seuraavassa osassa k„sittelemme Liikkuvia spritej„ virtuaali n„yt”ss„. Seuraava osa ilmestyy joskus 30.11.1995. - Acrobat (Atte)