2012-03-08 2 views
1

Должны ли все объекты View перерисовывать каждую процедуру onDraw()?Все игры для Android используют один холст?

Я исхожу из флэш-фона, поэтому моя первоначальная мысль заключалась в том, чтобы нарисовать статические фоновые изображения на одном слое/холсте, а затем создать еще один слой поверх этого, чтобы обрабатывать более активные анимации, но это не кажется очень практично настраивать. Я считаю, что мой ход мысли позади View.onDraw() в Android здесь ошибочен, и о чем я не должен беспокоиться?

Редактировать: Чтобы подробнее описать, что я пытаюсь понять с помощью концепции onDraw() - Есть ли способ использовать несколько холстов на SurfaceView/View, которые будут действовать как слои, поэтому я могу вручную нарисовать на каждом отдельном холсте (чтобы свести к минимуму то, что нужно «перерисовать») без необходимости «перерисовывать» графику на других холстах, или SurfaceView/View's onDraw() абсолютно необходимо для обновления любых визуальных изменений (в этом случае все «перерисовывается» на экране)?

ответ

1

В: Должны ли все объекты View перерисовывать каждую процедуру onDraw()?

A: Нет - не обязательно

ТАКЖЕ: обязательно посмотрите на SurfaceViews:

http://developer.android.com/reference/android/view/SurfaceView.html

+0

Спасибо, Пол, это похоже на то направление, в котором я нуждался. Однако, пройдя через [этот учебник] (http://edu4java.com/androidgame/androidgame4.html), который включает SurfaceView, он все еще поднимает некоторые вопросы, поскольку похоже, что они используют один onDraw() для SurfaceView для вызова других объектов 'onDraw() и эффективно перерисовывать все одновременно. Является ли это обычной процедурой «обновления» графики приложения или есть способ иметь несколько «слоистых» поверхностей, которые можно рисовать отдельно? –

0

ну, может быть, никогда не все но Canvas можно считать Scene. Я использую класс Toon, содержащий координаты X, Y, Rect hitbox и Drawable. Этот класс Toon также имеет метод:

public draw(Canvas c) { 
    mDrawable.setBounds(mHitBox); 
    mDrawable.draw(c); 
} 

Затем в методе onDraw(Canvas c) в цикле игры, я просто перебрать все мои Toon объектов и вызвать метод draw(c) на них. Старайтесь не манипулировать объектами в onDraw, они должны идеально только.