PulpCore: начало

2010-03-19T14:10:28+06:00

Решил немного отдохнуть и посмотреть фреймворк PulpCore для Явы. Судя по этому бенчмарку, это отличная платформа для любого графического веб-приложения.

Русской документации по движку нету, единственная лежит тут,  лучший способ научиться самому это учить других, поэтому начнём, пожалуй.

Скачать движок можно по этой ссылке. Это просто набор необходимых jar-ов, его нужно распаковать куда угодно и строить программу с его помощью. Для настройки и сборки своих апплетов он использует Apache Ant, так что его тоже нужно поставить.

Перед началом немного интересностей. Движок предоставляет два вида заготовок для программ: быструю и тщательную. Первая используется для всех примеров, таких как этот; вторая подходит уже для более серьёзных проектов - например, игр. Примеры игр на PulpCore лежат здесь. Я буду пользоваться простой заготовкой.

Начать лучше с разбора Hello,World. Пример уже написан и лежит в templates/quick/src. Привожу его текст (в урезанном виде) здесь с пояснениями:

import pulpcore.scene.Scene2D;
import pulpcore.sprite.FilledSprite;
import pulpcore.sprite.ImageSprite;
import pulpcore.sprite.Label;
import pulpcore.image.Colors;

public class HelloWorld extends Scene2D {

@Override public void load() { add(new FilledSprite(Colors.WHITE)); add(new ImageSprite(“success.png”, 5, 5)); add(new Label(“Hello World!”, 26, 6)); }

}

Строка add(new FilledSprite(Colors.WHITE)); задаёт белый фон апплета. Вместо Colors.WHITE можно писать просто WHITE. Метод add применяется вообще ко всем производным класса pulpcore.sprite.Sprite.

Строка add(new ImageSprite(“success.png”, 5, 5)); получает изображение и выводит его на x=5, y=5. Какие точно форматы поддерживает PulpCore, выяснить мне не удалось, но во всех примерах используется исключительно PNG. Почему бы и нет, действительно? С третьей строкой (Label) всё ясно, я думаю.

Слово @Override служит просто индикатором того, что метод переопределяет этот же метод класса-родителя; если метод помечен таким образом, он обязан переопределить метод родительского класса, иначе компилятор выдаст ошибку. Тем не менее, это имеет права индикатора и писать его в своих программах необязательно (если, конечно, вы не хотите помочь компилятору).

Чтобы скомпилировать и тут же просмотреть апплет (выскочит PulpCore-версия appletviewer), нужно подать команду ant в каталоге, где лежит build.xml.

Пока что не будем создавать ничего нового, будет извращаться над тем,что есть. Например, почему надпись ничего не делает? Я хочу анимацию! Добавим в импорт пакетов строку import pulpcore.animation.Easing;, а в главной функции напишем: Label Hello = new Label(“Hello World!”, 26, 6); add(Hello); Hello.numDisplayChars.set(0); Hello.numDisplayChars.animateTo(0,12, 30*12, Easing.NONE, 1000);

Нетрудно понять по результату, что поле numDisplayChars отвечает за количество видимых символов. Метод animateTo берёт текущее состояние объекта и плавно его меняет до нужного - в нашем случае, медленно увеличивает с 0 до 12. Первый его параметр - нужное значение, второй параметр - это длительность изменения (то есть, во сколько миллисекунд должна уложиться вся анимация), третий - это Easing (специальный класс всех эффектов…их слишком много чтобы описывать, смотрите маны), четвёртый - это задержка анимации (чтобы она начиналась не сразу, а через 1000 миллисекунд). Чтобы ещё раз продемонстрировать удобство этого метода, можно заставить картинку исчезнуть. Я не буду приводить весь код, просто дам ключевую строку: check.alpha.animateTo(0, 255*2, Easing.NONE, 0); - если вы внимательно читаете, воспользоваться ею будет просто.

Ладно,сейчас мне уже пора собираться…думаю, что-то уже я в этом деле начал понимать. Если будет время, то в следующий раз попробую разобраться с такой штукой, как Timeline.