LINUX.ORG.RU
ФорумTalks

[спв][дезайн] Как рисовать спрайты человечков и циклы движения?

 


0

0

Суть такова: есть вид отображения «геокарта», где могут быть отрисованы разные геоданные (полигоны, растры, точки и все что имеет геокоординаты). Есть какие-то метки, скажем движущиеся автомобили в реалтайме, которые надо не только рисовать на карте, то и двигать (вообще, это могут быть и кнопки, и рамочки-контейнеры с формами и вообще что угодно - двигать можно все)

Поскольку тулкит основан на идее, что внешний вид определяет **пользователь**, то метки пользователь может нарисовать сам, причем как в виде простой точки/флажка, так и в виде 3D-иконок автомобиля с различным направлением. Как следствие, должно быть API, позволяющее привязывать к спрайтам некоторое состояние, в данном случае «направление движения», дабы выбиралась иконка с нужным направлением, положение метки определяют координаты (вообще стейты у них уже есть, как например нажатая/отжатая кнопка, включенный/выключенный чекбокс, свободное/занятое такси и т.д.)

А если я захочу рисовать человечка, который должен перебирать ножками, т.е. отрисовать все стадии цикла-походки? При этом я ненавижу те случаи, когда человечки или идут на одном месте, или анимации несинхронизирована с движением, и получается «проскальзывание» или наоборот, огромные прыжки, словно человечек вообще не привязан к координатам «земли». Получается, что в каждый кадр анимации надо добавлять данные о координатах, на которые персонаж может передвинуться? Это идиотизм. Особенно непонятно, что рисовать в таком случае: карта в мелком масштабе, координаты меняются, но масштаб все это определяет как одну точку (пиксель) на карте - как спрайт узнает, что ему надо куда-то идти или хотя бы быть повернутым внужном направлении, а не стоять смирно лицом к пользователю?

Надо сказать, что эту задачу я не решил еще с прошлого раза, когда делал анимированных персонажей. Правда тогда я хотел к каждому персонажу прикладывать свои скрипты, определяющие граф из состояний анимации

Прекомпилять поведение нельзя, оно должно по сети грузиться и по возможности обновлять поведение, а это создаст дырку в безопасности... Получается что-то вроде скриптов во флеше - это необходимость? Там хоть дров наломать сложно.

Ответ на: комментарий от different_thing

Пример: есть спрайт с «полоской выделения» на меню, при нажатии на стрелочки этот спрайт переходит на соседние элементы, подсвечивая их. А что если нужно анимировать процесс перехода подсветки? Например, нарисовать персонажа, который будет эту полоску красиво передвигать. И если рисовать попиксельный переход, то может быть ситуация, что курсор ушел очень далеко, а анимация все еще идет - это неправильно!

simple_best_world_web_master
() автор топика
Ответ на: комментарий от different_thing

Ну и выходит, что в каждом кадре надо будет указать «можно перенести от Х до ХХ пикселей по оси ХХХ», а система пусть сама собирает граф состояний из нужных последовательностей?

simple_best_world_web_master
() автор топика
Ответ на: комментарий от simple_best_world_web_master

К тому же возможна ситуация, что будет несколько вариантов одной фазы движения, тут уже рандом нужен, возможны переходы. Добавляем переменные и получаются тьюринг-полные спрайты.

simple_best_world_web_master
() автор топика
Ответ на: комментарий от different_thing

Ну я хочу сделать анимированные лейауты, что-то вроде Qt Kinetic, причем без ограничений по возможностям скинования, дабы хоть калькуляторы можно было делать, хоть игрушки лепить со своим лук-н-филом, дабы штатное меню легко превращалось в игровое и обратно (а игроделы большие выдумщики тут)

simple_best_world_web_master
() автор топика

Поверь мне, единственное, чего не хватает в гтк — возможности на лету скрыть контрол или перенести его на дополнительную панель аля сайдбар или глобал меню.

PolarFox ★★★★★
()

Чувствую, что если ты допилишь свой тулкит, то мне будет чем нагрузить свои четыре ядра и 4 Gb памяти :)

drakmail ★★★★
()
Ответ на: комментарий от drakmail

Сырцы:

#include <astral.h>
#include <prayer.h>

int main ()
{
    GOD *g = get_god();
    int i;
    for (i=0; i<30; i++) pray (g);
    TOOLKIT *tk = get_info_from_god (g, tk);
    run (tk);
    return 0;
}

В 99% случаев get_info_from_god возвращает Tk, в 1% - супертулкит

different_thing
()
Ответ на: комментарий от PolarFox

в гтк нехватает дохрена и больше. навскидку — удобного управления с клавиатуры ala vimperator.

thunar ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.