I've been working on a 2-D Gameboy style RPG for a while now, and the game logic is mostly all done so I'm starting to try to make things look good. One thing I've noticed is that the walking movement / screen movement is a little bit choppy. Technically, it should work fine, but either it seems to be having some quirks, either due to taking up a lot of processing power or just timing inconsistencies between moving the screen and moving the sprite.
To move the sprite, once I know where I want to move it, I call:
tempPos.y += 3*theHKMap.tileSize.width/5; id actionMove = [CCMoveTo
actionWithDuration:0.1 position:tempPos]; id actionMoveDone =
[CCCallFuncN actionWithTarget:self selector:@selector(orientOneMove)];
[guy runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
[self setCenterOfScreen:position];
Then, in orientOneMove, I call:
[self.guy setTexture:[[CCTextureCache sharedTextureCache] addImage:@"guysprite07.png"]]; //the walking picture-I change texture back at the end of the movement
id actionMove = [CCMoveTo actionWithDuration:0.15 position:self.tempLocation2];
id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(toggleTouchEnabled)];
[guy runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
The code for the concurrently running setCenterOfScreen:position method is:
id actionMove = [CCMoveTo actionWithDuration:0.25 position:difference]; [self runAction:
[CCSequence actions:actionMove, nil, nil]];
So the setCenterOfScreen moves the camera in one clean move while the guy moving is chopped into two actions to animate it (which I believe might be inefficient.)
It's hard to tell what is making the movement not perfectly clean from looking at it, but essentially the guy isn't always perfectly in the center of the screen -- during movement, he's often times a pixel or two off for an instant. Any ideas/ solutions?