Создание крутящего барабана.
| |
Rikushi | Дата: Среда, 16 Ноября 2011, 15:21 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Требуется создать барабан(просто круглый спрайт), который будет вращаться вокруг собственной оси(как в поле чудес). Барабан использует механику вращения, как галактика в игре Spore. То есть, тыкаем на барабан, дергаем мышкой, отпускаем мышку, барабан начинает вращение. С той скоростью, какой импульс мы задали рывком мыши. Так же, пока мышь просто зажата, барабан вращается за курсором мыши. Также нужно узнать скорость вращения этого барабана. И при определенной скорости, нужно чтобы произошло событие.
Как такое реализовать? Какой нибудь плагин или стандартные методы?
Сообщение отредактировал Rikushi - Среда, 16 Ноября 2011, 15:24 |
|
| |
MoonKing | Дата: Среда, 16 Ноября 2011, 15:33 | Сообщение # 2 |
Delphi'ст
Сейчас нет на сайте
| Rikushi, Хмм... Возможно, такое можно наваять с помощью Питона...
Когда-нибудь я создам свой ЯП. С блэкджеком и шлю... хотя нет, этого не будет.
|
|
| |
allxumuk | Дата: Среда, 16 Ноября 2011, 15:50 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| Питон лучше вообще не использовать. Тут нужно подумать, может с физикой побаловаться.
Любой дурак может написать программу, которую поймёт компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты.
|
|
| |
Vinchensoo | Дата: Среда, 16 Ноября 2011, 15:53 | Сообщение # 4 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Таймеры есть в сцирре? Замерить время и перемещение мыши за это время, найти скорость мыши, это будет линейная скорость барабана, после вычислить угловую скорость, готово.
|
|
| |
Rikushi | Дата: Среда, 16 Ноября 2011, 17:19 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Quote (allxumuk) может с физикой побаловаться Баловался с бихэйворами физикс и драгндроп. Ничего хорошего баловство не принесло.
Quote (Vinchensoo) после вычислить угловую скорость Как-то слишком сложно. Наверняка есть более простое решение. Во многих флэш играх есть подобная система, навряд ли каждый разработчик делал столь фундаментальные вычисления, чтобы сделать небольшой геймплейный элемент, для своей игры третьего сорта.
|
|
| |
Vinchensoo | Дата: Среда, 16 Ноября 2011, 17:24 | Сообщение # 6 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Quote (Rikushi) Как-то слишком сложно. Наверняка есть более простое решение. Во многих флэш играх есть подобная система, навряд ли каждый разработчик делал столь фундаментальные вычисления, чтобы сделать небольшой геймплейный элемент, для своей игры третьего сорта. 3 формулы сложно? Я ничего не шарю в программировании, видимо. Окай.
|
|
| |
Rikushi | Дата: Среда, 16 Ноября 2011, 17:39 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| Vinchensoo, если эта задача для тебя так проста, напиши исходник пожалуйста. Мне она не по силам.
|
|
| |
Vinchensoo | Дата: Среда, 16 Ноября 2011, 17:46 | Сообщение # 8 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Rikushi, я никогда даже не скачивал Констракт, так что не помогу тут ничем. Вопрос даже не в нем, вопрос в знании курса школьной физики, конец 9 класса)
|
|
| |
noTformaT | Дата: Среда, 16 Ноября 2011, 17:49 | Сообщение # 9 |
Ukrainian independent game developer
Сейчас нет на сайте
| Quote (Rikushi) Требуется создать барабан(просто круглый спрайт), который будет вращаться вокруг собственной оси(как в поле чудес). Констракт не знаю, и его внутренний скриптовый апи тоже, но могу схематично описать....
******************************************************
Code var rotationSpeed:Number = 180; //скорость вращения барабана в секунду, указывается в градусах var rotationFadeSpeed:Number = 20; //скорость затухания барабана, тоже в секунду var baraban:Sprite = new Sprite(); // спрайт барабана var renderSpeed:Number = 30 / 1000; //скорость отрисовки экрана (фпс) в секундах. 30 фпс / 1 секунду получаем скорость отрисовки в 1 кадре ~1 мс. В некоторых яп и движках это DeltaTime
function Update():void // событие возникает каждый кадр { rotationSpeed -= rotationFadeSpeed * renderSpeed;//отнимаем от скорости вращения скорость затухания, умноженное на время отрисовки if(rotationSpeed < 0) // если скорость меньше 0, то... { removeEvent(Update);// снимаем события обновления кадра, или это просто напросто конец вращения барабана } baraban.rotation += rotationSpeed * renderSpeed; //поворачиваем барабан на граду, который равен скорость барабана умноженная на скорость отрисовки... }
@noTformaT
Сообщение отредактировал noTformaT - Среда, 16 Ноября 2011, 17:51 |
|
| |
Rikushi | Дата: Среда, 16 Ноября 2011, 18:14 | Сообщение # 10 |
почетный гость
Сейчас нет на сайте
| Vinchensoo, Вот смотри, нужно брать начальную и конечную позицию мыши, когда кликнули и когда отпустили. Провести между ними линию. Это будет вектор приложения силы, к барабану. Длинна вектора, будет величиной силы. Результирующей силой, действующей на барабан будет прямая пропорция от длинны вектора и обратная от времени воздействия. Т.е. чем длиннее вектор и короче время воздействия, тем больше сила, тем выше скорость. И в обратном порядке. Далее следует учитывать вектор направления. Причем придется учитывать начальную и конечную точку вектора. Так как если мы начали прилагать усилие от точки ниже оси вращения, к точке которая еще ниже оси вращения, то барабан не должен крутиться. Так как мы нижнюю часть, тянем в низ же. Так же нужно при расчете вектора брать не просто точку когда юзер начал кликать, т.к. юзер может сначала по вращать барабан мышкой, а потом дернуть раскрутку. А за точку отсчета брать именно точку начала рывка. Что-то задача мне не кажется тривиальной, если исполнять ее в самописном коде.
Добавлено (16.11.2011, 18:05) --------------------------------------------- noTformaT, в задачу не входит просто раскрутить барабан. Это элементарно. В задачу входит сделать физическую модель раскрутки барабана. Чтобы пользователь мог его раскручивать как пожелает. И узнать скорость его поворота.
Добавлено (16.11.2011, 18:14) --------------------------------------------- Ладно, аналогия с барабаном не всем понятна. Приведем более ясную концепцию. Вы раскручивали когда нибудь колесо у велосипеда? Рукой? Колесо само собой не касается земли. Вот мы хватаем велосипедное колесо и тянем куда нибудь в сторону. Колесо начинает вращаться в ту сторону, в которую мы начали его крутить, с той силой, которую мы задали. И даже если мы не прилагаем силу, оно продолжает крутиться некоторое время. И мы можем приложив еще усилие, заставить его крутиться сильнее.
Вот такую систему мне нужно получить. При этом иметь возможность получить скорость вращения. И да все это на констракте.
Сообщение отредактировал Rikushi - Среда, 16 Ноября 2011, 18:14 |
|
| |
noTformaT | Дата: Среда, 16 Ноября 2011, 18:23 | Сообщение # 11 |
Ukrainian independent game developer
Сейчас нет на сайте
| Quote (Rikushi) noTformaT, в задачу не входит просто раскрутить барабан. Это элементарно. В задачу входит сделать физическую модель раскрутки барабана. Чтобы пользователь мог его раскручивать как пожелает. И узнать скорость его поворота.
ммм шаг 1: ставим обработчик на событие нажали ЛКМ:
шаг 2: в обработчике получаем позицию курсора, ставим обработчик на событие движения мыши.
шаг 3: в обработчике события движения мыши - получаем координаты курсора.
шаг 4: У нас есть две координаты курсора, А - координаты во время нажатия, Б - координаты во время рывка. Вектор направления В = А - B;
шаг 5: У нас есть вектор направления. Теперь просто умножаем скорость вращения его на полученный вектор...
Все.....
@noTformaT
Сообщение отредактировал noTformaT - Среда, 16 Ноября 2011, 18:24 |
|
| |
Vinchensoo | Дата: Среда, 16 Ноября 2011, 18:34 | Сообщение # 12 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Rikushi, слишком усложняешь, тебе же не для физических эксперементов нужно))
|
|
| |
Rikushi | Дата: Среда, 16 Ноября 2011, 18:49 | Сообщение # 13 |
почетный гость
Сейчас нет на сайте
| Помимо всего прочего, в констракте нет таймера или я его не нашел. И события онМаусМув тоже не находится.
|
|
| |
Vinchensoo | Дата: Среда, 16 Ноября 2011, 18:51 | Сообщение # 14 |
Злобный социопат с комплексом Бога
Сейчас нет на сайте
| Rikushi, это уже беда.
|
|
| |
noTformaT | Дата: Среда, 16 Ноября 2011, 18:55 | Сообщение # 15 |
Ukrainian independent game developer
Сейчас нет на сайте
| Quote (Rikushi) в констракте нет таймера или я его не нашел http://gcup.ru/forum/39-3039-1
@noTformaT
|
|
| |
Rikushi | Дата: Четверг, 17 Ноября 2011, 01:54 | Сообщение # 16 |
почетный гость
Сейчас нет на сайте
| noTformaT, это всего лишь условие, которое будет выполняться каждые Х секунд. Извлечь из него информацию, сколько времени прошло между кликами не представляется возможным.
Добавлено (16.11.2011, 22:00) --------------------------------------------- allxumuk, на тебя вся надежда. Ты единственный, кто разбирается в констракте больше всех. Даже самый упрощенный вариант подойдет. Просто раскручивать мышкой спрайт, и если он раскручивается с определенной скоростью, происходит событие. Допустим спрайт исчезает.
Балуюсь с физиксом и якорем, но барабан ведет себя не адекватно. То вращается слишком быстро, то не вращается вовсе.Добавлено (17.11.2011, 01:54) --------------------------------------------- Вот, мне нужна абсолютно такая механика, ка здесь. В раунде про ветряные мельницы.
http://www.ninjadoodle.com/clickplay-3/
Сообщение отредактировал Rikushi - Среда, 16 Ноября 2011, 22:02 |
|
| |
allxumuk | Дата: Пятница, 18 Ноября 2011, 04:26 | Сообщение # 17 |
старожил
Сейчас нет на сайте
| Quote (Rikushi) allxumuk, на тебя вся надежда. Сегодня вечером скину исходник. А пока скрин: https://skydrive.live.com/?cid=51754c48fd51f33a&client=wnf&Bsrc=TWITRAPXX&Bpub=SN.Notifications&id=51754C48FD51F33A%21253 просто с интернетом перебои, сыграл на телефон и залил куда получилось.
Любой дурак может написать программу, которую поймёт компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты.
|
|
| |
Rafl | Дата: Пятница, 18 Ноября 2011, 15:50 | Сообщение # 18 |
частый гость
Сейчас нет на сайте
| Тоже решил подумать над реализацией "чудо" барабана. Очень простой исходник получился . Работет как швейцарские часы! Скорость вращения - Angular Velocity отображается в text.
Исходник - скачать (50 кб)
Исходнику нужен плагин mousemove - скачать (81 кб)
Сообщение отредактировал Rafl - Пятница, 18 Ноября 2011, 16:40 |
|
| |
Rikushi | Дата: Пятница, 18 Ноября 2011, 16:42 | Сообщение # 19 |
почетный гость
Сейчас нет на сайте
| Rafl, иди сюда, я тебя расцелую. Действительно все работает. И элементарно в реализации.
Плюсануть репу можно только через 6 дней. Видимо местный спам фильтр.
Сообщение отредактировал Rikushi - Пятница, 18 Ноября 2011, 16:43 |
|
| |
Markoffka | Дата: Четверг, 22 Декабря 2011, 09:05 | Сообщение # 20 |
Pixel Logic
Сейчас нет на сайте
| побалуйся с Поведением Rotate
|
|
| |
|