2014-03-20 3 views
2

Я хочу, чтобы два объекта smoothely при касании.libgdx плавное движение прямоугольников

Вот мой код:

for(int i = 0; i <96; i++){ 
    Asstest.rect_pipe_down.y--); 
} 

Это должно переместить прямоугольник 96 пикселей вниз (SMOOTH)

Но это только близко не сглаживается ...

Что я сделал не так?

Если вы прикасаетесь, трубы должны закрываться, но не трудно, плавно, если они закрываются. Но следующий код, который они просто закрыть жесткий ...

Вот полный прикоснулся код:

if(Gdx.input.isTouched()){ 
     Assets.rect_pipe_down.y = 512 - 320/2; 
     Assets.rect_pipe_up.y = -320 + 320/2; 
     for (int i = 0; i < 96; i++){ 
      smoothTime = TimeUtils.millis(); 
      if(TimeUtils.millis() - smoothTime > 10) { 
       Assets.rect_pipe_down.y--; 
       Assets.rect_pipe_up.y++; 
       batch.begin(); 
        batch.draw(Assets.region_pipe_down, Assets.rect_pipe_down.x, Assets.rect_pipe_down.y); 
        batch.draw(Assets.region_pipe_up, Assets.rect_pipe_up.x, Assets.rect_pipe_up.y); 
       batch.end(); 
      } 
     } 
     closed = true; 
    } 
+0

Опубликуйте еще какой-нибудь код и хорошо объясните .. – Roadies

+0

Вы должны предоставить нам гораздо больше информации о вашей игре, прежде чем кто-нибудь сможет вам помочь. Пожалуйста, постарайтесь всегда предоставить как можно больше информации. Расскажите нам, что вы уже пробовали. Спасибо – Springrbua

+0

ОК я отредактирую за 30 минут – Tekkzz

ответ

0

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

Что вы можете сделать, это иметь переменную, которая сохраняется между кадрами, которая хранит, закрыты ли сейчас трубы, константа скорости и какое-то условие, чтобы сказать, когда они могут остановиться - возможно, когда они находятся на некотором заданном расстоянии от друг друга, не уверен, что вы хотите здесь. Во всяком случае, это то, что я буду использовать в моем примере.

Затем в методе render(), перед нанесением ничего, вы можете сделать это:

if (closing) { 
    Assets.rect_pipe_down.y -= CLOSE_SPEED * delta; 
    Assets.rect_pipe_up.y += CLOSE_SPEED * delta; 
    if (Assets.rect_pipe_down.y - Assets.rect_pipe_up.y < TARGET_DIST) { 
     Assets.rect_pipe_down.y = Assets.rect_pipe_up.y + TARGET_DIST; 
     closing = false; 
    } 
} 

Здесь closing переменная вы установите true, когда вы хотите, чтобы они начали закрывать, другие константы. Вы можете добавить еще несколько переменных/констант, если хотите убедиться, что они попадают на определенную высоту, независимую от частоты кадров.

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