Путаница по технике Canvas / OpenGl - PullRequest
0 голосов
/ 12 июля 2011

Я совершенно новичок в программировании для Android, выполняя Java для своих вычислительных уровней, но ничего сложного!

Я работаю над игрой, в которой объект падает на экран и должен быть отсортирован в соответствующий «ящик», когда он достигает дна. У меня есть вид поверхности, работающий с потоком и т. Д., Использующий методы рисования на холсте, однако я не могу на всю жизнь понять, как я смогу заставить падающий объект достигать скорости, на которой он будет представлять проблему пользователю.

Запуск потока с изменением 1 в направлении y приводит к ползанию объекта по экрану. Большие изменения в Y приводят к скачкообразной графике.

Будет ли OpenGL иметь какое-то значение или есть другие методы canvas, которые я могу реализовать?

Надеюсь, что это имеет смысл!

Заранее спасибо ---- Thread ------

public void run()
{
    Canvas canvas;
    while(running)
    {
        canvas = null;
        try{
        canvas = this.surfaceholder.lockCanvas();
        synchronized(surfaceholder)
        {
            gamepanel.Check();
            this.gamepanel.onDraw(canvas);

        }

        }finally
        {

            if(canvas != null)
            {
                surfaceholder.unlockCanvasAndPost(canvas);
            }
        }

    }
}

---- SurfaceView -------

protected void onDraw(Canvas canvas){
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.gamebackground), 0, 0, null);
SortItOut.sortitout.Letter.draw(canvas);
}

----- Буква ----- (Каждый объект представляет собой отдельную букву)

public static void draw(Canvas canvas)
{
y += 1;
canvas.drawBitmap(LetterObject, x, y, null);
}

Это те методы, которые я считаю актуальными (метод Check - просто проверить, достиг ли объект нижней части экрана).

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Вы должны загрузить все свои растровые изображения в конструкторе для SurfaceView, но не в onDraw ()

0 голосов
/ 12 июля 2011

Помимо проблемы с загрузкой растрового изображения, вы можете ускорить его падение, увеличив скорость изменения y.Если вы сделаете это слишком много, поле будет выглядеть скачкообразным, но я уверен, что вы могли бы избежать до 10 пиксельных изменений, прежде чем это произойдет (эксперимент).случай, если производительность замедляла вас.Я не думаю, что это так.Хотя я бы прекратил загрузку растрового изображения в методе onDraw и поместил бы его в onCreate или какой-либо конструктор.onDraw вызывается сотни раз, и это убивает ваше приложение.

...