как управлять фоновым рендерингом? - PullRequest
0 голосов
/ 28 февраля 2012

Я хочу переместить фон с движущимся Бобом (персонажем игры Android), для этого я создаю имя динамического объекта Фон

    public static int BACKGROUND_MOVE=0;
  public static int BACKGROUND_FALL=1;
 public static final float BACKGROUND_MOVE_VELOCITY =3.5f;
 public static float BOB_WIDTH =10.0f;
 public static float BOB_HEIGHT =15.0f;
 public static long startTime = 0;
 public int state;
 public float stateTime;
public BackGround(float x, float y)
 {
    super(x, y, BOB_WIDTH, BOB_HEIGHT);
    state = BACKGROUND_MOVE;
    stateTime = 0;
    accel.set(0,-2);
    velocity.y=3.5f;//55

 }  

public void update (float deltaTime)
 {
    //velocity.add(World.gravity.x, World.gravity.y * deltaTime);
    velocity.add(accel.x * deltaTime,accel.y*deltaTime);
            position.add(velocity.x * deltaTime, velocity.y * deltaTime);

    if (velocity.y > 0 && state==Bob.BOB_STATE_HIT)//BOB_STATE_HIT is bob running //condition
       {
            if (state != BACKGROUND_MOVE)
            {
                state = BACKGROUND_MOVE;
                stateTime = 0;
            }
        }

    if (velocity.y > 0 && state != Bob.BOB_STATE_HIT)
         {
        if (state != BACKGROUND_FALL)
         {
            state = BACKGROUND_FALL;
            stateTime = 0;
         }
       }
  //        if (velocity.y < 0 && state == BOB_STATE_HIT)
 //       {
  //            if (state != BOB_STATE_JUMP) {
 //             state = BOB_STATE_JUMP;
//              stateTime = 0;
//          }
    //}

    //if (position.y < 0) position.x = World.WORLD_WIDTH;
    //if (position.x > World.WORLD_WIDTH) position.x = 0;
    stateTime += deltaTime;
   }
 public void move()
    {
    if(state==BACKGROUND_MOVE)
    {
    startTime=System.nanoTime()/1000000000; 
  //        state = BACKGROUND_MOVE;
    velocity.y = BACKGROUND_MOVE_VELOCITY;
    stateTime = 0;
    }
 }

аналогично объекту bob I amke в World class и создайте ArrayList Add Backgroung в этот массив, и во время рисования получите от arraylist и нарисуйте его ... но никакой эффект не показывает просто показ экрана и пересечение диапазона и показанного красного экрана ... пожалуйста, помогите ...

       /*---------------background cam------*/

      this.bcam = new OrthographicCamera(FRUSTUM_WIDTH,FRUSTUM_HEIGHT);
       this.bcam.position.set(FRUSTUM_WIDTH,FRUSTUM_HEIGHT, 0);
       this.batch = batch;

          public void renderBackground()
          {
    GLCommon gl = Gdx.gl;
    gl.glClearColor(1, 0, 0, 1);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    bcam.update();
    batch.setProjectionMatrix(bcam.combined);
    batch.disableBlending();
    batch.begin();
    if (world.objbackground.state ==BackGround.BACKGROUND_MOVE)
    batch.draw(Assets.mainbackgroundRegion, cam.position.x - FRUSTUM_WIDTH / 2,       cam.position.y - FRUSTUM_HEIGHT / 2, FRUSTUM_WIDTH, FRUSTUM_HEIGHT);
        //       else
        //       {
        //       batch.draw(Assets.touchbackgroundRegion, cam.position.x -
        //       FRUSTUM_WIDTH / 2, cam.position.y - FRUSTUM_HEIGHT / 2,
        //       FRUSTUM_WIDTH, FRUSTUM_HEIGHT);
        //       if (elapsed == 5)
        //              changebackground = 0;
        //       }
      batch.end();
   }

1 Ответ

1 голос
/ 04 марта 2012

Либо вы хотите переместить фон с Бобом (1), либо вы хотите иметь фиксированный фон (2):

(1): установить позицию фона на Боба (возможно, со смещением, вы можетесделайте это в функции обновления мира), выполните рендеринг с использованием batch.draw(......, background.position.x, background.position.y).

(2): отбросьте ваши сложные методы обновления в объекте BackGround и используйте метод рендеринга, как сейчас.

Но, честно говоря, ваши намерения и объяснения не очень ясны, попробуйте улучшить это!

...