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 слегка упадёт.