====== Part 8 – Platforms and Texture Repeating ======
Our playfield will contain a number of platforms. What have we got in the current tutorial asset folders over in the Orx project that would do for a platform?
{{ :guides:beginners:box.png?nolink&60 |}}
''box.png'' from ''orx/tutorial/data/object''. That'll do nicely. Copy this file into our ''data/texture'' folder.
We'll eventually repeat this object in a line to produce a platform.
Start off with a single platform object:
[PlatformGraphic]
Texture = box.png
[PlatformObject]
Graphic = PlatformGraphic
Position = (-380, 170, 0)
Scale = 2
And create it inside the Init() function with:
orxObject_CreateFromConfig("HeroObject");
orxObject_CreateFromConfig("PlatformObject");
Compile and run. You'll get this:
{{:guides:beginners:beginners-21-box-object.png?nolink|}}
Great. Next, the platform needs to be stretched out so that it acts like a platform and not just a simple box. You can do this by changing the ''Scale'' property:
[PlatformObject]
Graphic = PlatformGraphic
Position = (-380, 170, 0)
Scale = (40, 2, 0)
So scale 40x along the X axis and 2x along the Y axis.
Run and you'll get:
{{:guides:beginners:beginners-22-box-scale.png?nolink|}}
That's not quite what was expected. The object was scaled and the texture was scaled along with it.
We also need the Repeat property, so that the texture will repeat within the object:
[PlatformObject]
Graphic = PlatformGraphic
Position = (-380, 170, 0)
Scale = (40, 2, 0)
Repeat = (20, 1, 0)
Run it and you'll see:
{{:guides:beginners:beginners-23-repeat-box-platform.png?nolink|}}
Great, that looks much nicer.
The Y value is 1, so that the texture is not repeated vertically, and X is 20 so that the texture repeats itself 20 times horizontally across the object.
Let's move the platform to the bottom of the screen and extend it to the whole screen width:
[PlatformObject]
Graphic = PlatformGraphic
Position = (-400, 270, 0)
Scale = (54, 2, 0)
Repeat = (27, 1, 0)
We can use this as a template to create many platforms. But rather than create a few platforms in code, it would be much easier to create a single empty parent object with a few child objects under it.
Start by re-using the Scene object as a parent to contain all the platform objects (and later other objects too):
[Scene]
ChildList = PlatformObject # MiddlePlatformObject # TopLeftPlatformObject #TopPlatformObject #TopRightPlatformObject
Anything added to a ''ChildList'' will become a child under the object, and will move with the parent. Its co-ordinates will be local under the parent.
Notice that the ''PlatformObject'' is the only thing in the list that exists so far. Let's create others based on the settings of ''PlatformObject'':
[MiddlePlatformObject@PlatformObject]
Position = (-150, 150, 0)
Scale = (30, 2, 0)
Repeat = (15, 1, 0)
[TopLeftPlatformObject@PlatformObject]
Position = (-400, 20, 0)
Scale = (14, 2, 0)
Repeat = (7, 1, 0)
[TopPlatformObject@TopLeftPlatformObject]
Position = (-100, -100, 0)
[TopRightPlatformObject@TopLeftPlatformObject]
Position = (200, -210, 0)
A quick explanation of the above syntax: ''MiddlePlatformObject'' and ''TopLeftPlatformObject'' inherit all four properties from ''PlatformObject'' and overrides three of them. ''TopPlatformObject'' and ''TopRightPlatformObject'' inherit properties from ''TopLeftPlatformObject'', and the fourth property indirectly from ''PlatformObject''.
This is really to save on configuration, to be extensible, and to make things easier to change rather than copy and pasting the same details over and over.
Next change the code in the Init() function to create "Scene" instead of "PlatformObject":
orxObject_CreateFromConfig("HeroObject");
orxObject_CreateFromConfig("Scene");
Now every child under the Scene section will be created for us.
Compile and run. You should have a screen full of platforms:
{{:guides:beginners:beginners-24-platforms.png?nolink|}}
Excellent!
----
Next, [[en:guides:beginners:physics|Part 9 - Physics]].
{{section>en:guides:beginners:toc&noheader&nofooter&noeditbutton}}