2012-07-31 11 views
5

hi sono nuovo nello sviluppo del gioco Android che uso AndEngine ho bisogno di ploat un percorso, ma c'è un problema imageDisegnare un percorso in AndEngine per spostare un immagine o sprite

sguardo al percorso image.The ho bisogno è come il primo l'oggetto dovrebbe spostarsi dal basso verso il centro dello schermo. ma mentre traccia il mio percorso si sposta al centro dello schermo ma torna al secondo punto come nella seconda immagine. L'immagine si sta muovendo attraverso il percorso ma è come la 2a immagine. Ne ho bisogno come prima dovrebbe fermarsi nel 3 ° punto e dovrebbe ricominciare dal primo punto.

Il mio codice è indicato di seguito

package com.example.sss; 

import org.andengine.engine.camera.Camera; 
import org.andengine.engine.options.EngineOptions; 
import org.andengine.engine.options.ScreenOrientation; 
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy; 
import org.andengine.entity.IEntity; 
import org.andengine.entity.modifier.LoopEntityModifier; 
import org.andengine.entity.modifier.PathModifier; 
import org.andengine.entity.modifier.PathModifier.IPathModifierListener; 
import org.andengine.entity.modifier.PathModifier.Path; 
import org.andengine.entity.scene.Scene; 
import org.andengine.entity.scene.background.RepeatingSpriteBackground; 
import org.andengine.entity.sprite.AnimatedSprite; 
import org.andengine.entity.util.FPSLogger; 
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas; 
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory; 
import org.andengine.opengl.texture.atlas.bitmap.source.AssetBitmapTextureAtlasSource; 
import org.andengine.opengl.texture.region.TiledTextureRegion; 
import org.andengine.ui.activity.SimpleBaseGameActivity; 

/** 
* (c) 2010 Nicolas Gramlich 
* (c) 2011 Zynga 
    * 
* @author Nicolas Gramlich 
* @since 13:58:48 - 19.07.2010 
*/ 
public class MainActivity extends SimpleBaseGameActivity { 
// =========================================================== 
// Constants 
// =========================================================== 

private static final int CAMERA_WIDTH = 720; 
private static final int CAMERA_HEIGHT = 480; 

// =========================================================== 
// Fields 
// =========================================================== 

private RepeatingSpriteBackground mGrassBackground; 

private BitmapTextureAtlas mBitmapTextureAtlas; 
private TiledTextureRegion mPlayerTextureRegion; 

// =========================================================== 
// Constructors 
// =========================================================== 

// =========================================================== 
// Getter & Setter 
// =========================================================== 

// =========================================================== 
// Methods for/from SuperClass/Interfaces 
// =========================================================== 


public EngineOptions onCreateEngineOptions() { 
    final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); 

    return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera); 
} 


public void onCreateResources() { 
    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); 

    this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 128, 128); 
    this.mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlas, this, "player.png", 0, 0, 3, 4); 
    this.mGrassBackground = new RepeatingSpriteBackground(CAMERA_WIDTH, CAMERA_HEIGHT, this.getTextureManager(), AssetBitmapTextureAtlasSource.create(this.getAssets(), "gfx/background_grass.png"), this.getVertexBufferObjectManager()); 
    this.mBitmapTextureAtlas.load(); 
} 


public Scene onCreateScene() { 
    this.mEngine.registerUpdateHandler(new FPSLogger()); 

    final Scene scene = new Scene(); 
    final Scene scene_one = new Scene(); 
    scene.setBackground(this.mGrassBackground); 




    /* Calculate the coordinates for the face, so its centered on the camera.  */ 
    final float centerX = (CAMERA_WIDTH - this.mPlayerTextureRegion.getWidth())/2; 
    final float centerY = (CAMERA_HEIGHT - this.mPlayerTextureRegion.getHeight())/2; 
    System.out.println("aaaaaa"+centerX+"asdadas"); 

    /* Create the sprite and add it to the scene. */ 
    final AnimatedSprite player_one = new AnimatedSprite(centerX, centerY, 48, 64, this.mPlayerTextureRegion, this.getVertexBufferObjectManager()); 

    final Path path_one = new Path(5).to(CAMERA_WIDTH - 58, 10).to(10, 10).to(100, CAMERA_HEIGHT/2f);//to(10, 10).to(10, CAMERA_HEIGHT - 74).to(CAMERA_WIDTH - 58, CAMERA_HEIGHT - 74).to(CAMERA_WIDTH - 58, 10).to(10, 10); 
    final AnimatedSprite player = new AnimatedSprite(centerX, centerY, 48, 64, this.mPlayerTextureRegion, this.getVertexBufferObjectManager()); 
    final Path path = new Path(5).to(CAMERA_WIDTH - 58, 10).to(10, 10).to(10, CAMERA_HEIGHT/2f); 


    player.registerEntityModifier(new LoopEntityModifier(new PathModifier(5, path, null, new IPathModifierListener() { 

     public void onPathStarted(final PathModifier pPathModifier, final IEntity pEntity) { 

     } 


     public void onPathWaypointStarted(final PathModifier pPathModifier, final IEntity pEntity, final int pWaypointIndex) { 
      switch(pWaypointIndex) { 
       case 0: 
        player.animate(new long[]{200, 200, 200}, 6, 8, true); 
        break; 
       case 1: 
        player.animate(new long[]{200, 200, 200}, 3, 5, true); 

        break; 
       case 2: 
        player.animate(new long[]{200, 200, 200}, 0, 2, true); 


        break; 
       case 3: 
        //scene.setVisible(false); 
        player.animate(new long[]{200, 200, 200}, 9, 11, true); 
        break; 
      } 
     } 


     public void onPathWaypointFinished(final PathModifier pPathModifier, final IEntity pEntity, final int pWaypointIndex) { 



     } 


     public void onPathFinished(final PathModifier pPathModifier, final IEntity pEntity) { 
      System.out.println("tileesdfsdfsdfgfdgdfsee"+player.getCurrentTileIndex()); 
     } 
    }))); 
















player_one.registerEntityModifier(new LoopEntityModifier(new PathModifier(5, path_one, null, new IPathModifierListener() { 

     public void onPathStarted(final PathModifier pPathModifier, final IEntity pEntity) { 

     } 


     public void onPathWaypointStarted(final PathModifier pPathModifier, final IEntity pEntity, final int pWaypointIndex) { 
      switch(pWaypointIndex) { 
       case 0: 
        player.animate(new long[]{200, 200, 200}, 6, 8, true); 
        break; 
       case 1: 
        player.animate(new long[]{200, 200, 200}, 3, 5, true); 


        break; 
       case 2: 
        player.animate(new long[]{200, 200, 200}, 0, 2, true); 

         System.out.println("insideeeeeeeeeeeeeeeeeeeeeeeee"); 
        scene.detachChild(player_one); 
        scene.attachChild(player); 
        break; 
       case 3: 
        player.animate(new long[]{200, 200, 200}, 9, 11, true); 
        break; 
      } 
     } 


     public void onPathWaypointFinished(final PathModifier pPathModifier, final IEntity pEntity, final int pWaypointIndex) { 



     } 


     public void onPathFinished(final PathModifier pPathModifier, final IEntity pEntity) { 
      System.out.println("tileesdfsdfsdfgfdgdfsee"+player.getCurrentTileIndex()); 
     } 
    }))); 






    scene.attachChild(player); 

    return scene; 
} 

// =========================================================== 
// Methods 
// =========================================================== 

// =========================================================== 
// Inner and Anonymous Classes 
// =========================================================== 
} 

Si prega di aiutare me.Thanks in anticipo

risposta

7

Se si dispone di tre punti è necessario specificare che nel costruttore Percorso:

final Path path = new Path(3).to(CAMERA_WIDTH - 58, 10).to(10, 10).to(10, CAMERA_HEIGHT/2f); 

invece

final Path path = new Path(5).to(CAMERA_WIDTH - 58, 10).to(10, 10).to(10, CAMERA_HEIGHT/2f); 
+0

rispetto k il tuo driver613 funziona bene ora :) – Ramz

+0

driver613 conosci la soluzione per questa domanda http://stackoverflow.com/questions/11755693/how-to-fall-a-sprite-over-another-using-and-engine -in-android – Ramz

+0

Hai già una risposta :) –

Problemi correlati