Pagina 13 van 13
Een room met een weergave ('view')
Tot nu toe hebben we de speler voor de gek gehouden in de zin van dat we niet echt door een spelwereld vlogen maar dat de achtergrond gewoon meescrolde. Dit heeft een aantal nadelen. Met name, de achtergrond kan niet gemakkelijk veranderen (het is namelijk lastig om half over land te vliegen. Ook, zelfs terwijl je timelines kan gebruiken, is het moeilijker om verschillende acties mooi over de tijd te verdelen.

In dit laatste deel zullen we kort verschillende manieren aangeven om een scrolling shooter te maken. In deze aan pak is er één grote room waardoor het vliegtuig echt beweegt. We gebruiken een zogenaamde view zodat de speler slechts een deel van de room tegelijkertijd ziet. Om dit te maken zijn een aantal wijzigingen aan het spel veranderd. We zullen deze kort bespreken.

We maken eerst de basis van de room. We geven de room een breedte van 640 zoals voorheen maar we geven het nu een hoogte van 4800. De achtergrond geven we niet langer een snelheid. We zetten eilandes op verschillende plaatsen in de room. De eilandobjecten hebben niet langer een snelheid nodig en we kunnen ook het step-event verwijderen.

Het zijn nu volledig statische objecten. Het vliegtuig plaatsen we aan de onderkant van de room en we geven het vliegtuig, in het create event, een verticale snelheid van -2 zodat het al met enige snelheid vliegt terwijl de speler niks doet. Tot slot definiëren we de view (dus de weergave). Om dit te doen, klik op de Views tab in het room venster. Vink aan dat we rooms gaan gebruiken door 'enable the use of views' aan te vinken.

Stel eerste de eerste view in, en maak het zichtbaar vanaf het begin. Bovenaan is y-positie 4320, de view zal dus starten aan de onderkant van de room. Het ziet er dan als volgt uit:

We moeten er zeker van zijn dat de view met een constante snelheid beweegt. Hiervoor zullen we het step event van het levens-controllerobject (mis)bruiken. Hierin voegen we een actie toe om een variabele in te stellen, en stellen de variabele view_yview relatief (relative) op -2. Variabele view_yview geeft de bovenste positie aan van de eerste view in de room. (Als er meerdere views zijn zou je eigenlijk view_yview[0] moeten gebruiken.)

Dus in elke step wordt de positie van de view met 2 pixels naar boven gezet om het scrollen te simuleren. Er zijn veel andere variabelen die met views te maken hebben, maar die hebben we hier niet nodig. We moeten ook controleren of view_yview groter is dan 0. Als het 0 wordt is de bovenkant van de room bereikt en moet de game stoppen.

Note that, for the main plane we wanted to avoid that the player can move the plane out of view. To this end we checked whether the position of the plane was not too high up or too high down. We now have to use the variable view_yview in these comparisons to make sure that the plane stays within view.

We have a similar problem with the position of the information panel, and the health bar, etc. We did place them at the bottom of the room, but now we must draw them at the correct place relative to view_yview to make sure they stay in sight.

For the bullet that the plane shoots we must increase the speed a bit to compensate for the moving view. Also we should destroy it when it moves out of the view.

It remains to handle the enemy planes. We no longer use a time line or controller object. We will place all enemy planes already in the room, but we will not let them move until they become visible. So we do not set their initial speed and in the step event we first check whether they are in the view. If so we let them move. Also, we will only let them shoot if they are in the view. For example for the third enemy plane the step event looks as follows:

Note that we should use a smaller vertical speed than before. Both for the enemy planes and for the bullets we should also change the conditions when they must be destroyed.

The most complicated one is enemy plane 4. It must come from behind. The trick is as follows. We again place it in the room from the start but we make it invisible. Also, as long as it is invisible we do not let it react to collisions with bullets or the main plane. When it lies below the view we make it visible and let it move (with larger speed). See the example game on how this is achieved.

Now it is time to build the room. We place sets of different enemy planes at strategic places in the level. Again it is easy now to create formations and nice challenges.

As you can see, using views you can create very interesting scrolling shooters with relatively little work. Clearly the game need a lot more work. It is in some sense still too easy to finish and it is definitely too short. Also, some nice boss at the end would be great. Just use it as a first step and build from there.