Развлекуха для кодера Denis Mingulov Спецвыпуск: Хакер, номер #056, стр. 056-064-4 // Также рассчитываем положение строки по вертикали int y = ((Mobile.height - ((_bigFontHeight + _smallFontHeight) %26lt;%26lt; 1)) %26gt;%26gt; 1) + _bigFontHeight; // и выводим строки на экран (название программы) g.drawString(_asteroid, x, y, Graphics.BOTTOM|Graphics.LEFT); x = (Mobile.width - Field.bigFont.stringWidth(_field)) %26gt;%26gt; 1; g.drawString(_field, x, y + _bigFontHeight, Graphics.BOTTOM|Graphics.LEFT); // меняем цвет и выводим те же самые строчки со сдвигом на один пиксел влево-вниз (фактически оттеняем выведенный текст). g.setColor(0x008080FF); x = ((Mobile.width - Field.bigFont.stringWidth(_asteroid)) %26gt;%26gt; 1) - 1; y += 1; g.drawString(_asteroid, x, y, Graphics.BOTTOM|Graphics.LEFT); x = ((Mobile.width - Field.bigFont.stringWidth(_field)) %26gt;%26gt; 1) - 1; y += _bigFontHeight; g.drawString(_field, x, y, Graphics.BOTTOM|Graphics.LEFT); // дальше выводим версию и информацию об авторе программы без "спецэффектов" y += _smallFontHeight; g.setColor(0x00000000); g.setFont(Field.smallFont); x = (Mobile.width - Field.smallFont.stringWidth(_byjfd)) %26gt;%26gt; 1; g.drawString(_byjfd, x, y, Graphics.BOTTOM|Graphics.LEFT); y += _smallFontHeight; x = (Mobile.width - Field.smallFont.stringWidth(_version)) %26gt;%26gt; 1; g.drawString(_version, x, y, Graphics.BOTTOM|Graphics.LEFT); } Дополнительные возможности Желаешь поддержки виброзвонка и прочих наворотов? Заведем отдельный класс для всех специальных эффектов и создадим его в зависимости от типа телефона. Например: class GameEffects с методами boolean hasSoundCapability() и boolean hasVibrationCapability() для проверки с return false по умолчанию. А вот пример для Nokia - для вибры com.nokia.mid.ui.DeviceControl.stopVibra() и DeviceControl.startVibra(100, 300) (100% вибрации на 300 миллисекунд). Для звука же com.nokia.mid.sound.Sound: class NokiaGameEffects extends GameEffects com.nokia.mid.sound.Sound sound; // bytes - набор для проигрыша sound = new Sound(bytes, Sound.FORMAT_TONE); sound.setGain(128); // громкость sound.play(1); // 1 цикл Для того чтобы использовать действительно динамическую инициализацию игры, при запуске нужно будет сделать вот так: try { Class.forName("com.nokia.mid.sound.Sound"); Class.forName("com.nokia.mid.ui.DeviceControl"); // Если нет исключений, можно использовать эти API. Class clas = Class.forName("NokiaGameEffects"); return (GameEffects) clas.newInstance(); } catch (Exception e) { // Использовать заглушку. return new GameEffects(); } Основные модели мобильных телефонов с J2ME Если ты хочешь провести тестирование на эмуляторах или на реальных устройствах, то ниже приведен ряд моделей с различной функциональностью: Nokia 3100 - MIDP1.0/CLDC1.0 (типичный представитель) Nokia 6021 - MIDP2.0/CLDC1.1 (тоже типичный) Nokia 6230i - MIDP2.0/CLDC1.1 (много дополнительных API) Nokia 6630/6680 или Nokia 7710 - MIDP2.0/CLDC1.1/CDC (high-end) Siemens M55 - MIDP1.0/CLDC1.0 (для мидлетов память не ограничивает) Siemens M65 - MIDP2.0/CLDC1.1 (есть новые API, Java 3D) Sony Ericsson T610 - MIDP1.0/CLDC1.0 (довольно старый, как и Siemens M55) |