菜单滑动效果的实现
MenuScrollerActivity kelas publik memperluas implementasi BaseGameActivity IScrollDetectorListener, IOnSceneTouchListener, IClickDetectorListener { // ====== ======== // Konstanta // ======= ======= int statis terlindungi CAMERA_WIDTH = 480; dilindungi statis int CAMERA_HEIGHT = 320; dilindungi statis int FONT_SIZE = 24; PADDING int statis yang dilindungi = 50; MENUITEMS int statis yang dilindungi = 7; // ________________________________________________ =========== // Bidang // ==== ========== Adegan pribadi mScene; Kamera pribadi mCamera; font pribadi mFont; BitmapTextureAtlas mFontTexture pribadi; BitmapTextureAtlas pribadi mMenuTextureAtlas; Private TextureRegion mMenuLeftTextureRegion; Private TextureRegion mMenuRightTextureRegion; menu Sprite pribadi di kiri; menu Sprite pribadikanan; // Menggulir SurfaceScrollDetector mScrollDetector pribadi; ClickDetector pribadi mClickDetector; pelampung pribadi mMinX = 0; pelampung pribadi mMaxX = 0; pelampung pribadi mCurrentX = 0; pribadi int iItemClicked = -1; scrollBar Persegi Panjang pribadi; Daftar pribadi<TextureRegion> kolom = new ArrayList<TextureRegion>(); // ________________________________________________ =========== // Konstruktor // ==== ========== // ======== ====== // Pengambil & Penyetel // ======= ==================== == // ================ ============= // Metode untuk/dari SuperClass/Interface // =========== ================== @Override public void onLoadResources() { // Jalur FontFactory.setAssetBasePath("font/"); BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); // Font ini.mFontTexture = BitmapTextureAtlas baru(256, 256); this.mFont = FontFactory.createFromAsset(this.mFontTexture, ini, "Plok.TTF", FONT_SIZE, true, Color.BLACK); this.mEngine.getTextureManager().loadTextures(ini.mFontTexture); ini.mEngine.getFontManager().loadFonts(ini.mFont); //Gambar untuk menu untuk (int i = 0; i < MENUITEMS; i++) { BitmapTextureAtlas mMenuBitmapTextureAtlas = new BitmapTextureAtlas(256,256, TextureOptions.BILINEAR_PREMULTIPLYALPHA); TextureRegion mMenuTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuBitmapTextureAtlas, ini, "menu"+i+".png", 0, 0); this.mEngine.getTextureManager().loadTexture(mMenuBitmapTextureAtlas); kolom.tambahkan(mMenuTextureRegion); } //Tekstur untuk panah menu this.mMenuTextureAtlas = new BitmapTextureAtlas(128,128, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mMenuLeftTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuTextureAtlas, ini, "menu_left.png", 0, 0); this.mMenuRightTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuTextureAtlas, ini, "menu_right.png",64, 0); this.mEngine.getTextureManager().loadTexture(mMenuTextureAtlas); } @Override Mesin publik onLoadEngine() { this.mCamera = Kamera baru(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); final EngineOptions engineOptions = EngineOptions baru (benar, ScreenOrientation.LANDSCAPE, FillResolutionPolicy baru (), this.mCamera); engineOptions.getTouchOptions().setRunOnUpdateThread(true); mesin akhir mesin = Mesin baru(engineOptions); mesin kembali; } @Override Adegan publik onLoadScene() { this.mEngine.registerUpdateHandler(FPSLogger baru()); this.mScene = Adegan baru(); this.mScene.setBackground(ColorBackground baru(0, 0, 0)); this.mScrollDetector = SurfaceScrollDetector baru(ini); this.mClickDetector = ClickDetector baru(ini); this.mScene.setOnSceneTouchListener(ini); this.mScene.setTouchAreaBindingEnabled(benar); this.mScene.setOnSceneTouchListenerBindingEnabled(benar); BuatKotakMenu(); kembalikan ini.mScene; } @Override boolean publik onSceneTouchEvent(Adegan terakhir pScene, TouchEvent akhir pSceneTouchEvent) { this.mClickDetector.onTouchEvent(pSceneTouchEvent); ini.mScrollDetector.onTouchEvent(pSceneTouchEvent); kembali benar; } @Override public void onScroll(final ScrollDetector pScollDetector, final TouchEvent pTouchEvent, final float pDistanceX, final float pDistanceY) { //Nonaktifkan panah menu kiri dan kanan (padding 15px) if(mCamera.getMinX()<=15) menuleft. setVisible(salah); else menuleft.setVisible(benar); if(mCamera.getMinX()>mMaxX-15) menuright.setVisible(false); lain menuright.setVisible(true); //Kembalikan jika tujuan tercapai if ( ((mCurrentX - pDistanceX) < mMinX) ){ return; }else if((mCurrentX - pDistanceX) > mMaxX){ kembali; } //Pusatkan kamera ke titik saat ini this.mCamera.offsetCenter(-pDistanceX,0 ); mSaat IniX -= pJarakX; //Setel bilah gulir dengan kamera float tempX =mCamera.getCenterX()-CAMERA_WIDTH/2; // tambahkan bagian % ke posisi tempX+= (tempX/(mMaxX+CAMERA_WIDTH))*CAMERA_WIDTH; //atur posisi scrollBar.setPosition(tempX, scrollBar.getY()); //mengatur panah untuk kiri dan kanan menuright.setPosition(mCamera.getCenterX()+CAMERA_WIDTH/2-menuright.getWidth(),menuright.getY()); menuleft.setPosition(mCamera.getCenterX()-CAMERA_WIDTH/2,menuleft.getY()); //Karena Kamera dapat memiliki nilai X negatif, maka setel ke 0 if(this.mCamera.getMinX()<0){ this.mCamera.offsetCenter(0,0 ); mSaat IniX=0; } } @Override public void onClick(ClickDetector pClickDetector, TouchEvent pTouchEvent) { loadLevel(iItemClicked); }; // ________________________________________________ =========== // Metode // ==== ========== private void CreateMenuBoxes() { int spriteX = PADDING; int spriteY = PADDING; //penghitung item saat ini int iItem = 1; for (int x = 0; x < kolom.ukuran(); x++) { //Saat disentuh, simpan item yang diklik jika itu adalah klik dan bukan gulir. final int itemToLoad = iItem; Sprite sprite = Sprite baru(spriteX,spriteY,columns.get(x)){ public boolean onAreaTouched(Final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { iItemClicked = itemToLoad; kembali salah; } }; iItem++; this.mScene.attachChild(sprite); this.mScene.registerTouchArea(sprite); spriteX += 20 + PADDING+sprite.getWidth(); } mMaxX = spriteX - CAMERA_WIDTH; //mengatur ukuran scrollbar float scrollbarsize = CAMERA_WIDTH/((mMaxX+CAMERA_WIDTH)/CAMERA_WIDTH); scrollBar = Persegi Panjang baru(0,CAMERA_HEIGHT-20,ukuran scrollbar, 20); scrollBar.setColor(1,0,0); ini.mScene.attachChild(scrollBar); menuleft = Sprite baru(0,CAMERA_HEIGHT/2-mMenuLeftTextureRegion.getHeight()/2,mMenuLeftTextureRegion); menuright = Sprite baru(CAMERA_WIDTH-mMenuRightTextureRegion.getWidth(),CAMERA_HEIGHT/2-mMenuRightTextureRegion.getHeight()/2,mMenuRightTextureRegion); this.mScene.attachChild(menukanan); menuleft.setVisible(salah); this.mScene.attachChild(menukiri); } @Override public void onLoadComplete() {} //Di sinilah Anda memanggil pemuatan item. private void loadLevel(final int iLevel) { if (iLevel != -1) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MenuScrollerActivity.this, "Muat Item" + String.valueOf( iLevel), Toast.LENGTH_SHORT).show(); } }}以上所述就是本文的全部内容了,希望大家能够喜欢。