单滑动效果的实现
classe publique MenuScrollerActivity étend BaseGameActivity implémente IScrollDetectorListener, IOnSceneTouchListener, IClickDetectorListener { // ====================================== ======================= // Constantes // =================================================== ========= protégé statique int CAMERA_WIDTH = 480 ; int statique protégé CAMERA_HEIGHT = 320 ; int statique protégé FONT_SIZE = 24; protégé statique int PADDING = 50 ; protégé statique int MENUITEMS = 7; // ================================================= =========== // Champs // =================================================== ========= Scène privée mScene ; Caméra privée mCamera ; Police privée mFont ; privé BitmapTextureAtlas mFontTexture ; privé BitmapTextureAtlas mMenuTextureAtlas ; TextureRegion privée mMenuLeftTextureRegion ; TextureRegion privée mMenuRightTextureRegion ; menu Sprite privé à gauche ; droit de menu Sprite privé ; // Défilement privé SurfaceScrollDetector mScrollDetector ; ClickDetector privé mClickDetector ; flottant privé mMinX = 0 ; flottant privé mMaxX = 0 ; flottant privé mCurrentX = 0 ; private int iItemClicked = -1 ; barre de défilement rectangulaire privée ; private List<TextureRegion> columns = new ArrayList<TextureRegion>(); // ================================================= =========== // Constructeurs // =================================================== ========= // =================================================== ========= // Getter et Setter // =================================================== ========= // =================================================== ========= // Méthodes pour/depuis SuperClass/Interfaces // =================================================== ========= @Override public void onLoadResources() { // Chemins FontFactory.setAssetBasePath("font/"); BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); // Police 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); //Images pour le menu pour (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); colonnes.add(mMenuTextureRegion); } //Textures pour les flèches de menu 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 = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); final EngineOptions engineOptions = new EngineOptions (true, ScreenOrientation.LANDSCAPE, new FillResolutionPolicy(), this.mCamera); engineOptions.getTouchOptions().setRunOnUpdateThread(true); moteur final Engine = new Engine (engineOptions); moteur de retour ; } @Override public Scene onLoadScene() { this.mEngine.registerUpdateHandler(new FPSLogger()); this.mScene = new Scene(); this.mScene.setBackground(new ColorBackground(0, 0, 0)); this.mScrollDetector = nouveau SurfaceScrollDetector(this); this.mClickDetector = nouveau ClickDetector(this); this.mScene.setOnSceneTouchListener(this); this.mScene.setTouchAreaBindingEnabled(true); this.mScene.setOnSceneTouchListenerBindingEnabled(true); CreateMenuBoxes(); renvoie this.mScene ; } @Override public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) { this.mClickDetector.onTouchEvent(pSceneTouchEvent); this.mScrollDetector.onTouchEvent(pSceneTouchEvent); renvoie vrai ; } @Override public void onScroll(final ScrollDetector pScollDetector, final TouchEvent pTouchEvent, final float pDistanceX, final float pDistanceY) { //Désactivez les flèches de menu gauche et droite (remplissage de 15 px) if(mCamera.getMinX()<=15) menuleft. setVisible(faux); sinon menuleft.setVisible(true); if(mCamera.getMinX()>mMaxX-15) menuright.setVisible(false); sinon menuright.setVisible(true); //Retour si les fins sont atteintes if ( ((mCurrentX - pDistanceX) < mMinX) ){ return; }else if((mCurrentX - pDistanceX) > mMaxX){ return; } //Centrer la caméra au point actuel this.mCamera.offsetCenter(-pDistanceX,0 ); mCurrentX -= pDistanceX ; //Définit la barre de défilement avec le flotteur de la caméra tempX =mCamera.getCenterX()-CAMERA_WIDTH/2; // ajoute la partie % à la position tempX+= (tempX/(mMaxX+CAMERA_WIDTH))*CAMERA_WIDTH; //définit la position scrollBar.setPosition(tempX, scrollBar.getY()); //définit les flèches gauche et droite menuright.setPosition(mCamera.getCenterX()+CAMERA_WIDTH/2-menuright.getWidth(),menuright.getY()); menuleft.setPosition(mCamera.getCenterX()-CAMERA_WIDTH/2,menuleft.getY()); //Parce que la caméra peut avoir des valeurs X négatives, alors définissez-la sur 0 if(this.mCamera.getMinX()<0){ this.mCamera.offsetCenter(0,0 ); mCurrentX=0 ; } } @Override public void onClick(ClickDetector pClickDetector, TouchEvent pTouchEvent) {loadLevel(iItemClicked); } ; // ================================================= =========== // Méthodes // =================================================== ========= private void CreateMenuBoxes() { int spriteX = PADDING; int spriteY = REMPLISSAGE ; //compteur d'éléments actuel int iItem = 1; for (int x = 0; x < columns.size(); x++) { //Au toucher, enregistrez l'élément cliqué au cas où il s'agirait d'un clic et non d'un défilement. final int itemToLoad = iItem; Sprite sprite = new Sprite(spriteX,spriteY,columns.get(x)){ public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) { iItemClicked = itemToLoad; renvoie faux ; } } ; iItem++; this.mScene.attachChild(sprite); this.mScene.registerTouchArea(sprite); spriteX += 20 + PADDING+sprite.getWidth(); } mMaxX = spriteX - CAMÉRA_WIDTH ; //définit la taille de la barre de défilement float scrollbarsize = CAMERA_WIDTH/((mMaxX+CAMERA_WIDTH)/CAMERA_WIDTH); scrollBar = nouveau Rectangle(0,CAMERA_HEIGHT-20,scrollbarsize, 20); scrollBar.setColor(1,0,0); this.mScene.attachChild(scrollBar); menuleft = new Sprite(0,CAMERA_HEIGHT/2-mMenuLeftTextureRegion.getHeight()/2,mMenuLeftTextureRegion); menuright = new Sprite(CAMERA_WIDTH-mMenuRightTextureRegion.getWidth(),CAMERA_HEIGHT/2-mMenuRightTextureRegion.getHeight()/2,mMenuRightTextureRegion); this.mScene.attachChild(menuright); menuleft.setVisible(false); this.mScene.attachChild(menuleft); } @Override public void onLoadComplete() { } //C'est ici que vous appelez le chargement de l'élément. private void loadLevel(final int iLevel) { if (iLevel != -1) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MenuScrollerActivity.this, "Load Item" + String.valueOf( iLevel), Toast.LENGTH_SHORT).show(); iItemClicked = -1 } }); } }}以上所述就是本文的全部内容了,希望大家能够喜欢。