Правила: заголовок темы должен кратко и понятно отражать ее суть, нельзя писать заглавными буквами. Сообщение, ник, аватар не должны выделяться своими размерами или стилем написания от остальных, быть читабельными, написаны литературно и достаточно грамотно.Это не все правила а их часть, в разделе правила предоставлены полный список правил сайта и форума.
Суббота, 30 Ноября 2024, 00:43:07Приветствую Вас Гость
Главная | Список форумов | Регистрация | Вход
[ Новые сообщения · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: bogdan-G  
Микростатьи и хитрости J2ME
bogdan-GДата: Воскресенье, 13 Февраля 2011, 21:59:17 | Сообщение # 1
Самый главный на сайте!
Группа: Администраторы
Сообщений: 620
Награды: 1
Репутация: 578
Статус: Offline
Перекопирование темы:

aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(26.02.2010 / 20:37)
Давайте сюда выкладывать маленькие статьи, хитрости, секреты по J2ME. Коментировать лучше в этой теме Java программирование
Изм. web_demon (08.07 /20:35) (3) aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(26.02.2010 / 20:39)
Тернарный оператор
? и : - это тернарный оператор, очень удобная штука, если умело пользоваться. Смысл в том, что слева от знака вопроса стоит булево выражение. Если оно верно, то весь оператор равен тому, что между знаком вопроса и двоеточием, если нет - то тому, что справа от двоеточия. То есть, например, строчка var = a < 5 ? 100 : 200; присваивает переменной var значение 100, если a меньше 5, и 200 во всех остальных случаях
Изм. aNNiMON (14.04 /18:25) (1) aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(26.02.2010 / 20:43)
Пауза
Паузу можно осуществить вот такими кодами:
1:
Thread.currentThread().sleep(5L);

2:
long lastTime = System.currentTimeMillis ();
int dTime=0;
while (dTime<5000) {
long thisTime = System.currentTimeMillis ();
dTime = (int)(thisTime-lastTime);

3.
display.wait(5L);

Если знаете еще методы, пишите в личку. Я добавлю в этот пост. aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(26.02.2010 / 20:49)
Random
Получить случайное число от 0 до 255:
Random random = new Random();
red = (random.nextInt() >>> 1) % 256;

Метод получения случайных чисел от min до max:
public static int random(int min, int max) {
return min + ((rnd.nextInt() >>> 1)%(max-min));
}

Разложить число вида 0xXXXXXXXX на XX,XX,XX,XX
p = 0x1155AAFF;
a1 = (p >> 24) & 0xff;//0x11
a2 = (p >> 16) & 0xff;//0x55
a3 = (p >> 8 ) & 0xff;//0xAA
a4 = p & 0xff;//0xFF

И обратно:
tmp = (a1 << 24) | (a2 << 16) | (a3 << 8 ) | a4;
Изм. aNNiMON (26.02 /20:51) (1) aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(26.02.2010 / 20:52)
FPS
//------------
int iFps, iActFps, iTimeToCountFps = 0;
long lastTime;

long thisTime = System.currentTimeMillis (); // текущее время
int dTime = (int)(thisTime-lastTime); // время, прошедшее с прошлого кадра
lastTime = thisTime;

iTimeToCountFps += dTime;
iFps++;
if (iTimeToCountFps >= 1000) // если набралось 1 секунда - обновляем счетчик
{
iTimeToCountFps = 0;
iActFps = iFps;
iFps = 0;
}
//------------

Изм. aNNiMON (26.02 /20:53) (1) aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(27.02.2010 / 11:19)
Коды клавиш
Sony Ericsson
JOY_UP -1
JOY_DOWN -2
JOY_LEFT -3
JOY_RIGHT -4
JOY_FIRE -5
LSOFT -6
RSOFT -7
C -8
VOL+ -36
VOL- -37
FOCUS -25
CAM -26

Обработка событий джойстика на всех телефонах
public void keyPressed(int key) {
int ga = getGameAction(key);
if(ga==FIRE && key!=KEY_NUM5) {/*нажат центр джоя*/}
if(ga==UP && key!=KEY_NUM2) {/*нажат JOY_UP*/}
if(ga==DOWN && key!=KEY_NUM8) {/*нажат JOY_DOWN*/}
if(ga==LEFT && key!=KEY_NUM4) {/*нажат JOY_LEFT*/}
if(ga==RIGHT && key!=KEY_NUM6) {/*нажат JOY_RIGHT*/}
} P@bloid [Off] пост | отв | цит

(27.02.2010 / 11:24)
Эффект "double brace".
Используется для простой инициализации таких вещей как списки, Choice и подобных.
Vector v=new Vector(){{
append("One");
append("Two");
append("Three");
}}

Работает только с классвми, не имеющими параметра final.
Изм. P@bloid (27.02 /11:26) (2) P@bloid [Off] пост | отв | цит

(27.02.2010 / 11:33)
3 вида инициализаторов.

public class Test
{
static
{
/*Инициализатор класса, вызывается 1 раз для класса. Вызывается самым первым.
Служит для инициализации статических переменных*/
}

{
/*Инициализатор обьекта. Вызывается для каждого обьекта перед конструктором*/
}

Test()
{
/*Конструктор, вызывается самым последним*/
}
} aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(22.03.2010 / 17:48)
Сокращение записи boolean переменных

есть переменная: boolean value;
Сравнение:
Код
if(value==true) {/*some operators*/}
else {/*some operators*/}

Можно записать в сокращенном виде:
if(value) {/*some operators*/}
else {/*some operators*/}

Флажок (Мигалка):
Допустим при определенном действии нам нужно поменять значение булевой переменной на обратное.
Код
if(value==true) value=false;
else value=true;

Можно записать гораздо коротким способом:
Код
value=!value;

Оператор ! это отрицание. То есть если нам нужно написать if(value==false) {}, то можно записать это так: if(!value).
Надеюсь объяснил понятно.
Заменяйте теперь все
value==true на value, и
value==false на !value.

aNNiMON (SV!) [Off] отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(14.04.2010 / 18:49)
Двойная буфферизация
Использование двойной буфферизации бывает очень полезным и даже необходимым при создании игр или приложений, так как исключает мигание. К тому же становится доступным множество полезных функций, такие как - возможность создания скриншотов и поворот экрана. Единственный недостаток - чуть больше используется память, потому что при двойной буфферизации вся графика выводится на объект Image, а потом уже на экран. Итак, чтобы рисовать в Image необходимо:
1. Создать объект Image, размером с экран. Это делается так: Image I = Image.createImage(width, height); где width - ширина экрана, height - высота.
2. Получить из этого Image объект Graphics, с помощью которого и будем рисовать: Graphics G = I.getGraphics();
Всё, теперь можно рисовать. G.setColor(0); G.fillRect(0,0,width,height); - зарисует наш Image чёрным цветом.
Вот пример реализации класса с двойной буфферизацией.
import javax.microedition.lcdui.*;

public class Canv extends Canvas {
private Image I;
private Graphics G;
private int width, height;

public Canv() {
setFullScreenMode(true);
I = Image.createImage(width=getWidth(), height=getHeight());
G = I.getGraphics();
}

public void paint(Graphics g) {
doubleBufferedPaint(G);
g.drawImage(I,width/2,height/2,3);
}

public void doubleBufferedPaint(Graphics g) {
g.setColor(0);
g.fillRect(0,0,width,height);
g.setColor(0x00FF00);
g.drawString("by aNNiMON", width/2, 20, 17);
}
}

Поворот экрана
Поворот экрана можно осуществить только при двойной буфферизации. То есть тогда, когда мы все рисуем не в Graphics, а в Image.
Допустим мы рисуем на Image img, и хотим повернуть экран на 180 градусов, и сохранить повернутое в Image cnv, чтобы затем вывести.
Вот код переворота:
Image cnv = Image.createImage(img, 0, 0, img.getWidth(), img.getHeight(), Sprite.TRANS_ROT180);

Другой вариант потребляет меньше памяти, так как рисует сразу же на Graphics:
g.drawRegion(img, 0, 0, img.getWidth(), img.getHeight(), Sprite.TRANS_ROT180, 0, 0, 20);


админ сайта
----------------------------------
если помог + в репу!

 
bogdan-GДата: Воскресенье, 13 Февраля 2011, 22:10:59 | Сообщение # 2
Самый главный на сайте!
Группа: Администраторы
Сообщений: 620
Награды: 1
Репутация: 578
Статус: Offline
Zvers [Off] пост | отв | цит
Создатель игры века

(5.06.2010 / 09:57)
Выражение
int p = 56;
boolean a = p < 50 ? true : false;

можно заменить более простым способом
boolean a = p < 50;

Изм. iFone (26.08 /07:43) (1) AlexeyW (FMod) [Off] пост | отв | цит

(5.06.2010 / 18:08)
Перевод числа из десятичного в шестнадцатеричное:
String hex = new String(Integer.toHexString(int dec));

Изм. iFone (26.08 /07:42) (1) LPzhelud (Adm) [Off] пост | отв | цит
I'm here... In the shadows...

(5.06.2010 / 18:41)
Если у вас есть тред, выполняющийся непрерывно, не забудьте в конце его цикла добавить задержку хотя бы на 1 милисекунду, в противном случае на некоторых телефонах(в т.ч. и на СЕ) основной поток будет ограничиваться процессорным временем, что чревато торможением вашей программы Zvers [Off] пост | отв | цит
Создатель игры века

(20.06.2010 / 13:04)
Выражения
a = 5
b = 5
c = 5
можно заменить одним более простым
a = b = c = 5
Изм. iFone (26.08 /14:34) (3) Zvers [Off] пост | отв | цит
Создатель игры века

(20.06.2010 / 13:15)
Операции & (Логическое И - Конъюнкция)

Возьмём числа 34 и 27.
34 в двоичной - 100010
27 в двоичной - 011011

34 & 27:
по табл.
0 1 1 0
1 0 1 0
0 0 1 0

Правило: Если в обоих соответствующих битах есть хотя бы один ноль, то и результат будет нулем.

100010
011011
000010

000010 в десятичной 2.

34 & 27 = 2
Изм. aNNiMON (20.06 /14:01) (4) Zvers [Off] пост | отв | цит
Создатель игры века

(20.06.2010 / 13:28)
Операции | (Логическое ИЛИ - Дизъюнкция)

Возьмём числа 34 и 27.
34 в двоичной - 100010
27 в двоичной - 011011

34 | 27:
по табл.
0 1 1 0
1 0 1 0
1 1 1 0

Правило: Если в обоих соответствующих битах есть хотя бы одна единица, то и результат будет единицей.

100010
011011
111011

111011 в десятичной 59.

34 | 27 = 59
Изм. aNNiMON (20.06 /13:59) (1) Zvers [Off] пост | отв | цит
Создатель игры века

(20.06.2010 / 13:34)
Операции ^ (Логическое исключающее ИЛИ - XOR)

Возьмём числа 34 и 27.
34 в двоичной - 100010
27 в двоичной - 011011

34 ^ 27:
по табл.
0 1 1 0
1 0 1 0
1 1 0 0

Правило: Если в обоих соответствующих битах есть различия, то результат - единица, если же совпадают - ноль.

100010
011011
111001

111001 в десятичной 57.

34 ^ 27 = 57
Изм. aNNiMON (20.06 /14:04) (1) Zvers [Off] пост | отв | цит
Создатель игры века

(20.06.2010 / 13:37)
Операции ~

Возьмём число 34.
34 в двоичной - 100010

~34:
по табл.
0 1 1 0
1 0 0 1

100010
011101

011101 в десятичной 29.

~34 = 29 Zvers [Off] пост | отв | цит
Создатель игры века

(20.06.2010 / 13:41)
Операции >>

Возьмём число 34.
34 в двоичной - 100010

34 >> 3:
Убираем последние 3 бита, добавляем 3 спереди со значениями 1

100010
111100

111100 в десятичной 60.

34 >> 3 = 60 Zvers [Off] пост | отв | цит
Создатель игры века

(20.06.2010 / 13:44)
Операции <<

Возьмём число 34.
34 в двоичной - 100010

34 << 3:
Убираем передние 3 бита, добавляем 3 сзади со значениями 1

100010
010111

010111 в десятичной 24.

34 << 3 = 24

web_demon (SV!) [On] пост | отв | цит

(20.06.2010 / 14:01)
Поместил почти все статьи в вики
http://annimon.z83.ru/wikimobile/?id=mobileprograming:j2me Король@ [Off] пост | отв | цит

(21.06.2010 / 00:56)
Zvers, на твой пост (20.06.2010 / 13:34) отвечу, Немного дополню. Операция XOR является обратной.
Если
A ^ B = C
то
C ^ B будет равно A также как и C ^ A будет равно B. Это свойство можно использовать для создания шифров. Король@ [Off] пост | отв | цит

(1.07.2010 / 10:16)
Простой способ "правильного" округления дробей до целого:

Math.floor(decimal + 0.5);

Изм. iFone (26.08 /07:44) (1)

Использование векторов (Vector)
Допустим перед нами лежит задача - во введенной пользователем строке, занести все слова в массив. Казалось, что может быть проще - создал массив, и записываешь в него все буквы, пока не встретится пробел. Но не тут то было. Ведь заведомо неизвестно, сколько будет слов в строке, а значит мы не знаем какой размерности создавать массив. Конечно можно исхитриться, и сначала подсчитать количество пробелов, а потом создать массив размерностью num_of_spaces + 1. Но это много лишнего и ненужного кода. Вот тут то на помощь нам и приходит вектор.
Вектор, это некий контейнер для любых объектов. От массива он отличается во-первых тем, что не имеет типа. То есть в него можно положить как числа, строки, так и классы или любые другие объекты. Вторым отличием является его безразмерность, то есть не нужно заранее указывать размер вектора.
Чтобы использовать вектор, нужно импортировать класс java.util.Vector;
После этого можно инициализировать вектор. Делается это также, как и в случае с классами:
Vector v = new Vector();
Всё. После этого можно использовать наш вектор в необходимых целях.
Чтобы добавить в него что-то, используем метод: v.addElement(Object o);
Чтобы извлечь, используем метод: v.elementAt(int num);
Но к нему я вернусь позже.
Итак, перед нами задача - положить слова из строки в массив.
public String[] getWords(String text) {
Vector v = new Vector();
String temp = "";//промежуточная строка, будет собирать слово
int len = text.length();
for(int i = 0; i < len; i++) {
int ch = text.charAt(i);//это наш символ в тексте
if((ch == ' ') && // если встретился пробел
(temp.length() > 0)) { //и в промежуточной строке есть слово
v.addElement(text);// то заносим его в вектор
temp = ""; // и делаем строку пустой
} else temp = temp + String.valueOf((char) ch); // если не пробел, то добавляем его к слову
}
// Добавляем последнее слово
if (temp.length() > 0) v.addElement(text);
/* Вот теперь в наш вектор
помещены все слова,
но, поскольку наша задача вывести массив,
то воспользуемся одной хорошей функцией */
int size = v.size();//мы знаем сколько элементов в векторе
String[] out = new String[size]; // значит без труда создаем массив
v.copyInto(out); // и перегоняем содержимое вектора в массив
// Теперь всё что остается это
return out;
}

Вот и всё. Здесь нет ничего сложного. Но один момент мы всё же не разобрали - как обстоят дела с получением объекта из вектора.
На секунду представим, что про метод copyInto мы ничего не знаем, поэтому переведем данные вручную:
for (int i = 0; i < size; i++) {
out[i] = (String) v.elementAt(i);
}
Объясню зачем нужно это "(String)". Всё дело в том, что метод elementAt(int) возвращает объект, а не тот тип, который был положен. Поэтому без преобразования здесь не обойтись. Если мы ложили int, то нужно получать его так: int d = (int) v.elementAt(i);
Более подробно о том или ином методе класса Vector, можно почитать в доках

aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(11.08.2010 / 15:01)
Описалово методов
opisalovo_metodov.zip (8.83 кб.) Скачано 44 раз(а) ShadowPrince [Off] пост | отв | цит
Bullet For My Valentine Fan

(13.08.2010 / 01:10)
Простой метод анимации нажатия софт клавиш.
Для начала обьявляем 3 булевых переменных, пусть это будут
private boolean lsp, rsp, csp;
.
Их true будет обозначать нажатость клавиши.
Рисуем.
g.setColor(0);
if (lsp) g.setColor(0xff0000)
g.drawString("Left Soft Key", 0, h, g.BOTTOM|g.LEFT);

И так для каждого софта.
Вся фишка в том, что все действия выполняются в методе keyReleased():
public void keyPressed(int keyCode){
if (keyCode==-6) lsp = true;
if (keyCode==-7) rsp = true;
if (keyCode==-5) csp = true;
}
public void keyReleased(int keyCode){
if (keyCode==-6){ lsp = false;
/*Действия*/}
if (keyCode==-7) {rsp = false;
/*Действия*/}
if (keyCode==-5) {csp = false;
/*Действия*/
}
}

Огромный плюс метода - не нужно лопатить всю прогу, а только добавить рисовку и переменные, а также поменять методы местами.

© ShadowPrince aleksey [Off] пост | отв | цит

(13.08.2010 / 09:29)
ShadowPrince (13.08.2010/01:10)
Простой метод анимации нажатия софт клавиш.Для начала обьявляем 3 булевых переменных, пусть это будут
Лучше вместо трёх булевых одну integer переменную. Например левый софт, если переменная равна 1, правый - 2 и т.д.
А в методе keyReleased приравнять эту переменную например к нулю и тогда сбросятся сразу все клавиши и не надо будет писать тонны кода LPzhelud (Adm) [Off] пост | отв | цит
I'm here... In the shadows...

(13.08.2010 / 09:44)
aleksey (13.08.2010/09:29)
Лучше вместо трёх булевых одну integer переменную. Например левый софт, если переменная равна 1, правый - 2 и т.д.А в методе keyReleased приравнять эту переменную например к нулю и тогда сбросятся сра
тогда уж лучше байт переменную и оперировать с флагами. На самом деле непонята полезность кода, приведенного выше. Вероятно, автор только узнал о keyReleased. Но вообще то, читаем последнее предложение первого поста LPzhelud (Adm) [Off] пост | отв | цит
I'm here... In the shadows...

(21.08.2010 / 17:10)
обмен значений между переменными без использования третьей:
a = a + b;
b = a - b;
b = a - b;

Изм. LPzhelud (21.08 /17:11) (1) aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(21.08.2010 / 18:00)
LPzhelud, Знаю этот способ, но он может привести к переполнению стека при работе с большими числами.

LPzhelud (Adm) [Off] пост | отв | цит
I'm here... In the shadows...

(21.08.2010 / 18:30)
aNNiMON, однако мы предпологаем, что числа настолько большие не будут использоваться) dejqitz [Off] пост | отв | цит

(24.08.2010 / 20:38)
Описание классов, методов и интерфейсов J2ME в понятной форме.

* Если есть опечатки, неточности, а также если вы хотите расширить данное пособие, то пишите мне в личку.
api.zip (179.03 кб.) Скачано 83 раз(а) P@bloid [Off] пост | отв | цит

(26.08.2010 / 14:20)
Очень часто в различных приложениях возникают проблемы с кодировкой. Чаще всего причина этого - использование InputStream/OutputStream.
Чтобы избежать этих проблем, можно использовать классы InputStreamReader/OutputStreamWriter.
Используются они следующим образом:
InputStream input=connection.openInputStream();/*допустим это наш InputStream,
если считывать данные через него, то возникнут "кракозябры"
исправляется так:
*/
InputStreamReader reader=new InputStreamReader(input,"UTF-8");//вместо UTF-8 можно подставить другую кодировку, поддерживаемую телефоном

C OutputStreamWriter поступать по аналогии
Изм. P@bloid (26.08 /14:22) (2) Zvers [Off] пост | отв | цит
Создатель игры века

(22.09.2010 / 23:10)
При создании игр необходимо учитывать некоторые правила :
1. Само собой двойная буфферизация.
2. Нежелательно каждую прокрутку цикла объявлять объекты, т.к. игра может тормозить.
3. Экономить память. Обнулять объекты и массивы.
Изм. aNNiMON (25.09 /08:31) (1) manifest_mf [Off] пост | отв | цит

(10.10.2010 / 12:08)
При создании игр нам чаще всего необходимо реализовывать управление персонажем или каким-либо другим спрайтом. А при использовании средств GameAPI могут возникнуть проблемы с обработкой клавишных событий при помощи метода getKeyStates(). Всё дело в том, что getKeyStates() не всегда возвращает код нажатой клавиши, а возвращает 0. В таком случае можно использовать один способ с использованием методов нажатия клавиш и отпускания. Это keyPressed() и keyReleased().
Создаем глобальную булевую переменную для того, чтобы проверить, нажата клавиша или отпущена и создаем глобальную переменную для getGameAction(int).

Code
public boolean isPressed;
public int gameAction;

Далее, в методе keyPressed() прописываем, что наша булевая переменная равна true, а в keyReleased() она будет становится false. И, также, инициализируем метод getGameAction(int) в каждом из этих методов.
[code]
public void keyPressed(int keyCode) {
isPressed = true;
gameAction = getGameAction(keyCode);
}

publ...
Читать все >> Kiq [Off] пост | отв | цит

(21.10.2010 / 13:16)
Чтобы получить офигенную графику в 3d, используйте setFiltering(Texture2D.FILTER_LINEAR,Texture2D.FILTER_LINEAR); aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(3.01.2011 / 20:33)
Написал класс, для универсальной работы с акселерометром.
Как известно, в акселерометрах есть три типа получения данных (int, double и Object). Целые в телефонах Sony Ericsson, вещественные на эмуляторе SE и телефонах Nokia, а последние на практике нигде не встречаются.
Также, некоторые акселерометры не поддерживают трёхмерной обработки координат, всё это тоже учтено.
В представляемом классе, не зависимо от типа данных, возвращаемые значения будут от -1024 до 1024 (при желании можно легко поменять на свой диапазон в методе getValue(Object o)).
Исходник закоментирован - проблем не должно возникнуть
Изм. aNNiMON (03.01 /20:34) (1)
AccelUtil.java (4.23 кб.) Скачано 18 раз(а) aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(25.01.2011 / 17:36)
Метода подсчета FPS (by dzanis)
static long FPS, FPS_Count, FPS_Start;
static String getFPS() {
FPS_Count ++;
if (FPS_Start == 0)
FPS_Start = System.currentTimeMillis();
if (System.currentTimeMillis() - FPS_Start >= 1000) {
FPS = FPS_Count;
FPS_Count = 0;
FPS_Start = System.currentTimeMillis();
}
return Long.toString(FPS);
}

перед методом repaint();
просто пишем
g.setColor(0xFF0000);
g.drawString(getFPS(), 0, 0, 20);

Изм. aNNiMON (25.01 /17:38) (2) dzanis [Off] пост | отв | цит

(25.01.2011 / 18:23)
метод подсчёта FPS (by aNNiMON)
static long fps, time, prevtime, delta, framecount;
static String getFPS() {

time = System.currentTimeMillis();
delta = time - prevtime;
framecount++;
if (delta >= 1000) {
fps = framecount * 1000 / delta;
prevtime = time;
framecount = 0;
}
return Long.toString(fps);
}

Перед
repaint();

или
flushGraphics();

вписать
g.setColor(0xFF0000);
g.drawString(getFPS(), 0, 0, 20);

Изм. dzanis (25.01 /18:26) (1) Zvers [Off] пост | отв | цит
Создатель игры века

(4.02.2011 / 10:17)
при записи g.drawString(getFPS(), x, y, anchor) при каждом проходе paint'а будет выделяться память для строки getFPS(). Чтобы избежать этого, необходимо записать getFPS() в строку, а после вывода на экран обнулить её. В этом случае память не будет расходоваться "на ветер", но при этом FPS слегка упадёт.


админ сайта
----------------------------------
если помог + в репу!

 
bogdan-GДата: Воскресенье, 13 Февраля 2011, 22:13:32 | Сообщение # 3
Самый главный на сайте!
Группа: Администраторы
Сообщений: 620
Награды: 1
Репутация: 578
Статус: Offline
LPzhelud (Adm) [Off] пост | отв | цит
I'm here... In the shadows...

(4.02.2011 / 13:43)
Zvers, После того, как на объект теряется ссылка, он считается мусором. Следовательно твое предложение даже хуже, чем первое, динамическое aNNiMON (SV!) [Off] пост | отв | цит
Не ускоряй любовь, чтоб не остаться друзьями

(6.02.2011 / 11:24)
Нашел очень хорошую статью про оптимизацию J2ME приложений. kiriman [Off] пост | отв | цит
Даешь флуд!

(6.02.2011 / 11:29)
aNNiMON (06.02.2011/11:24)
Нашел очень хорошую статью про оптимизацию J2ME приложений.
aNNiMON [i] [16.01.11 17:53]
* - Не перестараться, а то прога будет маленькой и глючной)
[ответить] [жалоба] [удалить]
У мя эти статьи в пдф были. Они с какой-то конференции. Zvers [Off] пост | отв | цит
Создатель игры века

(6.02.2011 / 13:49)
ух ты спасибо! + dzanis [Off] пост | отв | цит

(7.02.2011 / 00:13)
Я вот нашол сколько ставить паузу в игре.
Тестируя на эмуляторе ставлю Thread.sleep(20),результат хороший,но у меня на реальном телефоне это слишком медленно... а у когото на мошьном мобильнике всё слишком быстро двигается и играть невозможно.
Вот моё решение как контролировать fps.
final long MAX_FPS = 25;//это максимальный fps
final long MAX = 1000/MAX_FPS;
// цикл
public void run() {
while (true) {
long begin=System.currentTimeMillis();
//...
// бла-бла ... всякий код и прорисовка ...
//...
long delay = System.currentTimeMillis() - begin;
try {
Thread.currentThread().sleep( delay > MAX ? 0 : MAX - delay ) ;
} catch (InterruptedException e) {}
}
}

PS все небрежно? потом исправлю wink


админ сайта
----------------------------------
если помог + в репу!

 
ГостьДата: Суббота, 28 Мая 2011, 08:38:46 | Сообщение # 4
Группа: Гости





оч хорошиe примeры.Спaсибо, что нe утaили smile
 
bogdan-GДата: Суббота, 28 Мая 2011, 11:57:26 | Сообщение # 5
Самый главный на сайте!
Группа: Администраторы
Сообщений: 620
Награды: 1
Репутация: 578
Статус: Offline
Quote (Гость)
оч хорошиe примeры.Спaсибо, что нe утaили

пож biggrin


админ сайта
----------------------------------
если помог + в репу!

 
SeaxefeRarcedДата: Четверг, 09 Февраля 2012, 18:56:55 | Сообщение # 6
Группа: Гости





удалено.

Сообщение отредактировал bogdan-G - Воскресенье, 12 Февраля 2012, 22:25:37
 
  • Страница 1 из 1
  • 1
Поиск:

Disign by Mark © 2024