![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2008
Сообщений: 4
|
здрасти всем, пытаюсь написать аэрохоккей, и ну никак не могу избавиться от бага, проблема в следущем:при отбиении мяча иногда мяч пролетает сквозь биту а иногда просто залипает к ней, не могу понять почему...буду благодарен если хоть намекнете на проблему
![]() исходник прикрепил и рядом с ним реализованная игра вот именно к этой игре хочу приблизить свою но...увы. код не слизан! а вот ссылка на готовую игрулю iNils - сори Последний раз редактировалось big_shtorm; 24.07.2008 в 14:01. Причина: обновил исходник |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Здравствуйте big_shtorm!
Попробуйте использовать hitTest. Еще одно. Мне непонятно зачем на Symbol 1 навешен код? Почему бы сразу не на _root.
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 4
|
Alex_beginner ваше замечание учел, поправил код, попробывал hitTest (в общем в исходнике 3 разных способа обнаружения сталкновения) результат не очень красивый зато вроде мячь не проскакивает насквозь, но вот проблема с залипанием на биту осталась ((( причем она выевляеться когда скорость биты равна 0, пробывал сравить условие чтоб никогда не была равна нулю...при этом она липнет и дергаясь отлетает...я думаю что всетаки я чтото напартачил с функцией реакции на столкновение function reaction(). об этой функции рассказываеться в книге "Секреты разработки игр в Macromedia Flash MX" Джоб Макар вот так она выглядит у него для двух шаров типа бильярд:
function reaction(b1, b2, x1, x2, y1, y2, time) {
var mass1 = b1.mass;
var mass2 = b2.mass;
var xVel1 = b1.xmov;
var xVel2 = b2.xmov;
var yVel1 = b1.ymov;
var yVel2 = b2.ymov;
var run = (x1-x2);
var rise = (y1-y2);
var theta = Math.atan2(rise, run);
var costheta = Math.cos(theta);
var sintheta = Math.sin(theta);
var xVel1prime = xVel1*costheta+yVel1*sintheta;
var xVel2prime = xVel2*costheta+yVel2*sintheta;
var yVel1prime = yVel1*costheta-xVel1*sintheta;
var yVel2prime = yVel2*costheta-xVel2*sintheta;
var P = (mass1*xVel1prime+mass2*xVel2prime);
var V = (xVel1prime-xVel2prime);
var v2f = (P+mass1*V)/(mass1+mass2);
var v1f = v2f-xVel1prime+xVel2prime;
var xVel1prime = v1f;
var xVel2prime = v2f;
var xVel1 = xVel1prime*costheta-yVel1prime*sintheta;
var xVel2 = xVel2prime*costheta-yVel2prime*sintheta;
var yVel1 = yVel1prime*costheta+xVel1prime*sintheta;
var yVel2 = yVel2prime*costheta+xVel2prime*sintheta;
var b1.tempx = b1.xpos+b1.xmov*time;
var b1.tempy = b1.ypos+b1.ymov*time;
var b2.tempx = b2.xpos+b2.xmov*time;
var b2.tempy = b2.ypos+b2.ymov*time;
var b1.xmov = xVel1;
var b2.xmov = xVel2;
var b1.ymov = yVel1;
var b2.ymov = yVel2;
}
Последний раз редактировалось iNils; 09.07.2008 в 11:39. |
|
|||||
|
Столкнулась с такой же проблемой.
В моем случае я предполагаю, что такое безобразие происходит из-за того, что точек соприкосновения объектов получается много. Возьмем мячик (кружок), ударяется о стену. У кружка по радиусу получается до 360 точек соприкосновения. Скорость мяча все время разная, допустим за кадр он пробегает 5, будем так говорить, пикселей, тогда пока он будет отскакивать получается он проскочить еще пару пискелей, от чего и получается что он дерагется. Как решить этот вопрос? |
|
|||||
|
Эй ребята, как так, это очень многим поможет.
|
|
|||||
|
в исходнике все события отслеживаются в:
нужно как-то пытаться отслеживать столкновения биты с мячиком в onMouseMove. Я прицепил на основной таймлайн дополнительно: вроде не так заметны залипания... |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 4
|
Ребят, попробывал все сделать по книге...собрал необходимые функции в одну кучу и получилось неплохо...только вот для шаров которые катаються "сами по себе" типа бильярд...но когда перевожу управление одним шаром на мышь получается лажа ((( может надо както по другому подойти к этому всему подскажите кто сталкивался ато скоро ап стену уже убьюсь
![]() Последний раз редактировалось big_shtorm; 24.07.2008 в 14:02. |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 4
|
ура...
Проблему решил добовлением дополнительной проверки по сумме радиусов...которая вызывает функцию прощета новых векторных скоростей со статичным временным параметром...т.е. работают 2 проверки первая основная прощитывает на 1 кадр вперед (котроя к стати и не всегда срабатывала почемуто) и проверка по сумме радиусов. выкладываю исходники, может кому пригодяться иль лучше сделает...(не забыв об авторе )billard - это для бильярда и т.п. с сохранением почти всех законов физики(для добавления затухания нужно добавить переменную со значением от 0 до 1 и в каждом кадре умножать ускорение жаров на нее) airhockey - собственно хоккей. P.S. спосибо всем кто учавствовал. Последний раз редактировалось big_shtorm; 25.07.2008 в 10:06. |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|