PDA

Просмотр полной версии : флеш-марионетка


ZergMaster
22.05.2008, 20:08
Здравствуйте. господа!..)
Я тут новенький... всех приветсвую.
Озадачился я тут таким впросом - написать файтинг. Вообщем-то с написанием сценария действий персонажей на нажатия кнопок ничего сложного быть не должно. Передо мной встала проблема - написать движок марионетки. То есть, допустим, есть у нас человечек (формата "ручки-ножки-огуречик - вот и вышел человечек"), каждое из сочленений которого (рока, нога, кисть, голова) - отдельный мувик. У меня никак не получается написать "марионетку", чтобы все эти мувики были соединены между собой в определенных местах - суставах, были взаимно зависимы между собой. То есть, нужно, наверное, написать структуру мувиков, которые будут в определенных местахъ сочленяться, при этом если мы мышкой одину из конечностей дергаем, то дергается конечность, а за ней, по цепочке, и весь человечеку.
Марионетка вобщем.
помните. быть может, была такая флешька некоторое время, ходила по и-нету, где тетка падала в бесконечность, сталкиваясь с воздушными шарами, и можно было её подбрасывать мышкой.

Я, конечно же, не прошу написать мне сценарий и выложить. Во-первых, это вам напряг. а во-вторых - так мне не интересно.
Я просто хотел узнать, можт вы мне что-нибудь подскажете? А то, чесно гворя, пока что плохо представляю, как даже взяться за решение этой задачи.

iNils
22.05.2008, 20:14
Flash пишется как Флеш, без всяких мягких знаков.

Почитайте про инверсную кинематику.

ZergMaster
22.05.2008, 20:46
о, спасибо большое!
Да, ошибок вообще много в моем посте, ибо клава глючит очень...
А может тогда подскажете какую-нибудь литературу, или уроки по инверсной кинематике во flash? Потому что вот у книге Гурского "Flash 8 и ActionScript" ничего об этом нет.

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

Alex_beginner
22.05.2008, 21:34
ZergMaster!

Чет я твой последний пост ваще не понял! Мож как нить по-подробнее
раскроешь сказанное:eek:

ZergMaster
22.05.2008, 22:18
объясню подробно.
Допустим, есть мувик "hand_mc", который представляет из себя палку о двух концах.
Двигать эту палку легко: на onPress сделать hand_mc.startDrag.
Мне же требуется другое.
Нужно задать этому мувику две точки "A" и "B", где А - это левый конец палки, а В - правый. И чтобы на какой-нибудь onKeyDown или onPress на одной из этих точек, мувик перетаскивал соответсвующую сторону.

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

_____________
вообще в итоге хочется осуществить что-то вроде этого:
http://www.informatoriy.ru/index.php5?fileId=9128

DJ_Baton
22.05.2008, 23:22
дык центр мувика ты выбираешь сам, когда выделяешь его белая точка такая, её можно тягать это и есть центр, ну а делается это кпомоему вложениями мувиков цепляющимися друг за друга центрами

alexcon314
23.05.2008, 00:06
У мувиклипа не может быть нескольких точек привязки.
Такое перетаскивание делается не с одним мувиком. Прикрепите к концам палки по мувику и таскайте их, а палку перерисовывайте под новые координаты концов.
Вот только придется озаботиться тем фактом, что палка - штука жесткая и на движение концов придется накладывать кинематические связи.

ZergMaster
23.05.2008, 00:15
alexcon314
дык ведь в том то и дело.
как привязать палку одним концом к одному мувику, а другим к другому, чтобы она перемещалась в соответсвии с ними? По идее ведь её можно только центром к одному из них привязать. А если перерисовывать... ведь все равно надо задавать, что _х, _у начала палки соответсвует _х, _у мувика А, а _х, _у конца палки - _х, _у мувика В.

Ostgur
23.05.2008, 00:30
а нельзя использовать мувиклипы-точки, а между ними программно рисовать палки?

iNils
23.05.2008, 00:35
класс Matrix может трансформировать объект относительно любой точки.

ZergMaster
23.05.2008, 00:55
Ostgur можно. Только в итоге то все равно надо будет на скелет накладывать мувики с прорисованными отдельно частями тела.

черт, про Matrix в хэлпе нет ничего...
он там только в качестве параметра для beginGradientFill

iNils
23.05.2008, 00:59
Класс есть в Flash 8 и Flash CS3

ZergMaster
23.05.2008, 01:02
ну да, я пользуюсь Flash 8. Да, вижу, при наборе это слово становится синеньким...
Не подскажешь, как этот класс использовать?

iNils
23.05.2008, 01:07
Сначала хелп читать. А потом спрашивать, что не понятно.

Kuruki
23.05.2008, 01:51
ZergMaster, ваша ссылка не работает.
Может эта древняя флешка вам чем-нибудь поможет. Правда не знаю чем...:)

ZergMaster
23.05.2008, 02:09
эх, был бы исходник - помогла бы точно.
а helpa к flash 8 на русском, случаем, ни у кого нет? А то, блин, ничего не понимаю толком с этим матриксом..

Alex_beginner
23.05.2008, 09:58
iNils прав! Делается это с помощью класса Матрих и установки свойства клипа transform.matrix.

Как трансформить:

Matrix это Object со свойствами {a,b,c,d,tx,ty}

Расчет новых точек клипа по старым осуществляется по формулкам:

Xновый=а*Xстарый+с*Yстарый+tx
Yновый=b*Xстарый+d*Yстарый+ty

Т.е. задаешь сначала матрицу Matrix(полностью заполнив ее коэффициентами) и присваиваешь ссылку на нее свойству клипа transform.matrix и эге.

Но есть маленькая загвозтка. Ведь Вам нужно чтобы трансформации клипа происходили таким образом, чтоб средние по ширине координаты края клипа (конец палочки:)) совпадали с координатами движущейся мыши. Сие нудо реализовать расчетом системы вышепредставленных уравнений с нахождением коэффициентов a,b,c,d,tx,ty. Нетрудно догадаться что нужно подставлять вместо Xновый,Yновый. Т.е. имея три точки клипа Вы можете получить 2 системы уравнений. Одну для X из трех уравнений с 3-мя неизвестными. Одну для Y также с тремя уравнениями и тремя неизвестными. Решение этих уравнеий великолепно и просто получается методом Гаусса.

На этом все. Спасибо за внимание.

Psycho Tiger
23.05.2008, 15:00
ZergMaster, я так понимаю ты после захочешь добавить туда физики и сделать как ты говорил "девушку летяющюю в вечность"?
На мой взгляд, это не самая простая вещь, начинать нужно с чего нибудь попроще.
Извиняюсь за офтоп.