I’m trying to make a camera for an android app that moves by dragging on the touch screen to drag the camera across. I’m using the Cocos2D engine for my development.
The problem is, whenever you moved your finger on the screen, everything on the screen just disappears instead of moving.
My code is below, I hope someone can help me with this 🙂 Thanks for your time.
@Override
public boolean ccTouchesMoved(MotionEvent event)
{
CGPoint location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), event.getY()));
CGPoint movement = CGPoint.ccpSub(location, previousLocation);
previousLocation = location;
//Update the camera
float[] x = new float[1];
float[] y = new float[1];
float[] z = new float[1];
this.getCamera().getCenter(x, y, z);
CameraPos.x = x[0];
CameraPos.y = y[0];
this.getCamera().getEye(x, y, z);
movement.x = 2 * movement.x * (1 + (z[0]/832));
movement.y = 2 * movement.y * (1 + (z[0]/832));
CameraPos.x = CameraPos.x - Math.round(movement.x);
CameraPos.y = CameraPos.y - Math.round(movement.y);
this.getCamera().setCenter(CameraPos.x, CameraPos.y, 0);
this.getCamera().setEye(CameraPos.x, CameraPos.y, z[0]);
return true;
}
Its fine I got it working nevertheless.
For any who want to know this, I created a class called CameraControls that controls the basic functions of the camera. It isnt finished yet (I’ll probably update the code as I make changes such as zoom functionality) but this one allows me to track the touch input perfectly.
Now that I have a class, I simply create an instance of CameraControls in my class and then do the necessary configuration.
In this case, I want the total area my camera can view to be 3 x the width of the camera, and 3 times the height of the camera, so I set the limits of the camera as the negative width of the camera, the width of the camera, the negative height of the camera and the height of the camera, as the camera starts at (0, 0).
Finally, I just add the necessary method calling in ccTouchesBegan, ccTouchesMoved and ccTouchesEnded