2016-05-27 2 views
0

Вот моя проблема:Android Canvas сохраняет предыдущее состояние, когда объект движется

При визуализации объекта, который имеет скорость (т.е. она движется), последний кадр объекта обращается также, что означает, что вместо того, чтобы приятно движущейся анимации, я получаю объект, нарисованный несколько раз по его траектории движения.

Вот мой метод визуализации (в цикле игры):

private void render() { 
    //if the surface is NOT valid, exit rendering 
    if (!surfaceHolder.getSurface().isValid()){ 
     return; 
    } 
    //lock the canvas 
    canvas = surfaceHolder.lockCanvas(); 
    //draw all game objects to canvas (only 1 object atm) 
    wizard.render(canvas); 
    //unlock and post the canvas 
    surfaceHolder.unlockCanvasAndPost(canvas); 
} 

и мастер визуализации:

public void render(Canvas canvas) { 
    canvas.drawBitmap(spriteSheet, position.x, position.y, null); 
} 

Насколько я знаю, между каждой разблокировки и блокировки поверхности, его содержимое не сохраняется, что означает, что он полностью перерисовывается каждый раз, когда вызывается функция рендеринга:

«Содержимое поверхности никогда не сохраняется между unlockCanvas() и lockCanv as(), по этой причине, каждый пиксель в области поверхности должен быть записан ». ~ взято из документации

Так почему же это не происходит? Почему холст не перерисовывается и вместо этого сохраняет все кадры мастера?

Заранее благодарен!^_^

ответ

0

Попробуйте добавить:

public void render(Canvas canvas) { 
    canvas.drawBitmap(spriteSheet, position.x, position.y, null); 
    invalidate(); 
} 

и посмотреть, что происходит.

+0

Это не работает. Мастер не является представлением, это пользовательский класс I, поэтому метод invalidate не существует ... – Tirafesi

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