This is a follow-on from UseParentSpace for Relative Object Positioning and Scaling.
In the same way that child Objects can use the UseParentSpace
property to operate within a Parent's relative position and scale… spawners can benefit from the same functionality.
To help you work through this tutorial, first create a new blank project using the init script.
In general when specifying what object to spawn, the object is given co-ordinates in world space like:
Position = (35, 100, 0.0)
With relative positioning, the object that is spawned will be positioned relative to the Parent Object's Size (The Parent Object is one that has a spawner attached).
That can be confusing. Let's view it as a tree:
It is the Object to Spawn, that will use the UseParentSpace
property.
But before we get there, let's set up a spawner in the usual way using world coordinates.
Start by making a rain cloud that spawns raindrops. Here's a cloud for you to use:
Define a Cloud
object in config:
[Cloud] Spawner = RainSpawner Pivot = center Graphic = @ Texture = cloud.png Position = (0.0, -200.0, -0.1)
Then change the Object
to Cloud
in the create line in the code:
orxObject_CreateFromConfig("Cloud");
This will create a cloud object a little up from the centre of the screen. We haven't provided a spawner yet so it doesn't do anything. So define both the spawner and object to spawn with:
[RainSpawner] Object = RainDrop TotalObject = 0 ActiveObject = 1000 WaveSize = 5 WaveDelay = 0.016 ~ 0.03 ObjectSpeed = (0, 800) Rotation = 22.5 UseRelativeSpeed = true [RainDrop] Graphic = @ Texture = pixel Size = (1,20) ~ (1,40) Alpha = 0.3 ~ 0.8 Color = (255,255,255) Pivot = top AutoScroll = both DepthScale = true LifeTime = 1.0 Smoothing = true Position = (-50.0, 00.0, 0.0) ~ (90.0, 00.0, 0.5)
In the spawner config above, we're making RainSpawner
spawn RainDrop
objects, lots of them, in a fast down direction, but rotating the spawner by 22 degrees (plus using relative speed) to get a nice down-left direction for the rain.
For the RainDrop
objects themselves, we vary their alpha transparency, stretched size and their starting position on screen between X = -50.0 to 90.0.
There is no image for the raindrops, we're just using a stretched pixel. That will do nicely.
The last step is to convert the positioning to be relative to the Cloud's size. This means changing the Position
property of the RainDrop
and setting UseParentSpace
to position:
[RainDrop] Graphic = @ Texture = pixel Scale = (1,20) ~ (1,40) Alpha = 0.3 ~ 0.8 Color = (255,255,255) Pivot = top AutoScroll = both DepthScale = true LifeTime = 1.0 Smoothing = true Rotation = 22.5 Position = (-0.3, 0.0, 0.0) ~ (0.45, 0.0, 0.5) UseParentSpace = position
Because the pivot of the Cloud
is centred, the coordinate range is (-0.5, -0.5) to (0.5, 0.5). I've adjusted the X positions to between -0.3 and 0.45 to bring the positions in a little to work nicer with the cloud itself.
The result should be the same: