Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Разработка MIDlet Pascal

Ответ
 
Опции темы
Старый 29.06.2011, 02:33   #1
YellowAfterlife
ПроЭктировщик
 
Аватар для YellowAfterlife
 
Регистрация: 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.
Пример программы, использующей часть функциональности:
Стрелки\цифры\основное клавиатурное устройство ввода - перемещать круг по экрану.
Указатель\мышь - рисование линий.
Круг стирает следы кисти, находящиеся непосредственно под ним.
program MPplusDemo;

const
  
color1 = $404040;
  
color2 $FFCC00;

var 
kpauseinteger;
  
cbImage;
  
circleXcircleYinteger;
  
pPointerXpPointerYinteger;
  
wasPointerPressedboolean;
  
cxcycsinteger// переменные символа

begin
  
// Нехитрый способ вычисления паузы между перерисовками:
  
setColorHex(0);
  
fillRect(00getWidthgetHeight);
  
pause := getRelativeTimeMs;
  
rePaint;
  
pause := 32 - (getRelativeTimeMs pause);
  
debug('Pause set to ' pause);
  
// Инициализируем изображения:
  
:= imageFromCanvas(00getWidthgetHeight); // Создаем буффер
  
:= imageOfCanvas// Заносим указатель на полотно в переменную
  // Определяем размеры и положение символа:
  
if getWidth getHeight then cs := getHeight else cs := getWidth;
  
cx := (getWidth cs) / 2;
  
cy := (getHeight cs) / 2;
  
// Перезначаем вывод в буффер:
  
imageAsCanvas(b);
    
// Фон:
    
setColorHex(color1);
    
fillRect(00getWidthgetHeight);
    
// Основной круг:
    
setColorHex(color2);
    
fillEllipse(cxcycscs);
    
// Удаляем центр круга:
    
setColorHex(color1);
    
fillEllipse(cx cs 6cy cs 6cs 2/3cs 2/3);
    
// Удаляем полосы из круга:
    
for := 1 to 6 do fillArc(cxcycscs60 1020);
  
// Переназначаем вывод обратно на полотно:
  
imageAsCanvas(c);
  
// Задаем начальные координаты круга-курсора:
  
circleX := getWidth 2;
  
circleY := getHeight 2;
  
repeat
    
// Вывод в изображение-буффер:
    
imageAsCanvas(b);
      
// Если зажат указатель:
      
if isPointerPressed then begin
        setColorHex
(color2);
        
// Если был нажат прошлый кадр, рисуем линию:
        
if wasPointerPressed then
          drawLine
(pPointerXpPointerYgetPointerXgetPointerY);
        
// Запоминаем текущие (а в следующем кадре - прошлые) координаты:
        
pPointerX := getPointerX;
        
pPointerY := getPointerY;
      
end;
      
// Запоминаем, был ли нажат указатель:
      
wasPointerPressed := isPointerPressed;
      
// Стираем область под кружком:
      
setColorHex(color1);
      
fillEllipse(circleX 11circleY 112121);
    
// Переключаем вывод обратно на полотно:
    
imageAsCanvas(c);
    
// Рисуем изображение-буффер:
    
drawImage(b00);
    
// Рисуем круг:
    
setColorHex(color2);
    
fillEllipse(circleX 10circleY 101919);
    
rePaint;
    
// Перемещение круга:
    
:= getKeyStates;
    if (
and vk_up) > 0 then circleY := circleY 4;
    if (
and vk_down) > 0 then circleY := circleY 4;
    if (
and vk_left) > 0 then circleX := circleX 4;
    if (
and vk_right) > 0 then circleX := circleX 4;
    
// Ожидание следующего кадра:
    
if pause 0 then delay(pause);
  
forever;
end

В текущих планах - добавить функции для манипуляций над массивами и изображениями.

Комментарии, идеи, и рапорты недочетов (созданных мной) приветствуются.
Хорошего дня.
__________________

Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...

Последний раз редактировалось YellowAfterlife, 29.06.2011 в 03:52.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо YellowAfterlife за это полезное сообщение:
blackman (29.06.2011), Igor (30.06.2011)
Старый 30.06.2011, 01:48   #2
cherepets
Бывалый
 
Регистрация: 18.08.2009
Сообщений: 745
Написано 146 полезных сообщений
(для 215 пользователей)
Ответ: MP3CC [+x] - "Пользовательская модификация" компилятора

Хм, родная поддержка сенсора - хорошо. Попробую в ближайшие дни -)
(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 09:45   #3
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: MP3CC [+x] - "Пользовательская модификация" компилятора

можно ли создавать неквадратные массивы? А то неудобно...
В МР2.02 приходится создавать тип - массив, а потом массив данных этого типа.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 30.06.2011, 10:22   #4
YellowAfterlife
ПроЭктировщик
 
Аватар для YellowAfterlife
 
Регистрация: 19.02.2011
Сообщений: 134
Написано 81 полезных сообщений
(для 219 пользователей)
Ответ: MP3CC [+x] - "Пользовательская модификация" компилятора

Сообщение от Igor Посмотреть сообщение
можно ли создавать неквадратные массивы? А то неудобно...
В МР2.02 приходится создавать тип - массив, а потом массив данных этого типа.
Насколько я помню, этот баг был исправлен еще в первых релизах 3.0 версии.
program notsquare;
var
  
int: array[0..30..7of integer;
  
img: array[0..30..7of image;
begin
  int
[37] := 7;
  
img[37] := loadImage('/icon.png');
  
debug('ImageWidth: ' getImageWidth(img[37]) + '; Seven: ' int[37]);
  
delay(4000);
end
__________________

Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо YellowAfterlife за это полезное сообщение:
Igor (30.06.2011), scimitar (02.08.2011)
Старый 09.08.2011, 18:49   #5
Zorba
AnyKey`щик
 
Аватар для Zorba
 
Регистрация: 20.06.2010
Сообщений: 5
Написано одно полезное сообщение
Ответ: MP3CC [+x] - "Пользовательская модификация" компилятора

YellowAfterlife не подскажешь почему компилятор MP3 выдает ошибку при добавлении нескольких библиотек в проект?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 21:10.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com