Микростатьи и хитрости Java 26.02.2010 / 20:37 | | aNNiMON Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| Давайте сюда выкладывать маленькие статьи, хитрости, секреты по J2ME. Коментировать лучше в этой теме Java программирование __________________
let live Изменено web_demon (8.07 / 20:35) (всего 3 раза) |
26.02.2010 / 20:39 | | aNNiMON Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| Тернарный оператор ? и : - это тернарный оператор, очень удобная штука, если умело пользоваться. Смысл в том, что слева от знака вопроса стоит булево выражение. Если оно верно, то весь оператор равен тому, что между знаком вопроса и двоеточием, если нет - то тому, что справа от двоеточия. То есть, например, строчка var = a < 5 ? 100 : 200; присваивает переменной var значение 100, если a меньше 5, и 200 во всех остальных случаях
__________________
let live Изменено aNNiMON (14.04 / 18:25) (всего 1 раз) |
26.02.2010 / 20:43 | | aNNiMON Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| Пауза Паузу можно осуществить вот такими кодами: 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 Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| 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));
}
(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 Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| 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;
}
//------------
__________________
let live Изменено aNNiMON (15.05 / 17:41) (всего 3 раза) |
27.02.2010 / 11:19 | | aNNiMON Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| Коды клавиш 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*/}
}
__________________
let live Изменено aNNiMON (15.05 / 17:41) (всего 1 раз) |
27.02.2010 / 11:24 | | P@bloid Пользователь Сейчас: Offline
Имя: Павел Откуда: Волгоград Регистрация: 25.02.2010
| Эффект "double brace". Используется для простой инициализации таких вещей как списки, Choice и подобных.Vector v = new Vector() {{
append("One");
append("Two");
append("Three");
}}
Работает только с классами, не имеющими параметра final. Как это работает, написано здесь. Изменено Ксакеп (23.10 / 00:14) (всего 4 раза) |
27.02.2010 / 11:33 | | P@bloid Пользователь Сейчас: Offline
Имя: Павел Откуда: Волгоград Регистрация: 25.02.2010
| 3 вида инициализаторов.public class Test
{
static
{
/*Инициализатор класса, вызывается 1 раз для класса. Вызывается самым первым.
Служит для инициализации статических переменных*/
}
{
/*Инициализатор обьекта. Вызывается для каждого обьекта перед конструктором*/
}
Test()
{
/*Конструктор, вызывается самым последним*/
}
}
Изменено aNNiMON (15.05 / 17:42) (всего 1 раз) |
22.03.2010 / 17:48 | | aNNiMON Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| Сокращение записи 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;
Можно записать гораздо коротким способом: Код Оператор ! это отрицание. То есть если нам нужно написать if(value==false) {}, то можно записать это так: if(!value). Надеюсь объяснил понятно. Заменяйте теперь все value==true на value, и value==false на !value. __________________
let live |
14.04.2010 / 18:49 | | aNNiMON Супервизор Сейчас: Online
Имя: Витёк Регистрация: 11.01.2010
| Двойная буфферизацияИспользование двойной буфферизации бывает очень полезным и даже необходимым при создании игр или приложений, так как исключает мигание. К тому же становится доступным множество полезных функций, такие как - возможность создания скриншотов и поворот экрана. Единственный недостаток - чуть больше используется память, потому что при двойной буфферизации вся графика выводится на объект 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);
__________________
let live Изменено aNNiMON (14.04 / 18:53) (всего 4 раза) |
Всего сообщений: 84 Фильтровать сообщения Поиск по теме Файлы топика (6)
|