2012-09-06 2 views
0

У меня проблемы с моим селектором уровня. Я использую код, который я нашел в учебнике на этом форуме, но он не работает правильно.Создание прокручиваемого селектора уровней (AndEngine)

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

Затем, когда пользователь нажимает кнопку «Назад», я вернул камеру в исходное положение, сохранив положение до того, как я уйду, а затем верну его обратно с помощью camer.setCenter (x, y);

После того, как пользователь вернется в сцену селектора ливней, он не волнуется правильно. Когда пользователь прокручивает его, он прокручивается с экрана и не работает так, как он выглядит.

Вот мой код. Если у кого-то есть лучший способ, ПОЖАЛУЙСТА, не стесняйтесь делиться со мной.

@Override 
      public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) { 

        // TODO Auto-generated method stub 
        clickDetector.onTouchEvent(pSceneTouchEvent); 
        surfaceScrollDetector.onTouchEvent(pSceneTouchEvent); 

      return true; 
      } 









        @Override 
        public void onScrollStarted(ScrollDetector pScollDetector, 
            int pPointerID, float pDistanceX, float pDistanceY) { 
          // TODO Auto-generated method stub 
       distanceX = 0; 

        } 




        @Override 
        public void onScroll(ScrollDetector pScollDetector, int pPointerID, 
            float pDistanceX, float pDistanceY) { 
          // TODO Auto-generated method stub 

          camera.offsetCenter(-pDistanceX, 0); 

       distanceX += pDistanceX; 
        } 




        @Override 
        public void onScrollFinished(ScrollDetector pScollDetector, 
            int pPointerID, float pDistanceX, float pDistanceY) { 
          if ((distanceX > TURN_PAGE_DISTANCE) && (page > 0)) 
       { 

         page--; 
         camera.offsetCenter(distanceX - CAMERA_WIDTH, 0); 
       } 
       else if ((distanceX < -TURN_PAGE_DISTANCE) && (page < LEVEL_PAGES - 1)) 
       { 

         page++; 
         camera.offsetCenter(distanceX + CAMERA_WIDTH, 0); 
       } 
       else 
       { 

         camera.offsetCenter(distanceX, 0); 
       } 

        } 




        @Override 
        public void onClick(ClickDetector pClickDetector, int pPointerID, 
            float pSceneX, float pSceneY) { 
          //loadLeve(levelClicked); 
        } 

        private void createHUD() 
        { 
          // 不用考虑层 
          hud = new HUD(); 
          Rectangle hudBox = new Rectangle(20, 700, 80, 80, getVertexBufferObjectManager()) 
          { 
            @Override 
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, 
                float pTouchAreaLocalY) 
            { 
              // TODO Auto-generated method stub 
              if (pSceneTouchEvent.isActionUp()) 
              { 
                runOnUiThread(new Runnable() 
                { 
                  @Override 
                  public void run() 
                  { 
                    // TODO Auto-generated method stub 
                    Toast.makeText(Menu.this, "BACK", Toast.LENGTH_SHORT).show(); 
                  } 
                }); 
              } 

              return true; 
            } 
          }; 
          hudBox.setColor(Color.RED); 
          hud.attachChild(hudBox); 
          hud.registerTouchArea(hudBox); 
          camera.setHUD(hud); 
        } 

    @Override 
    public boolean onKeyDown(final int pKeyCode, final KeyEvent pEvent) { 
        if (pKeyCode == KeyEvent.KEYCODE_BACK 
          && pEvent.getAction() == KeyEvent.ACTION_DOWN 
          ) { 


            if(level_scene){ 
             level_scene = false; 
             camera.setCenter(camera_x, camera_y); 
            mEngine.setScene(MainMenuScene); 
            }else{ 
              finish(); 
            } 
            return true; 

          } 
           return super.onKeyDown(pKeyCode, pEvent); 




    } 

    private void createLevelBoxes() 
    { 


      // 计算行间距 
      int spaceBetweenRaws = (CAMERA_HEIGHT/LEVEL_ROWS_PER_SCREEN) - LEVEL_PADDING; 
      // 计算列间距 
      int spaceBetweenColumns = (CAMERA_WIDTH/LEVEL_COLUMNS_PER_SCREEN) - LEVEL_PADDING; 

      int level = 0; 

      int boxX = LEVEL_PADDING; 
      int boxY = LEVEL_PADDING; 

      for (int i=0; i<LEVEL_PAGES; i++) 
      { 
        int startX = i * CAMERA_WIDTH; 

        for (int j=0; j<LEVEL_ROWS_PER_SCREEN; j++) 
        { 
          for (int k=0; k<LEVEL_COLUMNS_PER_SCREEN; k++) 
          { 
            final int levelToLoad = level; 
           box = new Sprite(startX + boxX, boxY, 90,70,this.levelIcon,this.getVertexBufferObjectManager()) 
            { 
              @Override 
              public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, 
                  float pTouchAreaLocalY) 
              { 

                // TODO Auto-generated method stub 

                  levelClicked = levelToLoad; 
                  if(levelClicked <= maxLevelReached){ 

                   Intent intent = new Intent(Menu.this, GameLevel.class); 

                  intent.putExtra("level", levelClicked); 
                  startActivity(intent); 
                  woodClick.play(); 
                  } 
                return false; 
              } 
            }; 


            if (level <= maxLevelReached) 
            { 

            } 
            else 
            { 
             box.setColor(0.4117647f, 0.4117647f,0.4117647f);  
            } 

            levelScene.attachChild(box); 
            levelScene.registerTouchArea(box); 
            int textOffX = 0; 
            if (level < 10) 
            { 
              textOffX = 28; 
            } 
            else 
            { 
              textOffX = 20; 
            } 
            box.attachChild(new Text(textOffX, 20, font, String.valueOf(level + 1),this.getVertexBufferObjectManager())); 


            level++; 
            boxX += spaceBetweenColumns + LEVEL_PADDING; 
            if (level > LEVELS) 
            { 
              break; 
            } 
          } 
          if (level > LEVELS) 
          { 
            break; 
          } 


          boxY += spaceBetweenRaws + LEVEL_PADDING; 
          boxX = LEVEL_PADDING; 
        } 

        boxY = LEVEL_PADDING; 

      } 
    } 

ответ

1

Я думаю, что когда пользователь нажимает клавишу «назад», вам необходимо снова настроить рамки обзора камеры на текущую сцену.

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