I think the problem is in CocosNode's -transform method. For some reason transformations are being cast to (int)s. Most people probably dont notice anything bc they dont usually scale sprites to 300x! There may be a reason for the casts - its weird bc it uses glTranslatef which takes floats, so its taking floats, casting them to ints, and then casting them back to floats. ??
Riq, is there a reason for the (int)s?
-(void) transform
{
if ( !(grid && grid.active) )
[camera locate];
// transformations
// BEGIN original implementation
//
// translate
if ( relativeTransformAnchor_ && (transformAnchor_.x != 0 || transformAnchor_.y != 0 ) )
glTranslatef( (int)(-transformAnchor_.x), (int)(-transformAnchor_.y), vertexZ_);
if (transformAnchor_.x != 0 || transformAnchor_.y != 0 )
glTranslatef( (int)(position_.x + transformAnchor_.x), (int)(position_.y + transformAnchor_.y), vertexZ_);
else if ( position_.x !=0 || position_.y !=0)
glTranslatef( (int)(position_.x), (int)(position_.y), vertexZ_ );
// rotate
if (rotation_ != 0.0f )
glRotatef( -rotation_, 0.0f, 0.0f, 1.0f );
// scale
if (scaleX_ != 1.0f || scaleY_ != 1.0f)
glScalef( scaleX_, scaleY_, 1.0f );
// restore and re-position point
if (transformAnchor_.x != 0.0f || transformAnchor_.y != 0.0f)
glTranslatef((int)(-transformAnchor_.x), (int)(-transformAnchor_.y), vertexZ_);
//
// END original implementation
/*
// BEGIN alternative -- using cached transform
//
static GLfloat m[16];
CGAffineTransform t = [self nodeToParentTransform];
CGAffineToGL(&t, m);
glMultMatrixf(m);
glTranslatef(0, 0, vertexZ_);
//
// END alternative
*/
}