Werken met Amos deel 100 """"""""""""""""""""""""" Regenbogen """""""""" CHANNEL n TO RAINBOW r """""""""""""""""""""" Deze keuze veroorzaakt een regenboog effekt binnenin je AMAL programma. Standaard is n het nummer van een animatie kanaal van 0 tot 63. r is een identifikatie nummer van je regenboog (0-3). X bevat de huidige BASE (basis) voor je regenboog. Dit is de eerste kleur van je regenboog palet wat getoond wordt. Als je dit verandert gaat de regenboog lopen. Y bevat de lijn van het scherm vanwaar het regenboog effekt zal beginnen. Wijzig je deze waarde, dan gaat het regenboog effekt neer of omhoog. Alle koordinaten worden in hardware vormen gemeten. Register A bewaart de hoogte van je regenboog op het scherm. Een voorbeeld van dat systeem staat in 11. Zie AMOS Basic RAINBOW kommando voor meer bijzonderheden. Vooruitstrevende technieken. """""""""""""""""""""""""""" Het AUTOTEST systeem """""""""""""""""""" Normaal worden alle AMAL programma's in de juiste volorde doorlopen van begin tot eind. Onvermijdelijk gebruiken enkele kommando's zoals Move en For...Next enige seconden. Hoewel dat in de meeste gevallen goed werkt, leidt het soms onverhoopt tot vertragingen tijdens de loop van bepaalde programma's. Neem het volgende simpele voorbeeld: Load "AMOS_DATA:Sprites/octopus.abk: Get Sprite Palette Sprite 8,130,50,1 Amal 8,"Loop : Let R0=XM-X;Let R1=YM-Y;Move R0,R1,50;Jump Loop" Amal On : Direct Als je de muis beweegt, behoort de sprite hem over het scherm te volgen. In de praktijk is de samenwerking soms langzaam, omdat de nieuwe waarden van XM en YM pas ingevoerd worden nadat de muis beweging geheel is uitgevoerd. Probeer de muis in een cirkel te bewegen. De octopus wordt er gek van! Autotest lost dat probleem op door de testen steeds aan het begin van iedere VBL te laten beginnen voordat het verder gaat met het programma. Je tests worden nu regelmatig elke vijftigste seconde uitgevoerd, hetgeen leidt tot een konstante reaktie. Autotest kommando's """""""""""""""""""" De syntax van Autotest is: AUtotest (tests) """""""""""""""" Tests kan elk van de volgende AMAL kommando's bevatten. Let """" L reg=exp Dit is de standaard AMAL Let instruktie. Het voegt het resultaat van een uitdruking toe aan register reg. Jump """"" Jump label Het Jump kommando springt van het ene deel naar het andere deel in de auto test. label wordt bepaald door een dubbele ":" punt en moet binnen de auto test haakjes staan. eXit """" Verlaat autotest en gaat het hoofdprogramma weer in vanaf het punt waar het verlaten werd. Wait """" Wait zet het hoofd AMAL programma geheel uit en voert alleen de autotest uit. If "" Om het test proces binnenin een autotest routine te vergemakkelijken is er een speciale uitgebreidere versie van de AMAL If instruktie. Hiermee kun je een van de drie akties uitvoeren afhankelijk van het resultaat van de logical uitdrukking exp. if exp Jump L (Spring naar een ander deel van de autotest) if exp Direct L (Kiest een deel van het programma wat na een autotest uitgevoerd moet worden) If exp eXit (Verlaat autotest) On "" ON herstart het hoofd programma na een voorgaande Wait instruktie. Dat laat je wachten voor een speciale handeling zoals het drukken op de muis zonder waardevolle processor tijd te verliezen. Direct """""" Direct label """""""""""" Direct wijzigt het punt van waar het hoofd programma na een test hervat wordt. AMAL springt nu automatisch naar dat punt na de eerstvolgende VBL (vertikale blanke periode). Het label moet buiten de Autotest haakjes staan. Binnenin autotest """"""""""""""""" Hier het voorgaande voorbeeld maar dan herschreven met gebruikmaking van de Autotest mogelijkheid. Load"AMOS_DATA:SPrites/octopus.abk" Sprite 8,130,50,1 : Get Sprite Palette A$+"Autotest (If r0<>XM Jump Update" A$=A$+"If R1<>YM Jump Update else exit" A$=A$+"Update:Let R0=RM; LetR1=YM;Direct M)" : Rem Einde van autotest A$=A$+"M: Move R0-X,R1-Y,20 Wait;":Rem Probeer 20 voor verschillende waarden Amal 8,A$ : Amal On De sprite volgt nu gelijkmatig je muis, ongeacht hoe snel je hem beweegt. Het programma gaat als volgt: Elke vijftigste seconde worden de muis koordinaten getest met de XM en YM funkties. Als ze onveranderd zijn sinds de laatste test, gebruikt Autotest het eXit kommando niet. Het hoofd programma neemt nu aan waar het precies gebleven is. Is de muis echter bewogen, dan herstart de autotest routine het hoofdprogramma vanaf het begin (label M) met gebruikmaking van de nieuwe koordinaten in XM en YM.