Andengine, How To Move Sprite With Touchscreen
I begin with Andengine, and have difficulties to move my sprite when i touch the screen ( not the sprite ). I really need your help, thanks a lot. here is my code: @Override pr
Solution 1:
You can implement IOnSceneTouchListener
interface, than override onSceneTouchEvent method, where you can act with your ball
@OverridepublicbooleanonSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
carl.setPosition(carl.getX() +2,carl.getY() );
returnfalse;
}
but don't forget to add this scene.setOnSceneTouchListener(this);
to protected Scene onCreateScene()
EDIT:
boolean canGo = false;
@OverridepublicbooleanonSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN)
canGo = true;
if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP)
canGo = false;
returnfalse;
}
and this add to your public Scene onCreateScene() {
scene.registerUpdateHandler(new IUpdateHandler() {
@Override
public void reset() {}
@Override
public void onUpdate(float pSecondsElapsed) {
// TODO Auto-generated method stubif (canGo)
ball.setPosition(ball.getX() + 2, ball.getY());
}
});
Solution 2:
You can also use the move modifier to move up and down.
publicclassMainActivityextendsBaseGameActivityimplementsIOnSceneTouchListener {
privatestaticfinalintCAMERA_WIDTH=800;
privatestaticfinalintCAMERA_HEIGHT=480;
private BitmapTextureAtlas characterTextureAtlas;
private ITiledTextureRegion characterTiledTextureRegion;
private AnimatedSprite characterAnimatedSprite;
booleancanGo=false;
publicstaticfinalStringTAG="Cowboy#";
private Scene scene;
@Overridepublic EngineOptions onCreateEngineOptions() {
Cameracamera=newCamera(0,0, CAMERA_WIDTH, CAMERA_HEIGHT);
returnnewEngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, newFillResolutionPolicy(), camera);
}
@OverridepublicvoidonCreateResources(OnCreateResourcesCallback pOnCreateResourcesCallback)throws IOException {
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
characterTextureAtlas = newBitmapTextureAtlas(mEngine.getTextureManager(), 640, 320, TextureOptions.BILINEAR);
characterTiledTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(characterTextureAtlas, this, "walkman640x320.png", 0, 0, 8, 1);
characterTextureAtlas.load();
pOnCreateResourcesCallback.onCreateResourcesFinished();
}
@OverridepublicvoidonCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)throws IOException {
scene = newScene();
scene.setOnSceneTouchListener(this);
characterAnimatedSprite = newAnimatedSprite(120, 120, characterTiledTextureRegion, mEngine.getVertexBufferObjectManager()){
@OverrideprotectedvoidonManagedUpdate(float pSecondsElapsed) {
super.onManagedUpdate(pSecondsElapsed);
// Log.d(TAG, "onManagedUpdate: counting#");
}
};
characterAnimatedSprite.animate(50);
scene.attachChild(characterAnimatedSprite);
scene.setBackground(newBackground(Color.CYAN));
scene.registerUpdateHandler(newIUpdateHandler() {
@Overridepublicvoidreset() {}
@OverridepublicvoidonUpdate(float pSecondsElapsed) {
// TODO Auto-generated method stub//moves character 2 steps forward along x-axis// if (canGo){// characterAnimatedSprite.setPosition(characterAnimatedSprite.getX() + 2, characterAnimatedSprite.getY());// }//moves character 8 steps upward along y-axis and back// if (canGo){// characterAnimatedSprite.setPosition(characterAnimatedSprite.getX(), characterAnimatedSprite.getY()+30);//// characterAnimatedSprite.setPosition(characterAnimatedSprite.getX(), characterAnimatedSprite.getY()-8);// }if (canGo){
finalfloatduration=1;
// final float duration = 3;finalfloatfromX= characterAnimatedSprite.getX();
finalfloattoX= characterAnimatedSprite.getX();
finalfloatfromY= characterAnimatedSprite.getY();
finalfloattoY= characterAnimatedSprite.getY() + 80;
//you can move in on axis using MoveYModifier or MoveXModifier// MoveYModifier mod1=new MoveYModifier(constanttime,fromY,toY);// sprite.registerEntityModifier(mod1);finalMoveModifierdownMoveModifier=newMoveModifier(0.4f, fromX, toY, toX, fromY, newIEntityModifier.IEntityModifierListener() {
@OverridepublicvoidonModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
characterAnimatedSprite.stopAnimation(0);
}
@OverridepublicvoidonModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
characterAnimatedSprite.animate(50);
}
});
finalMoveModifierupMoveModifier=newMoveModifier(0.2f, fromX, fromY, toX, toY, newIEntityModifier.IEntityModifierListener() {
@OverridepublicvoidonModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
characterAnimatedSprite.stopAnimation(0);
}
@OverridepublicvoidonModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
characterAnimatedSprite.registerEntityModifier(downMoveModifier);
}
});
characterAnimatedSprite.registerEntityModifier(upMoveModifier);
}
}
});
pOnCreateSceneCallback.onCreateSceneFinished(scene);
}
@OverridepublicvoidonPopulateScene(Scene pScene, OnPopulateSceneCallback pOnPopulateSceneCallback)throws IOException {
pOnPopulateSceneCallback.onPopulateSceneFinished();
}
@OverridepublicbooleanonSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_DOWN)
canGo = true;
if (pSceneTouchEvent.getAction() == MotionEvent.ACTION_UP)
canGo = false;
returnfalse;
}
}
Post a Comment for "Andengine, How To Move Sprite With Touchscreen"