I am baffled here, I have two snippets of code attached which you can run to reproduce the issue. The only difference between them is line #1 which for all intents and purposes should produce the exact same result, but they don't..
SetDisplayAspect(1080/1920)
SetSyncRate(60,0)
background = CreateSprite(0)
SetSpriteSize(background, 100, 100)
SetSpriteColor(background, 25, 25, 25, 255)
sprite = CreateSprite(0) // MAKE A SPRITE
SetSpriteSize(sprite, 3, 40) // MAKE THE SPRITE A RECTANGLE SHAPE
SetSpriteColor(sprite, 0, 0, 200, 255)
SetSpritePositionByOffset(sprite, 50, 50) // PLACE THE SPRITE MIDDLE OF THE SCREEN
particles = CreateParticles(0,0) // MAKE PARTICLE EMITTER
SetParticlesLife(particles, 0.5) // SET PARTICLES LIFE TO 0.5 SECONDS
SetParticlesFrequency(particles, 20) // SET PARTICLES FREQUENCY TO 20 PER SECOND
SetParticlesSize(particles, 2) // SET PARTICLES SIZE TO 2% OF SCREEN SIZE
SetParticlesAngle(particles, 0) // KEEP THE PARTICLES IN A STAIGHT LINE ONLY
SetParticlesVelocityRange(particles, 2, 2)
do
// SET THE PARTICLE EMITTER POSITION TO THE EDGE OF THE RECTANGLE
SetParticlesPosition(particles, GetWorldXFromSprite(sprite, 0, 21), GetWorldYFromSprite(sprite, 0, 21))
// ROTATE THE SPRITE WITH KEYBOARD (A / D)
if GetRawKeyState(68) then SetSpriteAngle(sprite, GetSpriteAngle(sprite) + 2)
if GetRawKeyState(65) then SetSpriteAngle(sprite, GetSpriteAngle(sprite) - 2)
Sync()
loop
SetDisplayAspect(0.5625)
SetSyncRate(60,0)
background = CreateSprite(0)
SetSpriteSize(background, 100, 100)
SetSpriteColor(background, 25, 25, 25, 255)
sprite = CreateSprite(0) // MAKE A SPRITE
SetSpriteSize(sprite, 3, 40) // MAKE THE SPRITE A RECTANGLE SHAPE
SetSpriteColor(sprite, 0, 0, 200, 255)
SetSpritePositionByOffset(sprite, 50, 50) // PLACE THE SPRITE MIDDLE OF THE SCREEN
particles = CreateParticles(0,0) // MAKE PARTICLE EMITTER
SetParticlesLife(particles, 0.5) // SET PARTICLES LIFE TO 0.5 SECONDS
SetParticlesFrequency(particles, 20) // SET PARTICLES FREQUENCY TO 20 PER SECOND
SetParticlesSize(particles, 2) // SET PARTICLES SIZE TO 2% OF SCREEN SIZE
SetParticlesAngle(particles, 0) // KEEP THE PARTICLES IN A STAIGHT LINE ONLY
SetParticlesVelocityRange(particles, 2, 2)
do
// SET THE PARTICLE EMITTER POSITION TO THE EDGE OF THE RECTANGLE
SetParticlesPosition(particles, GetWorldXFromSprite(sprite, 0, 21), GetWorldYFromSprite(sprite, 0, 21))
// ROTATE THE SPRITE WITH KEYBOARD (A / D)
if GetRawKeyState(68) then SetSpriteAngle(sprite, GetSpriteAngle(sprite) + 2)
if GetRawKeyState(65) then SetSpriteAngle(sprite, GetSpriteAngle(sprite) - 2)
Sync()
loop
Interestingly even though "1080/1920" and "0.5625" are the same value, when you run the first snippet you get a square display ratio and the particle emitter follows the rectangle edge perfectly (use A and D to rotate it).
Meanwhile the second snippet produces the expected rectangular display ratio but the particle emitter no longer follows the rectangle correctly.