2014-02-02 5 views
0

Может ли кто-нибудь помочь мне? Я пытаюсь реализовать OnClickListener, чтобы мой код перешел в основную игру. Я не знаю, как сделать кодирование кликмена в AndEngine.Как добавить OnClickListener в Andengine?

Я застрял в той части, где я могу выводить только изображения, а не как изображения с возможностью клика.

UPDATE: Воспроизведение изображения/кнопки, похоже, не работает даже после добавления этого кода к нему. Может ли кто-нибудь помочь?

Добавлен код для GameActivity:

public boolean onAreaTouched(TouchEvent pSceneTouchEvent,float pTouchAreaLocalX, float pTouchAreaLocalY) { 
     if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN){ 
     // you can implement your action 
      sceneManager.loadGameResources(); 
       sceneManager.createGameScene(); 
      sceneManager.setCurrentScene(AllScenes.GAME); 
} 

    return onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY); 

} 

Добавлен код для SceneManager:

public Scene createMenuScene() 
{ 
    menuScene = new Scene(); 
    menuScene.setBackground(new Background (0,0,0)); 

    Sprite icon = new Sprite (0,0, menuTR, engine.getVertexBufferObjectManager()); 
    icon.setPosition((camera.getWidth() - icon.getWidth()) /2, (camera.getHeight() - icon.getHeight()) /2); 
    menuScene.attachChild(icon); 


    Sprite play = new Sprite (180, 350, playTR, engine.getVertexBufferObjectManager()); 

    this.menuScene.attachChild(play); 
    this.menuScene.registerTouchArea(play); 

    Sprite quit = new Sprite (500,350, quitTR, engine.getVertexBufferObjectManager()); 

    menuScene.attachChild(quit); 
    return menuScene; 
} 
public Scene createGameScene() 
{ 

return gameScene; 
} 

Вот код для моего GameActivity:

public class GameActivity extends BaseGameActivity { 

Scene scene; 
protected static final int CAMERA_WIDTH = 800; 
protected static final int CAMERA_HEIGHT = 480; 
BitmapTextureAtlas playerTexture; 
ITextureRegion playerTextureRegion; 
PhysicsWorld physicsWorld; 


SceneManager sceneManager; 
Camera mCamera; 

@Override 
public EngineOptions onCreateEngineOptions() { 

mCamera = new Camera (0,0, CAMERA_WIDTH, CAMERA_HEIGHT); 
EngineOptions options = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy (CAMERA_WIDTH, CAMERA_HEIGHT), mCamera); 
return options; 
} 

@Override 
public void onCreateResources(
     OnCreateResourcesCallback pOnCreateResourcesCallback) 
     throws Exception { 


    sceneManager = new SceneManager(this, mEngine, mCamera); 
    sceneManager.loadSplashResources(); 

    pOnCreateResourcesCallback.onCreateResourcesFinished(); 
} 


@Override 
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) 
     throws Exception { 

    pOnCreateSceneCallback.onCreateSceneFinished(sceneManager.createSplashScene()); 

} 

@Override 
public void onPopulateScene(Scene pScene, 
     OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception { 

    mEngine.registerUpdateHandler(new TimerHandler(3f, new ITimerCallback(){ 


     public void onTimePassed(TimerHandler pTimerHandler) 
     { 
      mEngine.unregisterUpdateHandler(pTimerHandler); 
      // TODO Auto-generated method stub 

      sceneManager.loadMenuResources(); 
      sceneManager.createMenuScene(); 
      sceneManager.setCurrentScene(AllScenes.MENU); 
     } 
    })); 
    pOnPopulateSceneCallback.onPopulateSceneFinished(); 
} 



} 

и вот мой код SceneManager:

public class SceneManager { 
private AllScenes currentScene; 
private BaseGameActivity activity; // Name of other activity GameActivity 
private Engine engine; 
private Camera camera; 
private BitmapTextureAtlas splashTA, menuTA, playTA, quitTA; 
private ITextureRegion splashTR, menuTR, playTR , quitTR; 
private Scene splashScene, gameScene, menuScene; 

public enum AllScenes 
{ 
    SPLASH, MENU, GAME 
} 

public SceneManager(BaseGameActivity act, Engine eng, Camera cam) 
{ 
// TODO Auto-generated constructor stub 
    this.activity = act; 
    this.engine = eng; 
    this.camera = cam; 
} 
public AllScenes getCurrentScene() 
{ 
    return currentScene; 
} 

public void setCurrentScene(AllScenes currentScene) 
{ 
    this.currentScene = currentScene; 


    switch(currentScene) 
    { 
    case SPLASH: 

     break; 
    case MENU: 
     engine.setScene(menuScene); 

     break; 
    case GAME: 

     engine.setScene(gameScene); 
     break; 

    default: 
     break; 
    } 
} 

public void loadSplashResources() 
{ 
    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); 
    splashTA = new BitmapTextureAtlas(this.activity.getTextureManager(), 256, 256); 
    splashTR = BitmapTextureAtlasTextureRegionFactory.createFromAsset(splashTA, this.activity, "splash.png", 0,0); 
    splashTA.load(); 
} 

public void loadGameResources() 
{ 

} 

public void loadMenuResources() 
{ 
    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); 
    menuTA = new BitmapTextureAtlas(this.activity.getTextureManager(), 800, 480); 
    menuTR = BitmapTextureAtlasTextureRegionFactory.createFromAsset(menuTA, this.activity, "menu.png", 0, 0); 
    menuTA.load(); 

    playTA = new BitmapTextureAtlas(this.activity.getTextureManager(), 140, 42); 
    playTR = BitmapTextureAtlasTextureRegionFactory.createFromAsset(playTA, this.activity, "play.png", 0, 0); 
    playTA.load(); 

    quitTA = new BitmapTextureAtlas(this.activity.getTextureManager(), 140, 42); 
    quitTR = BitmapTextureAtlasTextureRegionFactory.createFromAsset(quitTA, this.activity, "quit.png", 0, 0); 
    quitTA.load(); 
} 

public Scene createSplashScene() 
{ 
    splashScene = new Scene(); 
    splashScene.setBackground(new Background(233,242,237)); 

    Sprite icon = new Sprite(0,0, splashTR, engine.getVertexBufferObjectManager()); 
    icon.setPosition((camera.getWidth()-icon.getWidth())/2, (camera.getHeight() - icon.getHeight()) /2); 
    splashScene.attachChild(icon); 
    return splashScene; 
} 

public Scene createMenuScene() 
{ 
    menuScene = new Scene(); 
    menuScene.setBackground(new Background (0,0,0)); 

    Sprite icon = new Sprite (0,0, menuTR, engine.getVertexBufferObjectManager()); 
    icon.setPosition((camera.getWidth() - icon.getWidth()) /2, (camera.getHeight() - icon.getHeight()) /2); 
    menuScene.attachChild(icon); 


    Sprite play = new Sprite (0,0, playTR, engine.getVertexBufferObjectManager()); 
    play.setPosition(180, 350); 
    menuScene.attachChild(play); 

    Sprite quit = new Sprite (0,0, quitTR, engine.getVertexBufferObjectManager()); 
    quit.setPosition(500, 350); 
    menuScene.attachChild(quit); 
    return menuScene; 
} 


} 

ответ

1
public Scene createMenuScene() 
{ 
    menuScene = new Scene(); 
    menuScene.setBackground(new Background (0,0,0)); 

    Sprite icon = new Sprite (0,0, menuTR, engine.getVertexBufferObjectManager()); 
    icon.setPosition((camera.getWidth() - icon.getWidth()) /2, (camera.getHeight() - icon.getHeight()) /2); 
    menuScene.attachChild(icon); 


    Sprite playSprite = new Sprite(0, 0, playTR, this.getVertexBufferObjectManager()){ 
        @Override 
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent, 
          float pTouchAreaLocalX, float pTouchAreaLocalY) { 
          if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN){ 
          // you can implement your action 
             sceneManager.setCurrentScene(AllScenes.GAME); 
} 

         return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY); 
        } 
       }; 

       menuScene.registerTouchArea(playSprite); 
       play.setPosition(180, 350); 
       menuScene.attachChild(playSprite); 




    Sprite quitSprite = new Sprite(0, 0, quitTR, this.getVertexBufferObjectManager()){ 
        @Override 
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent, 
          float pTouchAreaLocalX, float pTouchAreaLocalY) { 
          if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN){ 
          // you can implement your action to quit 

} 

         return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY); 
        } 
       }; 
       quitSprite.setPosition(500, 350); 
       menuScene.registerTouchArea(quitSprite); 
       menuScene.attachChild(quitSprite); 
} 
+0

попробуйте этот. Начните с примеров Andengine, чтобы вы получили хорошее понимание. Все самое лучшее. – Rama

+0

Как запустить эти примеры, большинство из них имеют ошибки в нем, запрашивающие все расширения. Могу ли я запускать одну конкретную программу, не беспокоясь об этих расширениях? – user3247200

+0

Сначала загрузите все расширения из github.Then импортируйте все эти расширения в eclipse.Next загрузите примеры Andengine из github.Now импортируйте это в eclipse.Установите все расширения в качестве библиотек для этого примера Andengine. – Rama

1

я не получил то, что именно вы want.But вы можете реализовать OnClick для спрайта следующим образом:

ButtonSprite mSoundButton = new ButtonSprite(30, 30, 
             ResourceManager.getSoundButtonTR(), 
             ResourceManager.getEngine().getVertexBufferObjectManager(), 
             new ButtonSprite.OnClickListener() { 
        @Override 
        public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX, float pTouchAreaLocalY) { 


        } 
     }); 
+0

Я попробую это, в отношении того, что я хотел произойти с кодом, я хочу, чтобы спрайты играли и уходили, чтобы быть кликабельными, чтобы он позволял мне играть в игру или покидать ее. Спасибо Rama – user3247200

1

Если вы хотите добавить щелчка слушателю сюжетного самостоятельно вы можете сделать следующее:

public class MenuScrollerActivity extends SimpleBaseGameActivity implements IClickDetectorListener{ 
    private ClickDetector mClickDetector; 

MenuScrollerActivity(){ 
this.mClickDetector = new ClickDetector(this); 
} 

@Override 
    public void onClick(ClickDetector arg0, int arg1, float arg2, float arg3) { 
     // TODO Auto-generated method stub 

    } 

@Override 
     public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) { 
       this.mClickDetector.onTouchEvent(pSceneTouchEvent); 

       return true; 
     } 

} 
1

Вы также можете сделать таким образом, для этих функциональных возможностей:

 Sprite playSprite = new Sprite(0, CAMERA_HEIGHT/2, mFruitTiledTextureRegion3, this.getVertexBufferObjectManager()){ 
        @Override 
        public boolean onAreaTouched(TouchEvent pSceneTouchEvent, 
          float pTouchAreaLocalX, float pTouchAreaLocalY) { 
          if(pSceneTouchEvent.getAction() == TouchEvent.ACTION_DOWN){ 
          // you can implement your action 
             sceneManager.setCurrentScene(AllScenes.GAME); 
} 

         return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY); 
        } 
       }; 

       this.mScene.registerTouchArea(playSprite); 
       this.mScene.attachChild(playSprite); 
+0

проверить этот код для перехода от сцены к другому при нажатии спрайта – Rama

+0

вы можете подробнее объяснить, как этот код выполняется и что он делает? Мне сложно добавить код. где я его помещаю? В SceneManager или в GameActivity? – user3247200

Смежные вопросы