Alright,
First of all sorry for my English.
If you use: Every tick/Start layout -> Sprite1: Set X -> (ViewportRight("layer 0")/2)
Or if you use: Every tick/Start Layout -> Sprite1: Set X -> LayoutWidth/2
In theory Sprite1 will be all time centered with the screen, but the first only wokrs while your ratio is bigger, (ex: 16:9, 1:1). If you make the window smaller(width) it wont work well. This is because the Device is modifying the ViewportRight and Viewport Left to 1/3 of the reduced size of the screen. LayoutWidth doesnt change (still being 1920).
-> ViewportLeft/Right/Bottom/Height or whatever only works with "Scale inner" while the aspect ratio is 'positive', and the same but oposite with "Scale outer".
The problem is that while the aspect ratio is bigger (ex: 1920x1080 and the actual width is >1920) there is no problem. The device/PC keep the 1920 width. If you stretch the screen more than 1920, doesn't really change the width (for the device/PC), and resize the screen with the same width.
Hard to explain to me...
BUT if the width is smaller than 1920, then the device change the new width (only with Viewport), and that's why the calculations doesnt work. Because its an exponential resize (1/3).
With Set X -> LayoutWidth/2 there is no problem because doesnt matter the width, but if you do
With Set X -> LayoutWidth/3 the machine goes crazy.
So the answer is:
Use this:
Sprite1 Set X-> ViewportRight("layer 1")-ViewportRight("Layer 1")*0.1
If you want, for example, the Sprite 1 to be at the 10% of the right side all time.
Its really hard to explain, and more for me in English.
I made something for you. An example.
Check it out.
https://mega.nz/file/Zs1D2CII#fAhmu1e-z9x_ti5ys9WUyKr1rsC8YhkCv09rsr_mEVg
You will understand easier.