2012-02-28 3 views
-1

나는 내가 세계 클래스의 객체를 amke와 ArrayList에 그 ArrayList에로 backgroung에 추가하게 밥을백그라운드 렌더링을 어떻게 관리합니까?

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; 
    } 
} 

유사한 동적 오브젝트 이름의 배경을 그것을 위해 이동 밥 (안드로이드 게임 캐릭터)와 배경을 이동하려면 및 도면의 시간에 하나 당신이를 이동할

 /*---------------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

.. 사람이 도와주세요 ... ArrayList를에서 얻고 그립니다 ...하지만 어떤 영향 쇼는 단순히 쇼를 선별하지 않고 표시된 rangeand 빨간색 화면을 교차 배경을 Bob (1)으로 설정하거나 고정 된 배경 (2)으로 설정하려는 경우

(1) : 배경의 위치를 ​​Bob의 것으로 설정하십시오 (아마도 오프셋을 사용하여 세계의 업데이트 기능에서 할 수 있습니다). batch.draw(......, background.position.x, background.position.y)을 사용하여 렌더링하십시오.

(2) : BackGround 개체에서 복잡한 업데이트 메서드를 버리고 지금처럼 렌더링 메서드를 사용하십시오.

솔직히 말해서, 의도와 설명이 명확하지 않은 경우 개선을 시도하십시오!

관련 문제