Информация

Обсуждало 6 человек

Заметка номер 2393

Флейм
10 мая 2009 в 12:02:50

Ну вот как и обещал, я написал урок "Как создать эффект прыжка". Данный код не иделален, но он показывает принцип создания такого эффекта. Лучше будет если вы его доработаете. Ну начнем. Создайте на сцене два объекта: один будет обычным прямоугольником с именем "map", а другой будет обычным кружком с именем "hero". Герой должен находится выше карты, иначе он упадет. На все тела на Земле действует гравитация (благодаря ей мы и не улетаем в космос). Поэтому для начала в коде мы должны сделать так, чтобы наш герой все время падал вниз. Для этого сначала создаем переменную "gravity" и делаем так чтобы наш герой все время падал вниз:
onLoad = function () { gravity = 0.9;//создаем гравитацию};onEnterFrame = function () { hero._y += 5*gravity;//Падение героя}

Теперь наш герой будет падать, но нам надо его оставить на карте, поэтому ищем пересечение его с картой:
onLoad = function () { gravity = 0.9;//создаем гравитацию};onEnterFrame = function () { hero._y += 5*gravity;//Падение героя if (map.hitTest(hero)) {//Поиск пересечения героя с картой hero._y -= 5*gravity;//Если пересечение произошло, тоинвертируем гравитацию, т.е герой летит вверх. }}

Осталось сделать сам прыжок. Для этого мы создадим еще одну переменную "timer". Она нужна для того, чтобы прыжок когда-нибудь закончился. И это окончательный код:
onLoad = function () { timer = 0;// в Самом начале таймер равен 0 gravity = 0.9;//создаем гравитацию};onEnterFrame = function () { hero._y += 5*gravity;//Падение героя if (map.hitTest(hero)) {//Поиск пересечения героя с картой hero._y -= 5*gravity;//Если пересечение произошло, тоинвертируем гравитацию, т.е герой летит вверх. timer = 0; Если произошло столкновение, то обнуляем таймер } if (Key.isDown(Key.SPACE)) {//Нажимаем пробел timer++; //Запускаем таймер if (timer<5) { //И если он меньше 5 то герой прыгает, иначе он снова падает hero._y -= 40*gravity;//Ну сам эффект прыжка } }};

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

Обсуждение (вниз)

Не хватает только вашего мнения. Зарегистрируйтесь, чтобы написать!

10 мая 2016 в 17:03:50

Нет

09 мая 2016 в 01:30:00

Кто знает ответы на тест,очень надо?)


31 июля 2009 в 16:24:23

Когда буду дома, сразу испробую код

19 июля 2009 в 01:12:48

в первом посту SemAn написал, что раньше клип "hero" не доходил до конца карты и виснул на расстоянии от 1 до 4 и что типа он убрал этот баг.
Дело в том, что он его не убрал, а просто поменял условия пересечения объектов на противоположные и теперь клип не виснет, а проваливается.
И этот баг присутствует во всех кодах, написанных здесь.
Сам целый день сегодня сидел и пытался его убрать.. нихрена не получается.
...мозги не варят.

11 мая 2009 в 17:07:15

Дне мне одному. Вон SemAn как отредактировал код. Мужик просто

11 мая 2009 в 13:06:54

спасибо большое куфлеш!

10 мая 2009 в 16:23:48

Долго парился что-бы сделать свой код...
сделал...
видоизменил старый и теперь падения можно редактировать намного проще...

<table class="win_text" style="width:100%;height:100px;background-color:#FFFFFF"><tr><td><div class=""><pre>onLoad = function () {timer = 0; //счетчик предназначеный для ограничения полета вверхgravity = 10; //скорость полета(прыжка)fly=true // состояние полета-общееtimeUp=false} // состояние полета вверхonEnterFrame = function () { //Этот код отвечает за точ то //1-клип летит вверх//2-клип падает вниз//3-клип в состоянии покояif (!map.hitTest(hero)) { if (fly==true) { if (timer <10 &amp;amp;&amp;amp; timeUp==true){hero._y -=gravity;timer++} else if(timer >= 0){timeUp=false;timer = 0; hero._y +=1.2*gravity;}}}else(fly=false) //кнопкка прыжок if (Key.isDown(Key.SPACE) &amp;amp;&amp;amp; fly==false) {hero._y -=gravity; fly=true;timeUp=true;timer++}};</pre></div></td></tr></table>

Я думал скопировать сначало код Дракулы, но у меня хватило сил исправить этот)))

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

10 мая 2009 в 13:13:42

Я помню неделю назад пытался сделать, не получалось без багов, там просто был хиттест связанный с циклом)))

Че то интересно стало))) Я тоже через годик или пол игру хочю начать делать)))
Так то практика пригодиться)

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

10 мая 2009 в 13:07:19

Да. Так намного лучше. Молодец

10 мая 2009 в 13:01:34

Вот измененный код для 1 прыжка, без двойных

<table class="win_text" style="width:100%;height:100px;background-color:#FFFFFF"><tr><td><div class=""><pre>onLoad = function () {timer = 0;gravity = 0.9;fly=true /* новая переменная отвечающая в каком состоянии находится клип "хиро" */}; onEnterFrame = function () { //здесь говориться о том что если хиро не пересекаеться с картой//то он падает и состоянии склипа "fly=true"-он падает-правда//если это не так, то он перестает падать и//состоянии склипа "fly=false"-он падает-не правдаif (!map.hitTest(hero)) {hero._y +=3*gravity; timer = 0; fly=true;} else {fly=false} if (Key.isDown(Key.SPACE) &amp;amp;&amp;amp; fly==false) {timer++; fly=true;if (timer<5) {hero._y -= 40*gravity;} }};</pre></div></td></tr></table>

10 мая 2009 в 12:50:52

Ну я же написал просто пример как реализуется эффект прыжка. Этот код дорабатывать по любому надо.

10 мая 2009 в 12:47:23

kuflash

Я сам учюсь по немногу)))
Практика - вещ хорошая)))
Особенно когда не тебе что-то надо сделать, а надо кому-то другому)))

Счас напишу исправленный код с коментами

10 мая 2009 в 12:46:02

Еще один минус, надо сделать так что-бы во время прыжка или падения он не мог прыгать, счас исправлю... по методу дракулы, короче говоря, используя логическую переменную

10 мая 2009 в 12:45:57

Возможно. Я просто не стал проверять изменяя значения. Ну ты молодец раз нашел баг

10 мая 2009 в 12:43:41

Я решил себе волю немного улечшить код

onLoad = function () {timer = 0;gravity = 0.9;};

onEnterFrame = function () {
//начало изменений
if (!map.hitTest(hero))
{hero._y += 5*gravity; timer = 0; }
//конец изменений
if (Key.isDown(Key.SPACE))
{timer++;
if (timer<5) {hero._y -= 40*gravity;}
}};


В чем же плюс твоего измененного кода!!!

Дело в том что когда происходит пересечение 5-5
но, минус в том что сам клип не доходит до конца до карты а виснет на расстоянии от 1 до 4
Fundux.ru v.3.0 © 2006-2021 AleXNoD
Портал русских флеш игр и flash мультов