2014-11-16 3 views
0

У меня вопрос дизайна, поэтому я не начинаю с неправильного пути. Я планирую иметь спрайт, где он оживляет движение, и я хочу переместить этот спрайт (меняя позицию раз в секунду).Анимация спрайтов с использованием drawableAnmiation

Я заметил, что некоторые учебник говорить о том, игровой цикл ,, OnDraw на холсте, растровый ..etc

Однако, я имею в виду использование drawableAnimation где указать набор изображений для загрузки в XML и вызова начните с этого. Затем я могу просто рисовать позицию, требуемую каждую секунду (нет цикла, это больше похоже на прослушиватель, который вызывается каждую секунду из другого процесса).

Есть ли у вас проблема? Любая проблема с описанным выше способом

Спасибо

+0

Я не думаю, что это настоящий вопрос. Я имею в виду, что может быть проблема. Их могло быть много. DrawableAnimation - это неэффективная память, особенно для больших кадров кадра, больших размеров. DrawableAnimation заботится о цикле, о котором вы говорите. –

ответ

0

Drawable анимация требует фиксированного кадра анимации. Подумайте об этом, как флип-книга. Выбираемый должен быть весь размер вашего холста, и ваш спрайт должен быть предварительно обработан поверх прозрачного фона для достижения вашего эффекта. Это также потребует большого количества памяти текстур в зависимости от размера и количества кадров.

«Игровой цикл», как вы заявили, является тем, что Android уже предоставляет в некотором роде. Внутри стандартной настройки холста у вас есть «главная тема». Таким образом, с сущностью, подобной Handler, вы можете пометить кадры, если хотите.

т.е.

Handler handler; 
public void onCreate(Bundle bundle) { 
super.onCreate(bundle); 
handler = new Handler(); 
handler.post(new Runnable() { 
    public void run() { 
     boolean isLastFrame = drawFrame(); 
     if (!isLastFrame) { 
      handler.postDelayed(this, ONE_SECOND_MILLIS); 
     } 
    } 
}); 

Это не самый большой на самом деле тоже.

Вы также можете инкапсулировать свой спрайт внутри View или собственный пользовательский номер Drawable и внутри вашего метода onDraw(), вы бы обновили свой холст.

public void onDraw(Canvas canvas) { 
    // clear canvas 
    mPaint.setColor(Color.WHITE); 
    canvas.drawPaint(mPaint); 
    // Draw current 
    mPaint.setColor(Color.BLACK); 
    canvas.drawRect(rect, mPaint); 
} 

public void moveSprite() { 
    rect.offset(3, 3); 
    invalidate(); 
} 

Вы могли бы также, при использовании View, используйте ObjectAnimator перевести взгляд из положения (x1, y1) и (x2, y2).

public void moveTo() { 
    if (!moveNeeded) { 
    return; 
    } 
    View view = getMyView(); 
    view.animate().x(1).y(1).setListener(new Animator.AnimatorListener() { 
    public void onAnimationCancel(Animator a) { } 
    public void onAnimationStart(Animator a) { 
    } 
    public void onAnimationEnd(Animator a) { 
     moveTo(); 
    } 
    public void onAnimationRepeat(Animator a) { 
    } 
    }); 
} 
+0

Большое вам спасибо за подробный ответ. Тем не менее, я до сих пор не понял, почему плохо использовать drawableanimation. Согласно этой ссылке https://developer.android.com/guide/topics/graphics/drawable-animation.html, вы можете получить изображение и назначить привлекательная анимация. Это будет симулировать прогулку с помощью спрайтов. Затем я могу применить анимацию перевода, как в вашем коде выше. Это плохо? – Snake

+0

Это использование не плохой. Недостаточно контекста, чтобы дать окончательный ответ. Как я нашел, если у вас есть 100 кадров Drawable, то это может вызвать проблемы. Но если его цикл, который приостанавливается и перезапускается, кажется, что это прекрасно. Он может отбросить кадры, хотя –

+0

Тогда позвольте мне дать достаточно контекста. Извините, я не знал, что это недостаток информации. При ходьбе они будут танцевать с спрайтом. Поэтому я буду использовать 5 кадров для танцев и цикл. Для ходьбы это будет просто перевод анимации. Однако на экране будет много спрайтов ... Хорошо? – Snake

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