菜单滑动效果的实现
MenuScrollerActivity ระดับสาธารณะขยาย BaseGameActivity ใช้ IScrollDetectorListener, IOnSceneTouchListener, IClickDetectorListener { // ================================== ======================= // ค่าคงที่ // ================================================== ========= ป้องกันคงที่ int CAMERA_WIDTH = 480; ป้องกันคงที่ int CAMERA_HEIGHT = 320; ป้องกันคงที่ int FONT_SIZE = 24; ป้องกันคงที่ int PADDING = 50; ป้องกันคง int MENUITEMS = 7; // ================================================ =========== // ฟิลด์ // ================================================== ========= ฉากส่วนตัว mScene; กล้องส่วนตัว mCamera; แบบอักษรส่วนตัว mFont; BitmapTextureAtlas mFontTexture ส่วนตัว; BitmapTextureAtlas ส่วนตัว mMenuTextureAtlas; TextureRegion ส่วนตัว mMenuLeftTextureRegion; TextureRegion ส่วนตัว mMenuRightTextureRegion; เมนูสไปรท์ส่วนตัวด้านซ้าย; เมนูสไปรท์ส่วนตัว // การเลื่อน SurfaceScrollDetector ส่วนตัว mScrollDetector; ClickDetector ส่วนตัว mClickDetector; โฟลตส่วนตัว mMinX = 0; โฟลตส่วนตัว mMaxX = 0; โฟลตส่วนตัว mCurrentX = 0; int ส่วนตัว iItemClicked = -1; scrollBar สี่เหลี่ยมผืนผ้าส่วนตัว; รายการส่วนตัว <TextureRegion> columns = new ArrayList<TextureRegion>(); // ================================================ =========== // ตัวสร้าง // - ================================================== ========= // Getter & Setter // - ================================================== ========= // วิธีการสำหรับ/จาก SuperClass/อินเทอร์เฟซ // ================================================== ========= @แทนที่โมฆะสาธารณะ onLoadResources() { // Paths FontFactory.setAssetBasePath("font/"); BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); // แบบอักษร this.mFontTexture = BitmapTextureAtlas ใหม่ (256, 256); this.mFont = FontFactory.createFromAsset(this.mFontTexture, นี่, "Plok.TTF", FONT_SIZE, จริง, Color.BLACK); นี้.mEngine.getTextureManager().loadTextures(this.mFontTexture); this.mEngine.getFontManager().loadFonts(this.mFont); // รูปภาพสำหรับเมนูสำหรับ (int i = 0; i < MENUITEMS; i++) { BitmapTextureAtlas mMenuBitmapTextureAtlas = new BitmapTextureAtlas(256,256, TextureOptions.BILINEAR_PREMULTIPLYALPHA); TextureRegion mMenuTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuBitmapTextureAtlas นี่คือ "เมนู"+i+".png", 0, 0); this.mEngine.getTextureManager().loadTexture(mMenuBitmapTextureAtlas); columns.add(mMenuTextureRegion); } // พื้นผิวสำหรับลูกศรเมนู this.mMenuTextureAtlas = BitmapTextureAtlas ใหม่ (128,128, TextureOptions.BILINEAR_PREMULTIPLYALPHA); this.mMenuLeftTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset (mMenuTextureAtlas นี่ "menu_left.png", 0, 0); this.mMenuRightTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mMenuTextureAtlas นี่ "menu_right.png",64, 0); นี้.mEngine.getTextureManager().loadTexture(mMenuTextureAtlas); } @แทนที่เครื่องยนต์สาธารณะ onLoadEngine() { this.mCamera = กล้องใหม่ (0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); สุดท้าย EngineOptions engineOptions = ใหม่ EngineOptions (จริง, ScreenOrientation.LANDSCAPE, ใหม่ FillResolutionPolicy (), this.mCamera); engineOptions.getTouchOptions().setRunOnUpdateThread(จริง); เครื่องยนต์สุดท้าย เครื่องยนต์ = เครื่องยนต์ใหม่ (engineOptions); เครื่องยนต์ส่งคืน } @ แทนที่ฉากสาธารณะ onLoadScene () { this.mEngine.registerUpdateHandler (FPSLogger ใหม่ ()); this.mScene = ฉากใหม่ (); this.mScene.setBackground (สีพื้นหลังใหม่ (0, 0, 0)); this.mScrollDetector = SurfaceScrollDetector ใหม่ (นี้); this.mClickDetector = ClickDetector ใหม่ (นี้); นี้.mScene.setOnSceneTouchListener (นี้); this.mScene.setTouchAreaBindingEnabled (จริง); this.mScene.setOnSceneTouchListenerBindingEnabled (จริง); CreateMenuBoxes(); กลับ this.mScene; } @แทนที่บูลีนสาธารณะ onSceneTouchEvent (ฉากสุดท้าย pScene, TouchEvent สุดท้าย pSceneTouchEvent) { this.mClickDetector.onTouchEvent (pSceneTouchEvent); นี้.mScrollDetector.onTouchEvent (pSceneTouchEvent); กลับเป็นจริง; } @แทนที่โมฆะสาธารณะ onScroll(สุดท้าย ScrollDetector pScollDetector, TouchEvent pTouchEvent สุดท้าย, pDistanceX ลอยสุดท้าย, pDistanceY ลอยสุดท้าย) { //ปิดการใช้งานลูกศรเมนูซ้ายและขวา (ช่องว่างภายใน 15px) if(mCamera.getMinX()<=15) เมนูซ้าย setVisible (เท็จ); อื่น menuleft.setVisible (จริง); ถ้า(mCamera.getMinX()>mMaxX-15) menuright.setVisible(false); เมนูอื่น setVisible (จริง); //ส่งคืนเมื่อถึงจุดสิ้นสุดถ้า ( ((mCurrentX - pDistanceX) < mMinX) ){ return; } อื่น if((mCurrentX - pDistanceX) > mMaxX){ กลับ; } // ตั้งกล้องตรงกลางไปยังจุดปัจจุบัน this.mCamera.offsetCenter(-pDistanceX,0 ); mCurrentX -= pDistanceX; //ตั้งค่าแถบเลื่อนด้วยกล้องลอย tempX =mCamera.getCenterX()-CAMERA_WIDTH/2; // เพิ่มส่วน % ให้กับตำแหน่ง tempX+= (tempX/(mMaxX+CAMERA_WIDTH))*CAMERA_WIDTH; //กำหนดตำแหน่ง scrollBar.setPosition(tempX, scrollBar.getY()); //ตั้งค่าลูกศรสำหรับเมนูซ้ายและขวา.setPosition(mCamera.getCenterX()+CAMERA_WIDTH/2-menuright.getWidth(),menuright.getY()); menuleft.setPosition(mCamera.getCenterX()-CAMERA_WIDTH/2,menuleft.getY()); //เนื่องจากกล้องสามารถมีค่าลบ X ได้ ดังนั้นให้ตั้งค่าเป็น 0 if(this.mCamera.getMinX()<0){ this.mCamera.offsetCenter(0,0 ); มปัจจุบันX=0; } } @แทนที่โมฆะสาธารณะ onClick (ClickDetector pClickDetector, TouchEvent pTouchEvent) { loadLevel (iItemClicked); - // ================================================ =========== // วิธีการ // ================================================== ========= โมฆะส่วนตัว CreateMenuBoxes () { int spriteX = PADDING; int spriteY = การเติม; //ตัวนับรายการปัจจุบัน int iItem = 1; for (int x = 0; x < columns.size(); x++) { //On Touch ให้บันทึกรายการที่คลิกในกรณีที่เป็นการคลิกไม่ใช่การเลื่อน int itemToLoad สุดท้าย = iItem; Sprite sprite = Sprite ใหม่ (spriteX, spriteY, columns.get (x)) { บูลีนสาธารณะบนAreaTouched (TouchEvent สุดท้าย pSceneTouchEvent, pTouchAreaLocalX โฟลตสุดท้าย, pTouchAreaLocalY โฟลตสุดท้าย) { iItemClicked = itemToLoad; กลับเท็จ; - ไอรายการ++; this.mScene.attachChild (สไปรท์); this.mScene.registerTouchArea (สไปรท์); spriteX += 20 + PADDING+sprite.getWidth(); } mMaxX = สไปรท์X - CAMERA_WIDTH; // กำหนดขนาดของ scrollbar float scrollbarsize = CAMERA_WIDTH/((mMaxX+CAMERA_WIDTH)/CAMERA_WIDTH); scrollBar = สี่เหลี่ยมผืนผ้าใหม่ (0,CAMERA_HEIGHT-20,ขนาดแถบเลื่อน, 20); scrollBar.setColor(1,0,0); this.mScene.attachChild(แถบเลื่อน); menuleft = สไปรท์ใหม่ (0,CAMERA_HEIGHT/2-mMenuLeftTextureRegion.getHeight()/2,mMenuLeftTextureRegion); menuright = สไปรท์ใหม่ (CAMERA_WIDTH-mMenuRightTextureRegion.getWidth(),CAMERA_HEIGHT/2-mMenuRightTextureRegion.getHeight()/2,mMenuRightTextureRegion); this.mScene.attachChild (เมนู); menuleft.setVisible(เท็จ); this.mScene.attachChild (เมนูซ้าย); } @Override public void onLoadComplete() { } //นี่คือที่ที่คุณเรียกการโหลดรายการ โมฆะส่วนตัว loadLevel (int iLevel สุดท้าย) { if (iLevel ! = -1) { runOnUiThread (Runnable ใหม่ () { @Override public void run () { Toast.makeText (MenuScrollerActivity.this, "โหลดรายการ" + String.valueOf ( iLevel), Toast.LENGTH_SHORT).show(); iItemClicked = -1; -以上所述就是本文的全部内容了,希望大家能够喜欢。