Werken met Amos deel 136 """""""""""""""""""""""" SAMENPERSEN VAN EEN SCHERM """""""""""""""""""""""""" Hoewel de Amiga hardware in staat is om schitterende plaatjes te laten zien, is het echter tot voor kort onmogelijk geweest om deze effekten in een spel te gebruiken. Het probleem ligt bij het geheugen. Een enkel 320x256 64-kleuren scherm heeft 60k geheugen nodig. Dat beperkt de aantal mogelijkheden te veel om op een onuitgebreide A500 te kunnen werken. Een oplossing gaven wij al met de AMOS Map bepaler (definer). Die kan prima ingezet worden voor achtergrond grafiek in een arcade spel, maar is normaal gesproken niet geschikt voor realistische plaatjes die je in een avonturenspel nodig hebt. Gelukkig is er een eenvoudig alternatief in de vorm van AMOS samenpers instrukties. Die kunnen snel een geheel scherm in slechts een fraktie van de oorspronkelijk grootte samenpersen. Alle standaard modes kunnen ermee bewerkt worden, ook HAM. Er is dus niets meer om je tegen te houden om mooie plaatjes te maken. SPACK (Scherm samenpersing) """"""""""""""""""""""""""" SPACK s TO n [tx,yx,bx,yx] Het SPACK kommando, (uit te spreken als s-pack), pakt een scherm s in de geheugen bank n. Alles wat bij het huidige plaatje hoort wordt meegesaved, inklusief de mode, schermmaat, buitenmaat en de display positie. Hiermee kun je je scherm dus maken in precies zijn originele staat. s is het nummer van het scherm dat je plaatje bevat. n bevat het nummer van de bank van 1-16. Als deze bank nog niet bestaat, wordt die automatisch gereserveerd. Je nieuwe bank wordt automatisch in FAST mem bewaard als die beschikbaar is en meegesaved met je Basic programma. Nadat je deze funktie hebt opgeroepen, kan de maat van je scherm gevonden worden met de LENGTH funktie. Voorbeeld: F$=FSEL$("*","","Load a picture") Load Iff F$,0 Spack 0 To 1 : Rem Perst scherm 0 in een file in bank een samen Print "De lengte van je nieuwe bank is";Length(1);"Bytes" Wait Key Screen Close 0 Unpack 1 To 0 : Rem Herteken het samengesperste scherm Je hoeft natuurlijk niet het hele scherm met deze instruktie samen te persen. De eventuele parameters laten je een willekeurige rechthoek samenpersen. tx,yx bevatten de koordinaten van de linker boven hoek van het schermdeel. bx,yx bepalen de rechter onder hoek. Alle x koordinaten worden afgerond op de dichtstbijzijnde 16-pixel maat. Om de maximum geheugen vermindering te krijgen doet SPACK je plaatje samenpersen via verschillende mogelijkheden. Zo zal je plaatje samengeperst worden via de methode die de minste geheugen gebruikt. Een kant van de zaak is echter dat het ongeveer 6 seconden in beslag neemt om een plaatje samen te persen. Dat is eigenlijk geen nadeel, daar het samenpersen alleen verlangd wordt als je je programma schrijft. Omdat elk plaatje binnen een seconde weer uitgepakt op het scherm kan worden, is er geen enkel risico voor je spel. Is snelheid wel van belang, dan kun je nog het CBLOCK kommando inzetten. Zie het stuk over Background Graphics voor meer bijzonderheden. Soms als je de plaatjes vergelijkt met samengeperste en niet samengeperste, denk je dat het niet veel uit maakt. Het is dan belangrijk te weten dat het saven van plaatjes al eerder met een IFF samenpers routine reeds geperst is. Daarom is het verwonderlijk dat AMOS zelfs hiervan nog 20% af kan halen. Samengeperste schermen zijn prima voor titels en hi-score tabellen die in een arcade spel voorkomen, omdat ze je toestaan om vreemde scherm effekten te laten maken zonder veel geheugen te gebruiken. Ze kunnen ook verwerkt worden in RPG en avonturen spellen. PACK (pers een scherm samen) """"""""""""""""""""""""""" PACKS s TO n[tx,yx,bx,yx] PACK pers scherm s samen in bank n. Anders dan het voorgande SPACK kommando wordt alleen de data van het plaatje samengeperst. Zo moet je scherm dus direkt op het scherm uitgepakt worden. De manier van uitpakken draagt er toe bij dat het scherm wat zal flikkeren, tenzij je double buffering gebruikt. Probeer PACK te vermijden als je geen double buffering toepast. Het is dus verstandiger om in dat geval SPACK op te roepen. Als de eventuele koordinaten worden opgegeven, wordt alleen dat deel samengeperst. tx,yx bepalen de linker boven hoek koordinaten en bx,yx de rechter onder hoek koordinaten. Als tevoren worden alle schermen afgerond om de dichtstbijzijnde 16-pixel omgeving. Omdat PACK geheel uitwisselbaar is met het Autoback systeem, is het eenvoudig om samengeperste schermen te kombineren met bewegende schermen. Als je de Autoback 2 methode gebruikt is het zelfs mogelijk je plaatjes uit te pakken ACHTER bestaande bobs. Het is daarom mogelijk deze instruktie in samenwerking met het SCREEN OFFSET kommando uit te voeren om fantastische scrollende achtergronden te maken voor je spellen.