![](images/chestnut/misc/left.gif) |
29.06.2011, 02:33
|
#1
|
ПроЭктировщик
Регистрация: 19.02.2011
Сообщений: 134
Написано 81 полезных сообщений (для 219 пользователей)
|
MP3CC [+x] - "Пользовательская модификация" компилятора
Ссылка на скачивание текущей версии (обновляется, см. название архивов при скачивании): [ссылка]
Страница информации (содержит списки изменений и новых функций): [ссылка]
Ссылка перенаправляющая, поскольку я не имею возможности редактировать собственные темы через несколько дней после их создания. А иметь "текущую" ссылку в первом сообщении все же хочется.
Если упомянутый веб-сервис все же для вас не работает, на странице информации так же есть ссылка на файл.
Цель этой модификации - добавить простые, часто используемые процедуры и функции в язык, упрощая написание программ и использование библиотек. Совместимость с существующими остается.
Инструкция по установке:
1. Открываем папку с MIDletPascal 3.3 (текущей по SourceForge версии).
2. Делаем "резервную копию" MP3CC.exe.
3. Копируем скачанный архив в папку с MP.
4. Распаковываем архив, заменяя MP3CC на новый.
Готово. На следующей компиляции проэкта через MP будет использован новый компилятор.
Основные изменения (причины для скачивания):- "родная" поддержка сенсора в надлежащем формате.
Функции getPointerX, getPointerY, isPointerPressed, hasPointerEvents, hasPointerMotionEvents, возвращающие integer и boolean соответственно. - "родная" поддержка getKeyStates для MIDP2.0 (GameCanvas).
Константы кнопок прилагаются. - Добавлены некоторые недостающие функции рисования
Треугольники, закрытые арки 'Arc', хекс-цвет рисования. - Добавлены функции для пере-направления вывода изображения.
На самом деле не такие уж это и функции - компилятор заменяет их вызов на несколько байт-кодов. - Добавлены "магические" функции преобразования между Boolean и Integer.
Поскольку MP хранит булевые значения как int, то приведение типа является весьма визуальным - в конечном результате это будет соответственное присвоение.
Это не является официальной версией компилятора. Как упомянул j-a-s-d, новые "магические функции" в официальный компилятор добавляться не будут как минимум до версии 4:
About the request of adding more magic compiler functions to MP, as I stated in other forum replies, I do not agree with that. It's not convenient to add too much magic functions to a compiler, it's better to extend the external RTL (as Delphi, FreePascal and other compilers do). The compiler is a translator that should be the smallest, quickest and simplest possible. And, the most important thing in this case, MP3 compiler is just suppossed to be mantained only until a full pascal MP4 got released, so extending it too much is pointless.
|
Пример программы, использующей часть функциональности:
Стрелки\цифры\основное клавиатурное устройство ввода - перемещать круг по экрану.
Указатель\мышь - рисование линий.
Круг стирает следы кисти, находящиеся непосредственно под ним.
![](images/chestnut/misc/code_php.gif)
program MPplusDemo;
const color1 = $404040; color2 = $FFCC00;
var k, pause: integer; c, b: Image; circleX, circleY: integer; pPointerX, pPointerY: integer; wasPointerPressed: boolean; cx, cy, cs: integer; // переменные символа
begin // Нехитрый способ вычисления паузы между перерисовками: setColorHex(0); fillRect(0, 0, getWidth, getHeight); pause := getRelativeTimeMs; rePaint; pause := 32 - (getRelativeTimeMs - pause); debug('Pause set to ' + pause); // Инициализируем изображения: b := imageFromCanvas(0, 0, getWidth, getHeight); // Создаем буффер c := imageOfCanvas; // Заносим указатель на полотно в переменную // Определяем размеры и положение символа: if getWidth > getHeight then cs := getHeight else cs := getWidth; cx := (getWidth - cs) / 2; cy := (getHeight - cs) / 2; // Перезначаем вывод в буффер: imageAsCanvas(b); // Фон: setColorHex(color1); fillRect(0, 0, getWidth, getHeight); // Основной круг: setColorHex(color2); fillEllipse(cx, cy, cs, cs); // Удаляем центр круга: setColorHex(color1); fillEllipse(cx + cs / 6, cy + cs / 6, cs * 2/3, cs * 2/3); // Удаляем полосы из круга: for k := 1 to 6 do fillArc(cx, cy, cs, cs, k * 60 + 10, 20); // Переназначаем вывод обратно на полотно: imageAsCanvas(c); // Задаем начальные координаты круга-курсора: circleX := getWidth / 2; circleY := getHeight / 2; repeat // Вывод в изображение-буффер: imageAsCanvas(b); // Если зажат указатель: if isPointerPressed then begin setColorHex(color2); // Если был нажат прошлый кадр, рисуем линию: if wasPointerPressed then drawLine(pPointerX, pPointerY, getPointerX, getPointerY); // Запоминаем текущие (а в следующем кадре - прошлые) координаты: pPointerX := getPointerX; pPointerY := getPointerY; end; // Запоминаем, был ли нажат указатель: wasPointerPressed := isPointerPressed; // Стираем область под кружком: setColorHex(color1); fillEllipse(circleX - 11, circleY - 11, 21, 21); // Переключаем вывод обратно на полотно: imageAsCanvas(c); // Рисуем изображение-буффер: drawImage(b, 0, 0); // Рисуем круг: setColorHex(color2); fillEllipse(circleX - 10, circleY - 10, 19, 19); rePaint; // Перемещение круга: k := getKeyStates; if (k and vk_up) > 0 then circleY := circleY - 4; if (k and vk_down) > 0 then circleY := circleY + 4; if (k and vk_left) > 0 then circleX := circleX - 4; if (k and vk_right) > 0 then circleX := circleX + 4; // Ожидание следующего кадра: if pause > 0 then delay(pause); forever; end.
В текущих планах - добавить функции для манипуляций над массивами и изображениями.
Комментарии, идеи, и рапорты недочетов (созданных мной) приветствуются.
Хорошего дня.
__________________
![](https://dl.dropbox.com/u/3594143/av/logo.png)
Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...
Последний раз редактировалось YellowAfterlife, 29.06.2011 в 03:52.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо YellowAfterlife за это полезное сообщение:
|
|
30.06.2011, 01:48
|
#2
|
Бывалый
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений (для 215 пользователей)
|
Ответ: MP3CC [+x] - "Пользовательская модификация" компилятора
Хм, родная поддержка сенсора - хорошо. Попробую в ближайшие дни -)
|
(Offline)
|
|
30.06.2011, 09:45
|
#3
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: MP3CC [+x] - "Пользовательская модификация" компилятора
можно ли создавать неквадратные массивы? А то неудобно...
В МР2.02 приходится создавать тип - массив, а потом массив данных этого типа.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
|
(Offline)
|
|
30.06.2011, 10:22
|
#4
|
ПроЭктировщик
Регистрация: 19.02.2011
Сообщений: 134
Написано 81 полезных сообщений (для 219 пользователей)
|
Ответ: MP3CC [+x] - "Пользовательская модификация" компилятора
Сообщение от Igor
можно ли создавать неквадратные массивы? А то неудобно...
В МР2.02 приходится создавать тип - массив, а потом массив данных этого типа.
|
Насколько я помню, этот баг был исправлен еще в первых релизах 3.0 версии.
program notsquare; var int: array[0..3, 0..7] of integer; img: array[0..3, 0..7] of image; begin int[3, 7] := 7; img[3, 7] := loadImage('/icon.png'); debug('ImageWidth: ' + getImageWidth(img[3, 7]) + '; Seven: ' + int[3, 7]); delay(4000); end.
__________________
![](https://dl.dropbox.com/u/3594143/av/logo.png)
Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо YellowAfterlife за это полезное сообщение:
|
|
09.08.2011, 18:49
|
#5
|
AnyKey`щик
Регистрация: 20.06.2010
Сообщений: 5
Написано одно полезное сообщение
|
Ответ: MP3CC [+x] - "Пользовательская модификация" компилятора
YellowAfterlife не подскажешь почему компилятор MP3 выдает ошибку при добавлении нескольких библиотек в проект?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:55.
|