Вниз  Микростатьи и хитрости Java
- 26.02.2010 / 20:37
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Давайте сюда выкладывать маленькие статьи, хитрости, секреты по J2ME. Коментировать лучше в этой теме Java программирование
__________________
 let live

Изменено web_demon (8.07 / 20:35) (всего 3 раза)
- 26.02.2010 / 20:39
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Тернарный оператор
? и : - это тернарный оператор, очень удобная штука, если умело пользоваться. Смысл в том, что слева от знака вопроса стоит булево выражение. Если оно верно, то весь оператор равен тому, что между знаком вопроса и двоеточием, если нет - то тому, что справа от двоеточия. То есть, например, строчка var = a < 5 ? 100 : 200; присваивает переменной var значение 100, если a меньше 5, и 200 во всех остальных случаях

__________________
 let live

Изменено aNNiMON (14.04 / 18:25) (всего 1 раз)
- 26.02.2010 / 20:43
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Пауза
Паузу можно осуществить вот такими кодами:
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);

Если знаете еще методы, пишите в личку. Я добавлю в этот пост.
__________________
 let live
- 26.02.2010 / 20:49
aNNiMON
  Супервизор

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


Метод получения случайных чисел от min до max:
  1. public static int random(int min, int max) {
  2. return min + ((rnd.nextInt() >>> 1)%(max-min));
  3. }
(random.nextInt() >>> 1) % number - универсальный способ получения числа от 0 до number. Если вы используете MIDP2.0, то можно использовать метод rnd.nextInt(number)

Разложить число вида 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;
__________________
 let live

Изменено aNNiMON (3.08 / 22:48) (всего 3 раза)
- 26.02.2010 / 20:52
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
FPS
  1. //------------
  2. int iFps, iActFps, iTimeToCountFps = 0;
  3. long lastTime;
  4.  
  5. long thisTime = System.currentTimeMillis (); // текущее время
  6.  int dTime = (int)(thisTime-lastTime); // время, прошедшее с прошлого кадра
  7.  lastTime = thisTime;
  8.  
  9.  iTimeToCountFps += dTime;
  10.  iFps++;
  11.  if (iTimeToCountFps >= 1000) // если набралось 1 секунда - обновляем счетчик
  12.  {
  13.  iTimeToCountFps = 0;
  14.  iActFps = iFps;
  15.  iFps = 0;
  16.  }
  17. //------------

__________________
 let live

Изменено aNNiMON (15.05 / 17:41) (всего 3 раза)
- 27.02.2010 / 11:19
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Коды клавиш
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


Обработка событий джойстика на всех телефонах
  1. public void keyPressed(int key) {
  2. int ga = getGameAction(key);
  3. if(ga==FIRE && key!=KEY_NUM5) {/*нажат центр джоя*/}
  4. if(ga==UP && key!=KEY_NUM2) {/*нажат JOY_UP*/}
  5. if(ga==DOWN && key!=KEY_NUM8) {/*нажат JOY_DOWN*/}
  6. if(ga==LEFT && key!=KEY_NUM4) {/*нажат JOY_LEFT*/}
  7. if(ga==RIGHT && key!=KEY_NUM6) {/*нажат JOY_RIGHT*/}
  8. }

__________________
 let live

Изменено aNNiMON (15.05 / 17:41) (всего 1 раз)
- 27.02.2010 / 11:24
P@bloid
  Пользователь

P@bloid 
Сейчас: Offline
Эффект "double brace".
Используется для простой инициализации таких вещей как списки, Choice и подобных.

  1. Vector v = new Vector() {{
  2.   append("One");
  3.   append("Two");
  4.   append("Three");
  5. }}
Работает только с классами, не имеющими параметра final. Как это работает, написано здесь.

Изменено Ксакеп (23.10 / 00:14) (всего 4 раза)
- 27.02.2010 / 11:33
P@bloid
  Пользователь

P@bloid 
Сейчас: Offline
3 вида инициализаторов.

  1. public class Test
  2. {
  3. static
  4. {
  5. /*Инициализатор класса, вызывается 1 раз для класса. Вызывается самым первым.
  6. Служит для инициализации статических переменных*/
  7. }
  8.  
  9. {
  10. /*Инициализатор обьекта. Вызывается для каждого обьекта перед конструктором*/
  11. }
  12.  
  13. Test()
  14. {
  15. /*Конструктор, вызывается самым последним*/
  16. }
  17. }


Изменено aNNiMON (15.05 / 17:42) (всего 1 раз)
- 22.03.2010 / 17:48
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Сокращение записи boolean переменных

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

Флажок (Мигалка):
Допустим при определенном действии нам нужно поменять значение булевой переменной на обратное.
Код
  1. if(value==true) value=false;
  2. else value=true;
Можно записать гораздо коротким способом:
Код
  1. value=!value;
Оператор ! это отрицание. То есть если нам нужно написать if(value==false) {}, то можно записать это так: if(!value).
Надеюсь объяснил понятно.
Заменяйте теперь все
value==true на value, и
value==false на !value.
__________________
 let live
- 14.04.2010 / 18:49
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Двойная буфферизация
Использование двойной буфферизации бывает очень полезным и даже необходимым при создании игр или приложений, так как исключает мигание. К тому же становится доступным множество полезных функций, такие как - возможность создания скриншотов и поворот экрана. Единственный недостаток - чуть больше используется память, потому что при двойной буфферизации вся графика выводится на объект 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 чёрным цветом.
  Вот пример реализации класса с двойной буфферизацией.
 
  1. import javax.microedition.lcdui.*;
  2.  
  3. public class Canv extends Canvas {
  4. private Image I;
  5. private Graphics G;
  6. private int width, height;
  7.  
  8. public Canv() {
  9.  setFullScreenMode(true);
  10.  I = Image.createImage(width=getWidth(), height=getHeight());
  11.  G = I.getGraphics();
  12. }
  13.  
  14. public void paint(Graphics g) {
  15.  doubleBufferedPaint(G);
  16.  g.drawImage(I,width/2,height/2,3);
  17. }
  18.  
  19. public void doubleBufferedPaint(Graphics g) {
  20.  g.setColor(0);
  21.  g.fillRect(0,0,width,height);
  22.  g.setColor(0x00FF00);
  23.  g.drawString("by aNNiMON", width/2, 20, 17);
  24. }
  25. }

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

__________________
 let live

Изменено aNNiMON (14.04 / 18:53) (всего 4 раза)
Наверх  Всего сообщений: 83
Фильтровать сообщения
Поиск по теме
Файлы топика (6)