Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TiledLayer - рисует ли он за экраном? 
:(
    Опции темы
604
Дата 17.11.2006, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 15.4.2005

Репутация: нет
Всего: 1



Привет!
Возник такой вопрос! Если я создаю TiledLayer размером больше экрана телефона, то рисует ли он за пределами экрана?
PM MAIL   Вверх
W0LF
Дата 17.11.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Че-то не совсем вопрос понял... Как это - рисует за пределами экрана?


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
604
Дата 17.11.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 15.4.2005

Репутация: нет
Всего: 1



Всмысле имеется в виду... вот если например создаем new TiledLayer(15, 15, image, 20, 20), размер этого слоя получается больше размера физического экрана. Так вот потом при отрисовке этого слоя LayerManаger рисует этот слой целиком или только ту часть которая видна на экране?

Это сообщение отредактировал(а) 604 - 21.11.2006, 21:31
PM MAIL   Вверх
$tatic
Дата 23.11.2006, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: нет
Всего: 22



Согласно документации:
Цитата

Rendering a TiledLayer
A TiledLayer can be rendered by manually calling its paint method; it can also be rendered automatically using a LayerManager object. 
The paint method will attempt to render the entire TiledLayer subject to the clip region of the Graphics object; the upper left corner of the TiledLayer is rendered at its current (x,y) position relative to the Graphics object's origin. The rendered region may be controlled by setting the clip region of the Graphics object accordingly.

Смотрим кусок декомпилированного кода класса:
Код

    public final void paint(Graphics g)
    {
        if(g == null)
            throw new NullPointerException();
        if(visible)
        {
            int tileIndex = 0;
            if(updated)
            {
                int arrayLength = 0;
                for(int row = 0; row < cellMatrix.length; row++)
                {
                    int totalCols = cellMatrix[row].length;
                    for(int column = 0; column < totalCols; column++)
                    {
                        tileIndex = cellMatrix[row][column];
                        if(tileIndex != 0)
                            arrayLength++;
                    }

                }

                if(x_src == null || arrayLength > x_src.length)
                {
                    x_src = new int[arrayLength];
                    y_src = new int[arrayLength];
                    x_dest = new int[arrayLength];
                    y_dest = new int[arrayLength];
                }
                tileArrayLength = arrayLength;
                updated = false;
            }
            int ty = y;
            int arrayIndex = 0;
            for(int row = 0; row < cellMatrix.length;)
            {
                int tx = x;
                int totalCols = cellMatrix[row].length;
                for(int column = 0; column < totalCols;)
                {
                    tileIndex = cellMatrix[row][column];
                    if(tileIndex != 0)
                    {
                        if(tileIndex < 0)
                            tileIndex = getAnimatedTile(tileIndex);
                        x_src[arrayIndex] = tileSetX[tileIndex];
                        y_src[arrayIndex] = tileSetY[tileIndex];
                        x_dest[arrayIndex] = tx;
                        y_dest[arrayIndex] = ty;
                        arrayIndex++;
                    }
                    column++;
                    tx += cellWidth;
                }

                row++;
                ty += cellHeight;
            }

            drawTiledRegion(g, sourceImage, tileArrayLength, x_src, y_src, cellWidth, cellHeight, 0, x_dest, y_dest, 20);
        }
    }

    private native void drawTiledRegion(Graphics g, Image image, int i, int ai[], int ai1[], int j, int k, 
            int l, int ai2[], int ai3[], int i1);

PM MAIL   Вверх
604
Дата 23.11.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 15.4.2005

Репутация: нет
Всего: 1



Ээээ может я что то не понимаю? но судя по коду обходятся все клетки?!
PM MAIL   Вверх
$tatic
Дата 24.11.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: нет
Всего: 22



Да, ты прав, он все клетки рисует. Конечно от этого производительность падает. Но если хочешь, то можешь создать свой класс, наследованный от TiledLayer и переопределить в нем paint так, чтобы он вначале проверял видимость тайла, а потом только его прорисовывал.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1210 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.