2015-11-08 5 views
0

Я развиваю игру в AndEngine, и я хочу приложить спрайт к фонам параллакса (в моем главном меню) НО Я не хочу, чтобы спрайт повторялся (что и происходит в настоящее время).Andengine - Прикрепление спрайта к фонам параллакса все еще заставляет его повторять

Я пробовал это (ниже), который работает, но я использую спрайты в игре, поэтому, когда я вернусь в главное меню, спрайты будут перемещены (я попытался сбросить спрайты, но, похоже, не работает).

Sprite playerCar = new Sprite(playerX, playerY, 
      mResourceManager.mPlayerCarTextureRegion, 
      mVertexBufferObjectManager); 
    playerCar.setRotation(-15); 
    attachChild(playerCar); 

То, что я хочу сделать, это следующий:

Определить мой спрайт как обычно:

Sprite playerCar = new Sprite(playerX, playerY, 
      mResourceManager.mPlayerCarTextureRegion, 
      mVertexBufferObjectManager); 
    playerCar.setRotation(-15); 

Затем приложите его к моему фону:

ParallaxBackground menuParallaxBackground = new ParallaxBackground(0, 
      0, 0); 

    menuParallaxBackground.attachParallaxEntity(new ParallaxEntity(0, 
      new Sprite(0, SCREEN_HEIGHT 
        - mResourceManager.mParallaxLayerRoad.getHeight(), 
        mResourceManager.mParallaxLayerRoad, 
        mVertexBufferObjectManager))); 

    menuParallaxBackground.attachParallaxEntity(new ParallaxEntity(0, 
      playerCar)); 

Который также работает но машина продолжает повторяться, чего я не хочу.

Любая помощь будет оценена! Благодарю.

+1

Посмотрите на метод onManagedDraw классов параллакса, после чего вы увидите, почему каждый объект, прикрепленный к ParallaxEntity, повторяется! – sjkm

+0

Вы попробовали просто прикрепить его к фону просто с помощью менюParallaxBackground.attachChild()? Не проверял, возможно ли это, просто идея ... –

+0

@sjkm Ах да, цикл while в onDraw - 'while (currentMaxX

ответ

0

Проблема была вызвана методом onDraw в классе ParallaxEntity в классе ParallaxBackground. Там была петля вокруг, где спрайты рисуются, что продолжается, пока спрайты не заполняют ширину экрана. Я просто создал пользовательский класс и удалил цикл while, чтобы использовать его для своего главного меню.

ParallaxEntity OnDraw код перед:

public void onDraw(final GLState pGLState, final Camera pCamera, final float pParallaxValue) { 
     pGLState.pushModelViewGLMatrix(); 
     { 
      final float cameraWidth = pCamera.getWidth(); 
      final float shapeWidthScaled = this.mAreaShape.getWidthScaled(); 
      float baseOffset = (pParallaxValue * this.mParallaxFactor) % shapeWidthScaled; 

      while(baseOffset > 0) { 
       baseOffset -= shapeWidthScaled; 
      } 
      pGLState.translateModelViewGLMatrixf(baseOffset, 0, 0); 

      float currentMaxX = baseOffset; 

      do { 
       this.mAreaShape.onDraw(pGLState, pCamera); 
       pGLState.translateModelViewGLMatrixf(shapeWidthScaled, 0, 0); 
       currentMaxX += shapeWidthScaled; 
      } while(currentMaxX < cameraWidth); 
     } 
     pGLState.popModelViewGLMatrix(); 
    } 

мой код CustomParallaxEntity OnDraw после (обратите внимание на последнее время цикла удалены):

public void onDraw(final GLState pGLState, final Camera pCamera, 
      final float pParallaxValue) { 
     pGLState.pushModelViewGLMatrix(); 
     { 
      final float shapeWidthScaled = this.mAreaShape.getWidthScaled(); 
      float baseOffset = (pParallaxValue * this.mParallaxFactor) 
        % shapeWidthScaled; 

      while (baseOffset > 0) { 
       baseOffset -= shapeWidthScaled; 
      } 
      pGLState.translateModelViewGLMatrixf(baseOffset, 0, 0); 

      this.mAreaShape.onDraw(pGLState, pCamera); 
      pGLState.translateModelViewGLMatrixf(shapeWidthScaled, 0, 0); 
     } 
     pGLState.popModelViewGLMatrix(); 
    } 

Благодаря комментариям на мой вопрос, что помог мне выяснить решение.

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

  • Нет связанных вопросов^_^