Noeska's

Div Games Studio Page

Cursussen

Cursus scrolling #1

Inleiding
Scrolling is het bewegen van het gehele (of deel van het) scherm in een bepaalde richting. Hierbij kun je 2 soorten onderscheiden 'normale' scrolling en 'paralax' scrolling. Bij 'paralax' scrolling worden 2 (of meer) delen van het scherm op verschillende snelheden bewogen zodat er een soort diepte effect onstaat. Kijk bijvoorbeeld maar eens uit het zijraam van de bus, je zult zien dat dingen die dichtbij sneller voorbij komen dan dingen die verweg staan. Beide manieren van scrolling worden door div ondersteund.

De handleiding
Het onderdeel scrolling wordt in de DIV handleiding slecht behandeld. Alleen de GLOBAL struct scroll wordt uitgelegd. Dit ook nog eens op een zeer verwarrende manier. Met deze cursus moet het duidelijk worden hoe je scrolling kunt gebruiken binnen DIV.

De basis
Om scrolling in je DIV programma's te gebruiken moeten de volgende commando's en structuren gebruikt worden:

  • Start_Scroll
  • Stop_Scroll
  • Define_Region
  • Move_Scroll
  • Refresh_Scroll
  • struct Scroll

Deze onderdelen moeten op de juiste manier met elkaar gebruikt worden om tot 1 of meer scroll-vensters te komen in je programma.

Start_Scroll
Om een scrolling te gaan gebruiken in je programma zal dat eerst via dit commando moeten worden gestart. Daarbij moeten een aantal parameters opgegeven worden. Deze zorgen ervoor dat je de scroll aan je eigen wensen kunt aanpassen.

Start_Scroll(scrollnummer, fpg bestand, plaatje voor voorgrond, plaatje voor achtergrond, waar op scherm, behandeling plaatje);

scrollnummer: Geeft aan welke van de maximaal 10 scrolls je wilt gebruiken. De telling gaat hierbij van 0 tot 9. Als je maar 1 scroll gebruikt geef je dit aan met 0.

fpg bestand: nummer van het fpg bestand waar de scroll de plaatjes voor de voor- en eventueel achtergrond weg moet halen. Dit nummer kun je gemakkelijk achterhalen door voor de load_fpg een variabele te plaatsen met een = teken, bijvoorbeeld nr_scroll_fpg = load_fpg('scroll.fpg')

plaatje voor voorgrond: het nummer van de afbeelding uit het fpg bestand dat je voor de voorgrond wilt gebruiken.

plaatje voor achtergrond: het nummer van de afbeelding uit het fpg bestand dat je voor de achtergrond wilt gebruiken. Je krijgt dan dus een 'paralax' scrolling. Je kunt hier ook een 0 gebruiken om een 'normale' scrolling te krijgen. Je hebt dan dus geen achtergrond.

waar op het scherm: Als je hier een 0 ingeeft wordt het gehele scherm gebruikt voor de scroll. Als je een kleiner gedeelte van het scherm wilt gebruiken voor de scroll moet je hier het nummer van de regio aangeven wat je wilt gebruiken. Dit wil je meestal doen als je meerdere scrolls tegelijk zichtbaar wilt hebben, zoald bijvoorbeeld bij het spel helioball. Hoe je een regio aangeeft wordt straks uitgelegd bij het commando define_region.

behandeling plaatje: Dit is een vrij lastige variable. Je kunt hiermee aangeven of een afbeelding zichzelf moet herhalen in bepaalde richtingen. Dit kun je aangeven met de volgende waarden:  

  1. De voorgrond afbeelding moet in de x richting herhaald worden
  2. De voorgrond afbeelding moet in y righting herhaald worden
  3. De achtergrond afbeelding moet in de x richting herhaald worden
  4. De achtergrond afbeelding moet in de y richting herhaald worden

Deze waarden kun je optellen om ze allemaal te laten gelden. Om dus een de voorgrond afbeelding zich alleen in de x richting te laten herhalen en de achtergrond afbeelding in de x en y richting moeten de volgende getallen worden opgeteld 1 + 4 + 8 = 13. De waarde van behandeling plaatje wordt dan dus 13. Met deze instelling kun je het volgende beeld krijgen:

Stop_Scroll
Hiermee stop je de scroll. Stoppen wil niet zeggen dat je de scroll even pauzeert maar dat je hem totaal verwijdert. Er is pas weer een niewe scroll als je die aangeeft met het start_scroll commando.

Stop_Scroll(scroll_nummer);

scrollnummer: Het aangeven van scrollnummer is verplicht. Meestal zal dit de waarde 0 hebben aangezien je meestal maar een scroll gebruikt. Als je meerdere scroll's gebruikt zul je dit commando voor iedere scroll moeten aanroepen om ze te stoppen en dus te vernietigen.

Define_Region
Bij het start_scroll commando is het mogelijk om een regio nummer op te geven. Met dit commando kun je die regio aangeven.

Define_Region(regio nummer, x, y, breedte, hoogte);

regio nummer: Dit is het nummer dat je ook gebruikt in het commando start_scroll. Denk er wel om dat je iedere regio een eigen nummer geeft!

x, y: Geven aan waar de bovenste hoek van de regio zich bevind.

breedte, hoogte: Geven aan hoe breed en hoe hoog de regio moet zijn.

Move_Scroll
Dit commando is nodig als je scroll uitzichzelf wilt laten bewegen, dus zonder input van de speler.

Move_Scroll(scrollnummer);

scrollnummer : zie scrollnummer bij het commando stop_scroll.

Refresh_Scroll
Als je op de voor- of achtergrond afbeelding gaat veranderen als het programma loopt zal dat niet meteen zichtbaar worden in de scroll. Dit commando zorgt ervoor dat dit gebeurt. Iedere keer als je dus iets aan de afbeelding veranderd zul dit commando moeten aanroepen.

Refresh_Scroll(scrollnummer);

scrollnummer : zie scrollnummer bij het commando stop_scroll.

Struct Scroll
Met de struct scroll kun je aangeven hoe de scroll zich op een bepaald moment moet gedragen. Dit doe je door de waarden ervan te veranderen. Iedere scroll heeft zijn eigen scroll struct. De scroll struct heeft de volgende onderdelen:

x0, y0: Geeft aan waar het voorgrondplaatje binnen de scroll is. Hiermee stuur je als het ware de scroll aan.

x1, y1: Geeft aan waar het achtergrondplaatje binnen de scroll is. Hiermee stuur je als het ware de scroll aan.

z: Geeft of de scroll over of onder andere afbeeldingen op het scherm getoond moeten worden. Standaard is deze waarde 512. Die van ander afbeeldingen is normaal 0. Dit betekent dat de scroll altijd achter de andere afbeeldingen ligt.

camera: Het nummer van het process dat de scroll moet aansturen. Dit proces moet aan een voorwaarde voldoen. Het moet als eerste (na begin) de volgende regel hebben: ctype=c_scroll; Als je voor camere een 0 als waarde opgeeft zal er geen proces zijn dat de scroll stuurt en zal de scroll dus niet gaan bewegen op commando van de speler. Je moet dan het move_scroll commando gebruiken om de scroll te laten bewegen.

De rest van de variabelen gelden alleen als een variabele wordt aangestuurd vanuit een process.

ratio: Geeft aan hoe de snelheid van het achtergrond plaatje is ten opzichte van het voorgrond plaatje als de waarde bijvoorbeeld 200 is gaat de achtergond de helft langzamer als de voorgrond. Bij 100 is de snelheid gelijk en bij 50 beweegt de achtergrond 2 keer zo snel als de voorgrond.

speed: Geeft aan hoeveel pixels de scroll mag bewegen voordat er weer een frame is. Als de waarde 0 is er geen beperking opgelegd. Als je bijvoorbeeld de scroll maximaal 2 pixels per frame wilt laten bewegen moet je hier de waarde 2 opgeven. NB het kan dan voorkomen dat de speler (camera) buiten het gezichtsveld van de scroll verdwijnt.

region1: Door hier het nummer van een regio op te geven geef je aan dat binnen dit gebied niet gescrollt wordt als de speler (camera) daar is.

region2: Door hier een nummer van een regio op te geven geef je aan dat als de speler (camera) in dit gebied komt de snelheidslimiet zoals die bij speed is opgegeven, genegeerd moet worden. Op deze manier blijft de speler (camera) altijd in beeld.

Veld b is hier region 1 en veld a is hier regio 2. Als de speler in regio B zit kan de speler heen en weer lopen zonder dat het scherm gaat scrollen. Als de speler echter hierbuiten komt zal het scherm gaan scrollen. Als de speler in een gebied met de letter A komt zal de snelheidslimiet worden genegeerd. Alleen in de zwarte gebieden zal deze gelden. NB ook in regio B wordt de snelheid genegeerd ondanks dat hier niet gescrollt wordt.

De praktijk
Momenteel heb ik nog geen voorbeeldprogramma's. Je kunt wel kijken naar de voorbeeldprogramma's die zijn meegeleverd in de div help. Als je wilt dat ik voorbeeldprogramma's ga publiceren, ga dan naar het onderdeel feedback van deze site en geef dat daar aan. Daar kun je ook aangeven als iets niet duidelijk is op deze pagina.