Hmm... Might try a longer timeout. Probably what is happening is the change in rotation causes a redisplay outside the loop that is animating the token to it's final destination, which makes the frame temporarily jump as the API forces it to be in a position. You could also try grabbing the object again before setting it: on('ready', function() {
on('change:graphic', function(graphic, prev) {
if(graphic.get('lastmove') === prev['lastmove']) {return;}
_.defer(()=>{
var oldLeft = Math.floor(prev['left']/70);
var oldTop = Math.floor(prev['top']/70);
var newLeft = Math.floor(graphic.get('left')/70);
var newTop = Math.floor(graphic.get('top')/70);
var freshGraphic = getObj('graphic',graphic.id);
if(oldLeft < newLeft) {
if(oldTop < newTop) {
freshGraphic.set('rotation', 315);
} else if(oldTop > newTop) {
freshGraphic.set('rotation', 225);
} else {
freshGraphic.set('rotation', 270);
}
} else if(oldLeft > newLeft) {
if(oldTop < newTop) {
freshGraphic.set('rotation', 45);
} else if(oldTop > newTop) {
freshGraphic.set('rotation', 135);
} else {
freshGraphic.set('rotation', 450);
}
} else if(oldTop < newTop) {
freshGraphic.set('rotation', 360);
} else if(oldTop > newTop) {
freshGraphic.set('rotation', 540);
}
},1000); //< Bumped up to a second delay
});
});