菜单滑动效果的实现
la clase pública MenuScrollerActivity extiende BaseGameActivity implementa IScrollDetectorListener, IOnSceneTouchListener, IClickDetectorListener { // ====================================== ======================== // Constantes // ==================================================== ========= protegido estático int CAMERA_WIDTH = 480; int estático protegido CAMERA_HEIGHT = 320; int estático protegido FONT_SIZE = 24; protegido estático int PADDING = 50; protegido estático int MENUITEMS = 7; // ================================================== =========== // Campos // ==================================================== ========= escena privada mScene; cámara privada mCamera; fuente privada mFont; BitmapTextureAtlas privado mFontTexture; privado BitmapTextureAtlas mMenuTextureAtlas; región de textura privada mMenuLeftTextureRegion; región de textura privada mMenuRightTextureRegion; menú privado de Sprite a la izquierda; menú privado de Sprite a la derecha; // Desplazamiento privado SurfaceScrollDetector mScrollDetector; ClickDetector privado mClickDetector; flotador privado mMinX = 0; flotador privado mMaxX = 0; flotador privado mCurrentX = 0; privado int iItemClicked = -1; barra de desplazamiento rectangular privada; columnas privadas de Lista<TextureRegión> = nueva ArrayList<TexturaRegión>(); // ================================================== =========== // Constructores // ==================================================== ========= // ==================================================== ========= // Obtenedor y definidor // ==================================================== ========= // ==================================================== ========= // Métodos para/desde SuperClass/Interfaces // ==================================================== ========= @Override public void onLoadResources() { // Rutas FontFactory.setAssetBasePath("font/"); BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); // Fuente this.mFontTexture = new BitmapTextureAtlas(256, 256); this.mFont = FontFactory.createFromAsset(this.mFontTexture, this, "Plok.TTF", FONT_SIZE, true, Color.BLACK); this.mEngine.getTextureManager().loadTextures(this.mFontTexture); this.mEngine.getFontManager().loadFonts(this.mFont); //Imágenes para el menú for (int i = 0; i < MENUITEMS; i++) { BitmapTextureAtlas mMenuBitmapTextureAtlas = new BitmapTextureAtlas(256,256, TextureOptions.BILINEAR_PREMULTIPLYALPHA); TextureRegion mMenuTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuBitmapTextureAtlas, this, "menu"+i+".png", 0, 0); this.mEngine.getTextureManager().loadTexture(mMenuBitmapTextureAtlas); columnas.add(mMenuTextureRegion); } //Texturas para las flechas del menú this.mMenuTextureAtlas = new BitmapTextureAtlas(128,128, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mMenuLeftTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuTextureAtlas, this, "menu_left.png", 0, 0); this.mMenuRightTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuTextureAtlas, this, "menu_right.png",64, 0); this.mEngine.getTextureManager().loadTexture(mMenuTextureAtlas); } @Override public Engine onLoadEngine() { this.mCamera = nueva cámara(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); final EngineOptions EngineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE, new FillResolutionPolicy(), this.mCamera); EngineOptions.getTouchOptions().setRunOnUpdateThread(verdadero); motor final motor = nuevo motor (opciones de motor); motor de retorno; } @Override escena pública onLoadScene() { this.mEngine.registerUpdateHandler(new FPSLogger()); this.mScene = nueva escena(); this.mScene.setBackground(nuevo ColorBackground(0, 0, 0)); this.mScrollDetector = nuevo SurfaceScrollDetector(esto); this.mClickDetector = nuevo ClickDetector(esto); this.mScene.setOnSceneTouchListener(esto); this.mScene.setTouchAreaBindingEnabled(verdadero); this.mScene.setOnSceneTouchListenerBindingEnabled(verdadero); CrearMenuBoxes(); devolver this.mScene; } @Override public boolean onSceneTouchEvent(escena final pScene, final TouchEvent pSceneTouchEvent) { this.mClickDetector.onTouchEvent(pSceneTouchEvent); this.mScrollDetector.onTouchEvent(pSceneTouchEvent); devolver verdadero; } @Override public void onScroll(final ScrollDetector pScollDetector, final TouchEvent pTouchEvent, final float pDistanceX, final float pDistanceY) { //Deshabilita las flechas de menú izquierda y derecha (relleno de 15px) if(mCamera.getMinX()<=15) menuleft. establecerVisible(falso); de lo contrario menuleft.setVisible (verdadero); if(mCamera.getMinX()>mMaxX-15) menuright.setVisible(false); de lo contrario menuright.setVisible (verdadero); //Regresar si se alcanzan los extremos if (((mCurrentX - pDistanceX) < mMinX) ){ return; }else if((mCurrentX - pDistanceX) > mMaxX){ retorno; } //Centrar la cámara en el punto actual this.mCamera.offsetCenter(-pDistanceX,0); mCurrentX -= pDistanceX; //Establece la barra de desplazamiento con la cámara flotante tempX =mCamera.getCenterX()-CAMERA_WIDTH/2; // agrega la parte % a la posición tempX+= (tempX/(mMaxX+CAMERA_WIDTH))*CAMERA_WIDTH; //establece la posición scrollBar.setPosition(tempX, scrollBar.getY()); //establece las flechas para menuright.setPosition(mCamera.getCenterX()+CAMERA_WIDTH/2-menuright.getWidth(),menuright.getY()); menuleft.setPosition(mCamera.getCenterX()-CAMERA_WIDTH/2,menuleft.getY()); // Debido a que la cámara puede tener valores X negativos, configúrelo en 0 if(this.mCamera.getMinX()<0){ this.mCamera.offsetCenter(0,0); mActualX=0; } } @Override public void onClick(ClickDetector pClickDetector, TouchEvent pTouchEvent) { loadLevel(iItemClicked); }; // ================================================== =========== // Métodos // ==================================================== ========= privado void CreateMenuBoxes() { int spriteX = PADDING; int spriteY = PADDING; //contador de elementos actuales int iItem = 1; for (int x = 0; x < columns.size(); x++) { //Al tocar, guarda el elemento en el que se hizo clic en caso de que sea un clic y no un desplazamiento. final int itemToLoad = iItem; Sprite sprite = nuevo Sprite(spriteX,spriteY,columns.get(x)){ public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { iItemClicked = itemToLoad; devolver falso; } }; iArtículo++; this.mScene.attachChild(sprite); this.mScene.registerTouchArea(sprite); spriteX += 20 + PADDING+sprite.getWidth(); } mMaxX = spriteX - CAMERA_WIDTH; //establece el tamaño de la barra de desplazamiento flotante scrollbarsize = CAMERA_WIDTH/((mMaxX+CAMERA_WIDTH)/CAMERA_WIDTH); barra de desplazamiento = nuevo rectángulo (0, CAMERA_HEIGHT-20, tamaño de la barra de desplazamiento, 20); barra de desplazamiento.setColor(1,0,0); this.mScene.attachChild(barra de desplazamiento); menuleft = nuevo Sprite(0,CAMERA_HEIGHT/2-mMenuLeftTextureRegion.getHeight()/2,mMenuLeftTextureRegion); menuright = nuevo Sprite(CAMERA_WIDTH-mMenuRightTextureRegion.getWidth(),CAMERA_HEIGHT/2-mMenuRightTextureRegion.getHeight()/2,mMenuRightTextureRegion); this.mScene.attachChild(menúderecha); menuleft.setVisible(falso); this.mScene.attachChild(menuleft); } @Override public void onLoadComplete() { } //Aquí es donde llamas a la carga del elemento. private void loadLevel(final int iLevel) { if (iLevel!= -1) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MenuScrollerActivity.this, "Cargar elemento" + String.valueOf( iLevel), Toast.LENGTH_SHORT).show(); iItemClicked = -1; } }}以上所述就是本文的全部内容了,希望大家能够喜欢.