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

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

Вернуться   www.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > FAQ

FAQ Часто задаваемые вопросы

Ответ
 
Опции темы
Старый 07.07.2008, 10:49   #16
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

Сообщение от Phantom_wc Посмотреть сообщение
Спасибо =) Как я понимаю, нужно при компиляции M.class в папку положить, чтобы компилятор не ругался, да?
Да.
Сообщение от Phantom_wc Посмотреть сообщение
Вот только, как вы понимаете, где писать M.G, а где, например, FW.fw?.. Я не знаю, как это называется, у меня с терминологией проблемы =) Грубо говоря, где вы вычитали через какие классы к каким кускам Джавы обращаться нужно?
Для этого нужно знать java, читать доки по ней.
Сообщение от Phantom_wc Посмотреть сообщение
Я к Graphics только не пробовал, но всё ошибка была =) По такому-то ведь в джаве можно так, если не ошибаюсь:
javax.microedition.lcdui.Graphics.drawString(s, x, y, 20);
Почему же в мидлет паскале нельзя так? Почему всё так запутано?
javax.microedition.lcdui.Graphics.drawString(s, x, y, 20); это только метод класса. А вызывать его нужно не для типа(что происходит в данном случае), а для переменной,экземпляра данного класса, т.е. M.G это экземпляр класса javax.microedition.lcdui.Graphics, и писать нужно именно M.G.DrawString.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dmitriy-dim (20.09.2010)
Старый 07.07.2008, 11:51   #17
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,144
Написано 705 полезных сообщений
(для 1,741 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

Позвольте, джаву-то, разумеется, нужно знать, но тут ещё нужно и мидлет паскалевские классы знать. Напишем так в джаве:
M.G.DrawString
И ничего не выйдет. Я пытался джава класс переделать в мидлет паскалевскую либу, так ничего не получалось. Ну сейчас я уже в общем-то побольше понял, думаю, что справлюсь =)
javax.microedition.lcdui.Graphics.drawString(s, x, y, 20); это только метод класса. А вызывать его нужно не для типа(что происходит в данном случае), а для переменной,экземпляра данного класса, т.е. M.G это экземпляр класса javax.microedition.lcdui.Graphics, и писать нужно именно M.G.DrawString.
Что значит, происходит вызывание для типа? Для типа чего? Какого типа? У меня вообще с терминами проблемы. Пытался книжки по Джаве читать, но мало чего понял...
- - -
Я помню, про наследование читал, если не ошибаюсь, экземпляр класса наследует все его свойства, так какая разница как писать? О_о Или я чего-то недогоняю?
- - -
Вот что каждая часть этой строки обозначает:
M.G.drawString(s, x, y, 20);
???
M - это МидлетПаскалевский класс. Это понятно.
G - это переменная-экземпляр javax.microedition.lcdui.Graphics? А где это описано? В том же классе M переменной G присваивается экземпляр ...Graphics?
А drawString - это как правильно назвать? Функция? Процедура?
- - -
Я немного отрывочно в теории немного это всё знаю. Ну, например, знаю, что javax.microedition.lcdui - это типа один из пакетов Джавы, в каждом из пакетов хранятся какие-то определённые возможности. Например, если нужно нам работать с графикой, нужно через импорт этот пакет в файл класса подключить. Можно написать так:
javax.microedition.lcdui.*
Тогда в файл как бы подключатся все (вот опять забыл как правильно назвать, то ли функции, то ли методы, то ли классы) этого пакета.

Последний раз редактировалось Phantom, 07.07.2008 в 12:13.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dmitriy-dim (20.09.2010)
Старый 07.07.2008, 12:29   #18
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

Естественно, знать классы MP нужно, но их описания нигде нет, поэтому приходится изучать самому, опираясь на знание java.
M - это МидлетПаскалевский класс. Это понятно.
G - это переменная-экземпляр javax.microedition.lcdui.Graphics? А где это описано? В том же классе M переменной G присваивается экземпляр ...Graphics?
G это переменная типа javax.microedition.lcdui.Graphics (по паскалевской терминалогии), или экземпляр класса javax.microedition.lcdui.Graphics(по терминалогии java). javax.microedition.lcdui.Graphics это всего лишь описание класса, а вот G - реальный объект в памяти, над которым можно производить действия. Точно так же, как в паскале Integer это только тип данных, а I:Integer это реальная переменная.
А drawString - это как правильно назвать? Функция? Процедура?
Ну если говорить точно, то это метод класса. Вообще можно сказать процедура.

p.s. Терминология не главное, я сам в ней иногда немного путаюсь, главное - понимать, как это работает.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dmitriy-dim (20.09.2010)
Старый 07.07.2008, 13:21   #19
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,144
Написано 705 полезных сообщений
(для 1,741 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

Уже начинаю въезжать. Но терминалогию я плохо знаю, поэтому сложно даже вопросы задавать, так как не знаю как вещи правильно назвать. =) Что ж... Если смогу написать либу, то буду считать, что первый шаг сделан =)
(Offline)
 
Ответить с цитированием
Старый 08.07.2008, 01:25   #20
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,144
Написано 705 полезных сообщений
(для 1,741 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

import javax.microedition.lcdui.Graphics;

public class Lib_test {
// ***********************************
 public static void printtext(String s,int x,int y){
    M.G.setColor(50,200,255);
    M.G.drawString(s,x,y-1,M.G.LEFT|M.G.TOP);
    M.G.drawString(s,x,y+1,M.G.LEFT|M.G.TOP);
    M.G.drawString(s,x-1,y,M.G.LEFT|M.G.TOP);
    M.G.drawString(s,x+1,y,M.G.LEFT|M.G.TOP);
    M.G.setColor(0,0,200);
    M.G.drawString(s,x,y,M.G.LEFT|M.G.TOP);
 }
// ***********************************
}
Ура! Работает! Выводит строку s на канвас по координатам x и y =) Текст выводится синий с голубой обводкой =)
Теперь есть такие вопросы:
1) Почему-то не получается вызвать репэинт из либы. Это возможно?
2) Как в либе обращаться к функции изменения шрифта? M.G.setFont() не работает.
3) Как в либе получить ширину экрана, вычесть из неё длину строки в пикселах и разделить на два? =) Ну типа чтобы вместо координаты x текст всегда по центру позиционировался. M.G.getClipWidth() и M.G.stringWidth(s) вроде не работают. =(
- - -
Я понимаю, что всё это легко делается на самом мидлет паскале, но мне нужно понять, как в либе это сделать, чтобы научиться писать что-то более сложное. Сильно не пинайте.
= = =
Добавлено позже:
Пардон, разобрался с половиной вопросов =)
import javax.microedition.lcdui.*;

public class Lib_test {
// ***********************************
 public static void printtext(String s,int y){
    M.G.setFont(M.G.getFont());
    int x = (M.G.getClipWidth()-M.G.getFont().stringWidth(s))/2;
    M.G.setColor(50,200,255);
    M.G.drawString(s,x,y-1,M.G.LEFT|M.G.TOP);
    M.G.drawString(s,x,y+1,M.G.LEFT|M.G.TOP);
    M.G.drawString(s,x-1,y,M.G.LEFT|M.G.TOP);
    M.G.drawString(s,x+1,y,M.G.LEFT|M.G.TOP);
    M.G.setColor(0,0,200);
    M.G.drawString(s,x,y,M.G.LEFT|M.G.TOP);
 }
// ***********************************
}
Такая конструкция работает. Но я не понял, как getFont() передавать параметры отображения шрифта. Например, я хочу маленький жирный шрифт сделать:
M.G.setFont(M.G.getFont(M.G.getFont().FACE_SYSTEM, M.G.getFont().STYLE_BOLD,M.G.getFont().SIZE_SMALL) );
Lib_test.java:6: getFont() in javax.microedition.lcdui.Graphics cannot be applied to (int,int,int)
    M.G.setFont(M.G.getFont(M.G.getFont().FACE_SYSTEM,M.G.getFont().STYLE_BOLD,M.G.getFont().SIZE_SMALL));
                   ^
1 error
Да и выглядит это слишком нагружено, можно как-нибудь сократить запись от повторений? А то только "M.G.getFont()" в одной строке сколько раз повторяется...
= = =
Добавлено ещё позже:
Блин, а что делать, если мне нужно глобальную переменную использовать? Ну я не знаю, как это в Джаве называется. То есть мне нужно в либе сделать несколько функций/процедур, которые будут использовать одни и те же переменные. Можно, конечно, сделать, чтобы функции возвращали значения, которые потом использовались бы в других функциях путём явной передачи их туда. Но дело в том, что там функция возвращает не одну переменную, а несколько. Может можно сделать что-то типа массива или... я даже не знаю. Чтобы в одной переменной сразу кучу передавать.
- - -
У меня класс есть, я его хотел подключить к мидлет паскалю хитрым способом. Типа написать либу, которая будет к тому классу обращаться по-мидлетпаскалевски, все процедуры объявил статичными, а при компиляции мне выдало, что те функции, к которым я пытаюсь обратиться из либы не являются статичными. То есть что, получается, я не могу из статичной функции одного класса обратиться к нестатичной функции другого класса? О_о Как выходить из такой ситуации?
- - -
В мидлет паскале можно создавать комбинированный тип данных. Полагаю, что это может пригодится, но как его связать с джавой?
- - -
P.S: подозреваю, что я опять всё напутал и вместо слова "функция" следовало употреблять слово "метод" =)

Последний раз редактировалось Phantom, 08.07.2008 в 04:03.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dmitriy-dim (20.09.2010)
Старый 08.07.2008, 04:33   #21
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

Сообщение от Phantom_wc Посмотреть сообщение
Блин, а что делать, если мне нужно глобальную переменную использовать? Ну я не знаю, как это в Джаве называется. То есть мне нужно в либе сделать несколько функций/процедур, которые будут использовать одни и те же переменные. Можно, конечно, сделать, чтобы функции возвращали значения, которые потом использовались бы в других функциях путём явной передачи их туда. Но дело в том, что там функция возвращает не одну переменную, а несколько. Может можно сделать что-то типа массива или... я даже не знаю. Чтобы в одной переменной сразу кучу передавать.
- - -
У меня класс есть, я его хотел подключить к мидлет паскалю хитрым способом. Типа написать либу, которая будет к тому классу обращаться по-мидлетпаскалевски, все процедуры объявил статичными, а при компиляции мне выдало, что те функции, к которым я пытаюсь обратиться из либы не являются статичными. То есть что, получается, я не могу из статичной функции одного класса обратиться к нестатичной функции другого класса? О_о Как выходить из такой ситуации?
- - -
В мидлет паскале можно создавать комбинированный тип данных. Полагаю, что это может пригодится, но как его связать с джавой?
- - -
P.S: подозреваю, что я опять всё напутал и вместо слова "функция" следовало употреблять слово "метод" =)
Глобальные переменные нужно делать статичные, но и процедуры при этом должны быть тоже статичные. Типа так:

class Lib_test
{
    public static int a;
    public static int b;
    public static String s;  // Глобальные переменные

    public static void Function1()          // Пример функции
    {
         a = 1; b = 3; s = "Ok";
    }

    public static int Function2()           // Другой пример функции
    {
         a += b;
         return a;
    }
}
Другой пример. Как из статической функции одного класса вызывать нестатическую функцию из другого класса. Допустим у тебя есть класс:

class MyClass
{
    public int a;
    public int b;   // какие-то переменные

    public void Function1()
    {
         a = 5;
    }

    public int Function2()
    {
         return a;
    }
}
Ясно, что из MP ты к этим функциям не обратишься т.к. они не статичные. Тогда пишем небольшую библиотеку со статичными функциями, которая и будет вызывать наши нестатичные функции.

class Lib_test
{
    public static MyClass my;

    public static void Function1()
    {
        my.Function1();
    }

    public static int Function2()
    {
         return my.Function2();
    }
}
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
dmitriy-dim (20.09.2010)
Старый 08.07.2008, 06:18   #22
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,144
Написано 705 полезных сообщений
(для 1,741 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

Опа! Спасибо! Я почти так и делал, только эту строку не добавлял:
public static MyClass my;
Теперь всё откомпилировалось. И в мидлет паскале без ошибок откомпилировалось. Но программа не идёт. Запускаю на эмуляторе и он тут же закрывается. =(
В классе используются пакеты
import java.util.Vector;
import javax.microedition.lcdui.*;
Это имеет значение? В чём может быть дело?
- - -
Запустил на телефоне (Сименс С75). Прога запустилась. Просто белый экран. На функции из либы/класса повисло, иначе бы через 10 секунд прога сама закрылась бы, так как delay(10000); стоит.
(Offline)
 
Ответить с цитированием
Старый 08.07.2008, 07:05   #23
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

M.G.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_SMALL);

не забываем
import javax.microedition.lcdui.Font;

PS: а где Вы простите создаете экземпляр класса my?
(Offline)
 
Ответить с цитированием
Старый 08.07.2008, 07:40   #24
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,144
Написано 705 полезных сообщений
(для 1,741 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

1) На Font.getFont, а именно на Font ругается компилятор во всех местах, где я его пытаюсь использовать.
2) Что такое экземпляр? Я писал так, как в примере odd'а. Компиляция успешно прошла.
- - -
Это я хочу прикрутить класс для мультистрочного вывода текста к мидлет паскалевской программе =) А ещё лучше полностью его в либу переписать. Хочу понять, как вообще писать либы.
- - -
Добавил позднее:
Мда. Переписал весь класс в либу. Он откомпилировался. Положил его в мидлет паскаль. Написал прогу на мидлет паскале, нажимаю Буилд, он мне выдаёт, что одной из функций в либе нет. После 10 минут предпринимания всяких нелогичных действий я решил в либе поменять местами функции. То есть в принципе ничего не изменилось. Откомпилировал заново и, О ЧУДО, мидлет паскаль стал видеть все функции! Откомпилировалась прога, запускаю и... Опять просто белый экран =( Но теперь уже идёт на эмуляторе и закрыввается через 10 секунд =) Значит процедуры из либы не повисают, а выполняются =) Но должен текст выводиться на экран, блин!
P.S: Процедура, которую паскаль не хотел видеть, находилась в самом конце файла (либы имеется в виду). Возможно он не может длинные либы воспринимать как надо =( Тут уже кто-то писал, что в больших либах перестаёт видеть функции...

Последний раз редактировалось Phantom, 08.07.2008 в 08:22.
(Offline)
 
Ответить с цитированием
Старый 08.07.2008, 17:41   #25
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,144
Написано 705 полезных сообщений
(для 1,741 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

Мдаааа... Откомпилировал этот класс, сделал всё на Джаве, вообще без мидлет паскаля... В эмуляторе идёт, отображается текст, работает прокрутка... А на моём сименсе при запуске ввыдаёт:
MIDlet initialization failed:
java.lang.Error: 56

Может это потому что текст в ANSI? Пробовал компилировать в UTF-8 - на эмуляторе просто белый экран, на телефоне не тестил.
Что-то с этим классом не то...
(Offline)
 
Ответить с цитированием
Старый 08.07.2008, 18:54   #26
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

import javax.microedition.lcdui.Font;

public class Lib_cnv3 {
public static void test() {
	M.G.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_SMALL));
}
}
компилируется без ошибок, не забывайте о мелочах пожалуйста.
(Offline)
 
Ответить с цитированием
Старый 09.07.2008, 03:58   #27
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

Поделись исходниками, будем вместе думать почему там у тебя происходят ошибки и зависания. Попробуй в либу Lib_test добавить конструктор типа:

Lib_test
{
    my = new Mylib();
}
А пока можешь потестить и сам. Не забывай, что в Java есть механизм обработки исключений. По-этому все потенциально опасные действия лучше делать, используя конструкцию try/catch:

try
{
     с = a / b;  // Опасное действие. А вдруг b равно 0 ?
}
catch (Exception e)
{
}
(Offline)
 
Ответить с цитированием
Старый 09.07.2008, 06:40   #28
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,144
Написано 705 полезных сообщений
(для 1,741 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

компилируется без ошибок, не забывайте о мелочах пожалуйста.
Так я же писал
import javax.microedition.lcdui.*;
Это ведь означает, что теперь в классе можно использовать всё из пакета import javax.microedition, в том числе и Font. Разве не так? О_о
Поделись исходниками, будем вместе думать почему там у тебя происходят ошибки и зависания.
http://www.mobilab.ru/articles/96/ - это статья про этот класс. Там же его и взять можно.
http://wapcode.ru/mls.zip - это мои наработки. Это я пытался либу использовать как промежуточный класс для связи класса с мидлет паскалем.
- - -
Наверно, надо перебираться на чистую джаву...
- - -
А это что значит:
catch (Exception e) ?
Ошибку на экран выдаст? И программа дальше будет выполняться? Или try/catch - это типа die() в php?

Последний раз редактировалось Phantom, 09.07.2008 в 06:52.
(Offline)
 
Ответить с цитированием
Старый 09.07.2008, 07:42   #29
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

http://forum.boolean.name/showthread.php?t=6093
ЗЫ: если так получается здесь почему есть уверенность, что получится на чистой яве?
(Offline)
 
Ответить с цитированием
Старый 09.07.2008, 09:16   #30
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,144
Написано 705 полезных сообщений
(для 1,741 пользователей)
Ответ: Пишем либы для MidletPascal на JAVA

ЗЫ: если так получается здесь почему есть уверенность, что получится на чистой яве?
Да я не в том смысле. Я в смысле, что половину писать на джаве, половину на паскале... Зачем? Лучше уж сразу на джаве. =)
- - -
Вопрос не в тему: Почему когда я в свойствах проекта ставлю MIDP 2.0, то приложения получаются неполноэкранные? А когда MIDP 1.0, то всё нормально. Телефон Сименс С75. Сверху и снизу остаются полоски с картинкой, которая в теме телефона установлена. То есть площадь канваса становится примерно 132x148 вместо 132x176 О_о
- - -
Добавлено гораздо позже:
Разобрался, поставил другую версию паскаля с сайта ODD'а.
- - -
У меня не получается сделать класс и либу. Вот я хочу, например, сделать класс, чтобы он весь экран заливал тёмносерым цветом.
Файл gr.java:
import javax.microedition.lcdui.Graphics;

public class 
gr{
// ***********************************
 
public static Graphics g;
 public static 
int x,y;
 public static 
int w=g.getClipWidth();
 public static 
int h=g.getClipHeight();
// ***********************************
 
public static void background(){
   
g.setColor(44,44,44);
   
g.fillRect(0,0,w-1,h-1);
 }
// ***********************************

Файл Lib_fc.java:
import javax.microedition.lcdui.*;

public class 
Lib_fc{
// ***********************************
 
public static void init(){
   
gr=new gr();
 }
// ***********************************
 
public static void background(){
   
gr.background();
 }
// ***********************************
 
private static gr gr;
// ***********************************

Пишу в мидлет паскале:
program canvas;
 
uses fc;
begin
 fc
.init;
 
fc.background;
 
repaint;
 
delay(10000);
end
В чём ошибка? Что я делаю не так? Всё это, что я выше написал, нормально компилируется, но при запуске проги хоть на эмуляторе, хоть на телефоне просто белый экран, как и всегда по умолчанию...

Последний раз редактировалось Phantom, 09.07.2008 в 15:00.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависит ли MidletPascal от установленного пакета Java? artemff Прочие вопросы 4 10.02.2010 23:44
Хорошие 3Д движки \ либы klopmaks C++ 83 11.11.2009 09:56
Как подключать либы?.. beloff FAQ 2 25.12.2007 11:03
помогите с написанием либы Eddy MidletPascal 23 17.12.2007 20:38
Как компилить либы с помощью WTK??? kolyacher Прочие вопросы 4 03.11.2007 08:19


Часовой пояс GMT +1, время: 06:18.


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