ID:1477656
 
Resolved
When pixel offsets were changed during an obj or mob's animation, the changes did not appear while the animation was ongoing.
BYOND Version:504.1226
Operating System:Windows 7 Pro 64-bit
Web Browser:Chrome 32.0.1700.76
Applies to:Dream Seeker
Status: Resolved (504.1227)

This issue has been resolved.
Here's the code

world
fps = 40
icon_size = 32

mob
icon = 'mob.dmi'
icon_state = "mob"

obj/spinner
icon = 'spinner.dmi'
icon_state = "spinner"

proc/test()
animate(src, transform = turn(transform, 120), time = 5, loop = -1)
animate(transform = turn(transform, 120), time = 5)
animate(transform = turn(transform, 120), time = 5)

while(src)
pixel_x ++
sleep(world.tick_lag)

mob/Login()
..()
src.loc = locate(1,1,1)
var/obj/spinner/s = new(locate(2,2,1))
spawn s.test()


The pixel_x of the object should increase with each server tick, but does not. The actual value will increase but will not affect its visual position within the world.
I think the problem is that the matrix you're animating is the one stored from before the pixel_x started changing, meaning it'll be using the visuals from before the values changed.

You can pass pixel_x and pixel_y to animate() though, which should handle the change for you.
In response to Nadrew
Unfortunately in my true application (not displayed here), that is not possible because pixel_x and pixel_y must ramp up until the edge of a tile and then x and y must update appropriately while pixel_x and pixel_y are reset appropriately. This is controlled via a velocity calculated vector.

There's currently no way to make a pixel-based projectile move in a tile-based game with a rotation animate().
Lummox JR resolved issue with message:
When pixel offsets were changed during an obj or mob's animation, the changes did not appear while the animation was ongoing.
Works like a charm, thanks!