Делаем во флэше движение персонажа как в Crimsonland

12.02.2009, автор Stormit, рубрики: ActionScript, Flash игры, Игровые баннеры

Думаю, что многих в своё время зацепила игра Crimsonland. Лично мне нравится как там реализовано управление главным героем. При нажатии клавиши “Вверх” персонаж смещается не строго вверх, а туда, куда смотрит. Кнопки “Вправо” и “Влево” только поворачивают героя и меняют направление движения.

Такое движение сделать во флеше очень просто, достаточно знать формулы синуса и косинуса. Этим мы и займёмся.

Для начала нам нужен сам объект, пусть это будет танк, так наглядней. Он состоит из двух частей: ходовая часть (foot) и башня (body). Дальше мы будем поворачивать башню за мышкой, поэтому я вынес её в отдельный клип. Сам клип - танк будет называться hero. Слоем выше в кадре будет весь скрипт, управляющий движением. Внутри клипа foot сделана анимация вращения колёс (будет запускаться и останавливаться скриптом). Всё должно быть как на слайде 1.

Для перемещения танка нам нужно хранить всего 2 переменные: скорость перемещения и скорость поворота. Угол поворота можно всегда считать с самого клипа hero. Далее переводим данные из полярной системы координат в Декартову. Формулы преобразования на слайде 2.

В кадре пишем управляющий код:

var step = 2; //скорость перемещения
var rotDirSpeed = 5; //скорость поворота
 
onEnterFrame = function () {
	if (Key.isDown(Key.LEFT)) {
		hero._rotation -= rotDirSpeed; //поворачиваем танк влево
	} else if (Key.isDown(Key.RIGHT)) {
		hero._rotation += rotDirSpeed; //поворачиваем танк вправо
	}
 
	var dirAngle = hero._rotation / 180 * Math.PI; //угол поворота танка в радианах
	if (Key.isDown(Key.UP)) {
		hero.foot.play(); //запускаем анимацию колёс
		hero._x += step * Math.cos(dirAngle); //проекция скорости на ось x
		hero._y += step * Math.sin(dirAngle); //проекция скорости на ось y
	} else if (Key.isDown(Key.DOWN)) {
		hero.foot.play()
		hero._x -= step * Math.cos(dirAngle); //идём
		hero._y -= step * Math.sin(dirAngle); //назад
	} else {
		hero.foot.stop(); //останавливаем анимацию колёс
	}
}

Если всё сделано правильно, танк должен ездить как на слайде 3.

Пока очень примитивно, управляясь только с клавиатуры. Этого нам мало. Настоящий танк должен уметь крутить башней и стрелять, иначе толку мало. Раз так, то внутри клипа body делаем анимацию выстрела (не забываем в первом кадре поставить stop()). Башня будет крутиться вокруг центра клипа, так что выставьте его корректно. Немного перепишем код и получим слайд 4.

var step = 2;
var rotDirSpeed = 5;
 
onEnterFrame = function () {
	if (Key.isDown(Key.LEFT)) {
		hero._rotation -= rotDirSpeed;
	} else if (Key.isDown(Key.RIGHT)) {
		hero._rotation += rotDirSpeed;
	}
 
	var mDx = _xmouse - hero._x;
	var mDy = _ymouse - hero._y;
	var mAngle = Math.atan2(mDy, mDx);
	hero.body._rotation = -hero._rotation + mAngle / Math.PI * 180; //поворачиваем башню за мышкой
 
	var dirAngle = hero._rotation / 180 * Math.PI;
	if (Key.isDown(Key.UP)) {
		hero.foot.play();
		hero._x += step * Math.cos(dirAngle);
		hero._y += step * Math.sin(dirAngle);
	} else if (Key.isDown(Key.DOWN)) {
		hero.foot.play()
		hero._x -= step * Math.cos(dirAngle);
		hero._y -= step * Math.sin(dirAngle);
	} else {
		hero.foot.stop();
	}
};
onMouseDown = function () {
	hero.body.play(); //стреляем по клику
};

Чтобы башня стреляла (стреляем по клику) не так часто, проще всего продлить анимацию выстрела.

С механикой понятно, но ведь в Crimsonland бегает не танк, а матёрый боец. Попробуем перерисовать и сделать человека. Всё работает, только тело неестественно крутится на все 360 градусов (слайд 5).

Сделаем так, чтобы корпус мог поворачиваться вправо и влево только на 90 градусов от направления движения. Чтобы игроку было понятнее куда можно стрелять, да и вообще, куда повёрнут главный герой, обозначим это графически. Немного меняем код и получаем слайд 6:

var step = 2;
var rotDirSpeed = 5;
 
onEnterFrame = function () {
	if (Key.isDown(Key.LEFT)) {
		hero._rotation -= rotDirSpeed;
	} else if (Key.isDown(Key.RIGHT)) {
		hero._rotation += rotDirSpeed;
	}
 
	var mDx = _xmouse - hero._x;
	var mDy = _ymouse - hero._y;
	var mAngle = Math.atan2(mDy, mDx);
	hero.body._rotation = -hero._rotation + mAngle / Math.PI * 180;
	if(hero.body._rotation < -90) { //ограничение поворота влево
		hero.body._rotation = -90;
	} else if(hero.body._rotation > 90) {
		hero.body._rotation = 90;//ограничение поворота вправо
	}
 
	var dirAngle = hero._rotation / 180 * Math.PI;
	if (Key.isDown(Key.UP)) {
		hero.foot.play();
		hero._x += step * Math.cos(dirAngle);
		hero._y += step * Math.sin(dirAngle);
	} else if (Key.isDown(Key.DOWN)) {
		hero.foot.play();
		hero._x -= step * Math.cos(dirAngle);
		hero._y -= step * Math.sin(dirAngle);
	} else {
		hero.foot.stop();
	}
};
onMouseDown = function () {
	hero.body.play();
};

Персонаж ходит и стреляет. Слегка необычное управление вносит в игру дополнительный интерес. Чтобы проверить его на играбельность, забрасываем нашего бойца в реальные условия и даём неограниченный боезапас. Оказывается, пока мы всё это делали, Землю захватили зомби и надежда теперь только на нашего героя. Удачного вам истребления нежити (слайд 7)!

Интересно на 72%

(101) Хитрых на тему «Делаем во флэше движение персонажа как в Crimsonland»

  1. Bobos

    Уря! А мы думали ты уже умер

  2. Life

    молодец, что не забросил блог) мы те6я ждали)

  3. Nord

    Привет!
    Классный у тебя проект, очень интересные и красочные и оригинальные статьи!

    Вопрос. На AS3 планируешь переходить?

  4. Виктор

    Очень здорово! Восхищаюсь твоим умением рисовать.
    Все довольно просто, но тем не менее интересно!
    (фигура дергается влево-вправо, когда мышь за спиной персонажа - но это так, маленькие придирки ;)

    Рад тому, что блог жив! Желаю чтобы были силы, время и возможности продолжать вести его ;) Творческих успехов!

  5. Psih

    Дождались :)
    Как всегда, отличная статья.
    Но управление персонажем совсем не такое как в CrimsonLand.
    Оно интересное, добавляет что то свое в геймплей, но на мой взгляд не очень удобное.

    Тоже заинтересовал вопрос почему опять AS2 ? Процесс разработки “вирусного кризиса ” оставил желать лутшего?

  6. Виктор

    А я за AS2… Зачем что-то усложнять, если можно сделать в разы проще и понятнее? Да, может быть не совсем правильно, может AS2 это “недоязык”, но… Мне он больше нравится :)

  7. Psih

    2Виктор - ну для дизайнера AS2 может проще и понятнее (не буду спорить), а для программиста однозначно AS3 (особенно если программист имел опыт программирования на других языках с использованием ООП ).

    Интересно что скажет Денис ? :)

  8. Stormit

    Спасибо, я и не ожидал такого отклика.
    Более-менее крупные игрушки я теперь пишу на AS3, а на AS1 мне здесь проще писать: меньше строк кода и быстрее получается.

  9. GB

    Кто захочет на AS3 сам портирует, хотя я сам АС2 терпеть уже не могу…

  10. murejib

    Денис все верно делает - чем меньше цифра после AS - тем шире аудитория.
    Никогда флеш не получил бы такого расрпостранения, если бы не ранние версии его языка, доступные даже таким гуманитярям как я ))) Предков уважать надо.
    И да, отличная статья ) Снова синус и косинус на коне )

  11. VapeS

    А мне поворот персонажа на 360 градусов больше понравился.

  12. shaman4d

    “Лично мне нравится как там реализовано управление главным героем. При нажатии клавиши “Вверх” персонаж смещается не строго вверх, а туда, куда смотрит. Кнопки “Вправо” и “Влево” только поворачивают героя и меняют направление движения.”

    Не было там такого НЕ БЫЛО. Если бы там бы ло как вы написали, то как раз играть с тем способом управления который вы реализовали было бы очень сложно. Это как раз и видно в 7 экране вашей презентации. А было там очень удобно - клавиши управления перемещали героя в абсолютных направлениях, а мышкой крутилось туловище с оружием.

  13. калякамаляка

    ура с возращением!!!
    пиши хоть строчечку инода…
    хоть просто if (1 = 1) trace(1)
    ведь мы тя полюбили и скучаем без тя

    PS: ты сейчас чтото вояешь, так кидай нам микро кусок из работы и говори что ето хитрость - головоломка

  14. Stormit

    давно это было, остались одни воспоминания, но мне казалось что именно так… поставлю ещё разок

  15. PagaN

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

  16. Life

    хитрый, у меня какая-то беда. вроде пишу всё по твоим интсрукциям, а в итоге танчеГ стоит на месте и как-то невесело крутит колёса… если есть исходник, не мог бы выслать его на мыло lifeissimple@mail.ru
    заранее спс

  17. DataGreed

    “Думаю, что многих в своё время зацепила игра Crimsonland. Лично мне нравится как там реализовано управление главным героем. При нажатии клавиши “Вверх” персонаж смещается не строго вверх, а туда, куда смотрит. Кнопки “Вправо” и “Влево” только поворачивают героя и меняют направление движения.”

    Замечу, что это способ управления персонажем в Crimson Land является нестандартным (да и неудобным для многих игроков). По умолчанию персонаж двигается именно по направлению нажатой клавиши.

    Но для танка, конечно, подобное управление довольно удобно :)

  18. Stormit

    to PagaN
    Выбери себе простой стиль рисования (минимум линий и т.д). Например Shag или Cartoon Networks.
    Передавай всё квадратными формами, если хочешь, а всем будешь говорить что это твой стиль :)

    to Life
    Не знаю, вроде расписал всё. Если есть клип с именем hero и на той же линейке слоем выше в кадр скопирован код - танк должен ездить.

  19. zzarzz

    народ сделайте пож видео урок….я ничего непонял

  20. UncleBoB

    Спасибо за очень хорошие уроки. У меня целых 3 вопроса, надеюсь получить ответ:

    Первый и самый простой. Как была сделана надпись “Еще раз”?

    Второй и сложный. Как Вы прописывали столкновения, очень хотелось бы, чтобы Вы продлили урок, с описанием создания 7 кадра.

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

    Спасибо.

  21. Stormit

    1) шрифт “Beast Impacted”
    2) столкновения проверяются каждый кадр через hitTest() пули с каждым монстром (с каким-то символом внутри монстра)
    3) движок такой же как и у главного героя, они всегда идут вперёд (куда смотрят), только поворачиваются всегда строго на жертву.

  22. DataGreed

    “2) столкновения проверяются каждый кадр через hitTest() пули с каждым монстром (с каким-то символом внутри монстра)”

    При увеличении скорости монстров или пуль, пули смогут пролетать сквозь монстров, если не повезет и пуля провериться в кадре до и в кадре после пролета монстра :)

  23. Stormit

    Всё нормально если скорость пули в пикселах не превышает её длину (ну и к зомби это тоже относится) :)

  24. DataGreed

    Ждем урока с трейсингом :)) Хотя особенно пытливые могут найти неплохие примеры от разработчиков N :)

  25. Вероника

    Да, жаль что у меня не получиться…

  26. Сашка

    Вот спасибо. Я правда такие штуки давно уже пробовал реализовать, но все равно интересно поглядеть на разное исполнение. Спасибо.

    ЗЫ. не пропадай смотри (а чужим нельзя ничего постить?).

  27. Димон

    Помогите,добрые люди.Хочу сделать свою игру на флеш.Столько идей накопилось в голове.Пробовал изучать програмирование но нихрена не понял(может потому что плохо читал или плохо написано).Хочу сделать РПГ с широким спектром возможностей(реализовать различный транспорт,сложную систему развития персонажа и всё такое З.Ы. это я канешно широко замахнулся))) ),Ченить типо сталкера,тока 2d,вид сверху.Вышлите мне на мыло плиз несколько подробных,понятных,наглядных уроков.Пожалуйста…очень прошу!!!

  28. Димон

    Мыло nrjyzr@yandex.ru

  29. Vishd

    2Димон: Поржал )))))))))))))))))))
    “Пробовал изучать програмирование но нихрена не понял”.
    Бу-га-га!
    Сколько я повидал людей пишущих подобное, они “нихрена не понимают” и через 10 лет.

    С таким подходом программистами не становятся.
    Учись учись и еще раз учись. Сам! Иначе так и будешь всю жизнь напрягать всех вокруг - “пришлите мне то”, “помогите сделать это”…

  30. Алексей

    Плохо, что не показал как создать движение пули и создания и “искусственного интеллекта” - зомби. Жаль… Хоть и за это спасибо.

  31. Stormit

    Могу рассказать об этом, только нового мало будет. Те же принципы применяются к перемещению пули и зомби (появятся функции добавления пули и зомби и проверка на попадание). А интеллект соответствует живому трупу - тупо поворачиваться и идти на свою жертву.

  32. Димон

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

  33. Psih

    Димон - вот те ссылки
    http://www.gamedev.ru/articles/
    http://www.dtf.ru/articles/articles.php
    но про игру “Мечту” - забудь. Если начнешь с маленького и сделаешь несколько простеньких игр или демок (змейка, тетрис, пакмен, линии). Сделаешь не просто копи-пастом а с пониманием, тогда и желание делать РПГ - отпадет само сабой.

  34. Ranzer

    Отличный блог! Немедленно подписываюсь…

  35. Сашка

    2Алексей:
    а чего там с пулями? Работает так же как персонаж, только повернуть нельзя.
    Задаешь угол выстрела, скорость, вычисляешь смещение по иксу и игреку и двигаешь потихоньку.

    // это задается один раз
    angle = 50
    speed = 5
    dx = speed * Math.cos(angle*Math.PI/180);
    dy = speed * Math.sin(angle*Math.PI/180);
    //а этим двигаешь потихоньку (или по-быстрому)
    burrel_mc._x +-= dx;
    burrel_mc._y +-= dy;

    с монстрякой после каждого движения корректируешь его поворот, чтобы точно на тебя пер. Там интеллектом и не пахнет (от мертвецов другим пахнет наверное :)

  36. Сашка

    burrel_mc._x +-= dx;
    burrel_mc._y +-= dy;
    ы, откуда вылезло? там просто += без минусов %)))

  37. Gecko

    А можно продолжения с добавлением монстров и стерльбой? ))) Очень хоцца доделать)

  38. glkn

    А расскажите пожалуйста, как сделать, чтобы он не поворачвался вправо-влево от нажатия стрелок… а шёл туда…
    То есть… я использую WASD для перемещения… “hero” перемещается в 8 направлениях… вперёд-назад-вправо-влево-и по диагоналям… перемещатся-то он перемещается, а вот как поварачивать “foot” в нужную сторону…

  39. Stormit

    А в чём проблема?
    Это ещё проще. Просто смещайте его по _x или _y если нажата нужная клавиша. Если зажата клавиша LEFT, _x уменьшаем, если RIGHT - увеличиваем. То же с _y.

  40. Мавр

    Ха))ваще по теме статья,сейчас буду Crimsoland 5 создавать)))))

  41. glkn

    …ненене… я смещать понял как… я не понял, как поворачивать нижнюю часть тела в нужном направлении… при нажатии RIGHT он идёт направо, но ноги так и идут вперёд…
    Вот… неговоря уже о диагонали…

  42. Stormit
    hero._rotation = -180; //left
    hero._rotation = 0; //right
    hero._rotation = -90; //up
    hero._rotation = 90; //down
    
  43. glkn

    …бррр… прошу прощения, может я не правильно обьясняю…
    Это я всё знаю…
    При нажатии кнопки “w” и кнопки “d” ‘hero” идёт по диагонали вверх-направо… но “foot” не поворачивается на 45 градусов.
    И как это сделать, я не понимаю…
    …простите, что туплю… но у меня никак не выходит сделать…

  44. Stormit

    Смотря как он у вас движется (можно нажатие клавиш проверять).
    В любом случае угол поворота можно вычислить так:
    hero._rotation = Math.atan2(speedY, speedX) / Math.PI * 180;

  45. glkn

    Уважаемый Stormit, а можно вам письмо написать, и исходник показать?
    Мой адресс: glkn@yandex.ru

  46. Stormit

    Мне свободно можно слать письма вот сюда: contact[лайка]xitri.com
    Работает спам-фильтр, так что пишите “человеческие” письма

  47. zloyDEAD

    Я не знаю насколько правомерно давать ссылки на сайты, но для начинающих, которые хотят написать свою РПГ существует уже давно ресурс http://flashdocs.net (не сочтите за рекламу, я там наприер не обитаю)

  48. Stormit

    Судя по последним новостям, действительно давно, а если смотреть на google PR, то гугл его ещё даже не проиндексировал. В любом случае сайт по теме.

  49. noode

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

  50. Stormit

    Ну а как писать, что символ создаётся по нажатию клавиши F8 а анимация во флеше бывает 2-х типов: шейпморфинг и твининг? Так это есть на других сайтах, здесь только ньюансы и полезные готовые решения.
    Сложно объяснить чтобы охватить всю аудиторию, одним будет непонятно, другим слишком разжёвано. Поэтому я рассчитываю что люди знают что такое флеш, знают где панель инструментов, умеют создавать символы, делать анимацию и знают где и как писать Actionscript.

  51. Sasha9132

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

  52. Toto

    Почему когда при нажатии кнопок ап и давн танк двигается не той стороной? (он как бы смещается просто в сторону - едет боком) уже 100 раз перепроверил код.

  53. Алексей

    Toto:
    Зайди в объект Танк и поверни его на 90 градусов, если не повезет будет ехать задом, а если повезет - передом.

  54. noode

    у меня все отлично работает, но одно НО…
    почему то…. при движении курсором… пушка отклоняется на 90 градусов….. тоесть что бы попасть в угол 0 градусов(вверх) курсор должен бытьотклонен право

  55. Toto

    В первом кадре тело танка и пушки направлены на север ) вот потому таки и делал в мк.
    Попробую повернуть )
    П.С. Исходники мастби )

  56. Stormit

    Во флеше 0 градусов, совпадает с осью Х. То есть, чтобы не было глюков, танк должен смотреть влево (сам клип и башня внутри) и при этом _rotation у клипов должен быть равен 0. Проверяйте на панели Transform.

  57. noode

    что-то всеравно не хочет…. курсор вправо.. пушка вверх… сразу как начинаю двигать курсор влево ппушка тоже влево но с разницей в 90 градусов

  58. Stormit

    Зайди в клип body и верни графику на 90 градусов :)

  59. Sersir

    Спасибо за пример ! Искал, то что надо !

  60. Sasha9132

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

  61. kramfus

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

  62. Stormit

    Следующая статья будет об этом

  63. kramfus

    спасибо большое !

  64. spirit

    доброе время суток, я только начинаю учиться так, что вопрос может выглядеть по дурацки… у меня не получается что бы танк ездил. что я делаю не так:
    1. создаю танк, перевожу в символ (foot, body)
    2. из них создаю символ (hero)
    3. в hero создаю второй слой, в кадер (вкладка действие) копирую код
    4. управление - проверить ролик - танк как вкопаный?

  65. Stormit

    В 3-м шаге ошибка: код нужно прописать на уровень выше, в той же линейке где лежит клип hero

  66. spirit

    а Вам не сложно будет выслать исходник? на spireT4@Yandex.ru, буду вам очень признателен.

  67. GALLlblSH

    Stormit, не могли бы Вы подсказать код для кнопок типа Q, W, E и т. д.?
    Key.isDown(Key.Q) и Key.isDown(Q) не работают - выдают ошибку.

  68. LioJ

    GALLlblSH
    смотри коды любых нужных кнопок.
    пропиши в первом кадре
    stop();
    this.createTextField(”showkod_txt”, this.getNextHighestDepth(), 10, 10, 100, 32);
    showkod_txt.text=”нажать кнопку”;
    var keys:Object = new Object();
    keys.onKeyDown = function() {
    showkod_txt.text=Key.getCode();
    };
    Key.addListener(keys);

  69. Anton

    Может боян, но никак не могу найти. Как сделать чтобы “герой” перемещался по клику мышки. То есть первым кликом его выделяем, вторым задаем координаты перемещения.

  70. Stormit

    А здесь этого и нет. В примере описано управление с клавиатуры.
    Чтобы шёл в заданную точку (куда кликнули), нужно поворачивать объект в нужном направлении (dirAngle) и смещать его каждый кадр, пока он не достигнет цели.

  71. Anton

    Разве не так?

    onClipEvent (load) {
    _x = 0;
    _y = 0;
    speed = 100;
    }
    onClipEvent (mouseDown) {
    endX = _root._xmouse;
    endY = _root._ymouse;
    }
    onClipEvent (enterFrame) {
    _x += (endX-_x)/speed;
    _y += (endY-_y)/speed;
    }

    Правда у меня здесь один объект следует куда щелкнешь мышью. А вот как бы сделать несколько таких объектов. Типа стратегия будет))

  72. comRAT

    Приветствую, не подскажите юному программеру, как применить ХитТест к флешке, подобной CrimsonLand’у, чтобы персонаж не мог, скажем, выходит за пределы флешки? Заранее благодарен)

  73. Stormit

    to Anton
    В вашем случае объект будет двигаться с замедлением, так как шаг смещения зависит от расстояния до цели.
    Нужно вычислять угол поворота до цели и раскладывать скорость по координатам:
    var dx = endX - _x;
    var dy = endY - _y;
    var angle = Math.atan2(dy, dx);
    _x += speed * Math.cos(angle);
    _y += speed * Math.sin(angle);

    to comRAT
    Лучше проверять по координатам и если объект выступает за одну из границ - возвращать его на границу. HitTest тут излишен.

  74. comRAT

    Спасибо, уже сам сообразил) И отдельное спасибо за ваш блог - очень многому научился)

  75. HunTGuN

    блин что-то у меня не получается выставить корректно центр клипа.Пушка двигается вокруг корпуса.Не подскажите как нормально выставить ??(не ругайтесь я нубас)

  76. Msats

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

  77. Msats

    2 HunTGuN
    у тебя не от центрована пушка.
    1. Зайди в клип body
    2. Выдели всю башню
    3. Поставь башню так где у нее люк на крестик внутри клипа (это его ось так сказать)
    4. Если все правильно поставил, то должно крутится как надо.

  78. Msats

    Насчтеп следов от танка, я не могу понять все таки как использовать правильно функции global :( Как привязать следы к этим координатам. Помогите кто-нибудь. Читал комментарии здесь http://xitri.com/2008/07/09/flash-programming-drive-a-car.html но мне это не слишком помогло, хотя направление мысли уловил, но не могу реализовать. :(

  79. Виталя

    Это конечно очень круто!!! Крутой саит! Решил попробовать сделать то-же самое но ничего не получается :( Можете подсказать может есть подробное описание создания чего то подобного? А то весь нет облазал ничего ненашел

  80. Mark

    для Витали: единственный выход - найти книжку по adobe Flash(в стиле: для новичков, или для чайников) и изучить азы флеша. Если нужны исходники этого урока я могу дать: стучись в аську: 598615762. С ув. Марьян.

  81. мось

    Супер а можно исходник на почту
    пожалуйста mosya_377@mail.ru

  82. Юрий

    Как всегда отличный пост. У меня есть вопрос. Перевожу ваш пример на AS3. И все получилось только вот не пойму одного. Почему координаты у меня вычисляются по-другому - не так как у вас. Вот код из файла tank.as в который является классом танка

    public function functionEnterFrame(event:Event):void
    {
    var angle = this.rotation/180*Math.PI;

    if(left)
    {
    this.rotation -= rotSpeed;
    }
    else if(right)
    {
    this.rotation += rotSpeed;
    }
    if(down)
    {
    this.foots.play();
    this.x -= speed*Math.sin(angle);//не понятно почему здесь другие расчеты
    this.y += speed*Math.cos(angle);
    }
    else if(up)
    {
    this.foots.play();
    this.x += speed*Math.sin(angle);
    this.y -= speed*Math.cos(angle);
    }
    else
    {
    this.foots.stop();
    }
    }
    как видно из кода для x получается не cos а sin . это не понятно. Но все ездит и поворачивается.

  83. Stormit

    Наверное потому что у вас там знак +=
    для обоих координат операция должна быть одинаковой - либо прибавляем, либо вычитаем

  84. roma86

    Да нет. Все подбиралось опытным путем. Если я ставил везде += то движение было неверным. А так танк двигается в точности как у вас на примере. Самое интересное что все функционирует, только код мне самому не понятен как работает.

  85. ReDgar

    То же перевожу на AS3. Но не все получается, Юрий можно попросить сбросить исходники на 1redgar1@mail.ru заранее благодарен.

  86. Дима

    Блин парни я начинающий в етом деле но уменя ничего не получается можете кинуть исходник на Daemon.D.G@mail.ru или web-moder@mail.ru или вообще здесь выложить
    .З.Ы. буду очень признателен

  87. Юрий

    День добрый.
    Первое.
    ReDgar, исходники тю-тю, нету теперь. Полетел винт и все барахло что было накрылось. Так что извиняй, ничего прислать не смогу.
    Второе.
    Дима, не поверишь. Я тоже новичек и еще какой. Так что смотреть мои исходники не стоит, наверное, тем более (как следует из пункта 1) у меня их теперь нет.

  88. Алексей

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

  89. Лёха

    Зайди в клип “башня” и поверни её дулом вправо.

  90. Никита

    Народ помогите плз!
    У меня adobe flash cs3, и я делаю такие шаги:
    1. Создаю танк, правда без анимации колес, называю его foot
    2. Создаю башня, называю body
    3. Все это объединяю в hero
    4. Дальше создаю новый слой и там пишу код:

    var step = 2; //скорость перемещения
    var rotDirSpeed = 5; //скорость поворота

    onEnterFrame = function () {
    if (Key.isDown(Key.LEFT)) {
    hero._rotation -= rotDirSpeed; //поворачиваем танк влево
    } else if (Key.isDown(Key.RIGHT)) {
    hero._rotation += rotDirSpeed; //поворачиваем танк вправо
    }

    var dirAngle = hero._rotation / 180 * Math.PI; //угол поворота танка в радианах
    if (Key.isDown(Key.UP)) {
    // hero.foot.play(); //запускаем анимацию колёс
    hero._x += step * Math.cos(dirAngle); //проекция скорости на ось x
    hero._y += step * Math.sin(dirAngle); //проекция скорости на ось y
    } else if (Key.isDown(Key.DOWN)) {
    // hero.foot.play()
    hero._x -= step * Math.cos(dirAngle); //идём
    hero._y -= step * Math.sin(dirAngle); //назад
    } else {
    // hero.foot.stop(); //останавливаем анимацию колёс
    }
    }
    5. нажимаю alt+enter и на стрелки танк не реагирует!(
    Пробовал с анимацией - то же самое.

  91. Никита

    тут что то нужно высчитаывать?

  92. Лёха

    Никита, а ты в пропертис муви клипов в поле instance name давал соответствующим клипам соответствующие имена? - херо, боди, или что там еще есть?

  93. maximka

    А каким образом было реализован метод ротации танка не через его 0,0 а через его центральную часть ?

  94. Никита

    Леха, я называл херо боди када делал их в муви клип))спс!)

  95. terminator200911

    народ может у когото есть исходник у меня постоянно ошибка выдается все кода. что не так сделал не знаю! нужно нормальный урок чтобы люди видели как что и где прописывать,если есть то скиньте исходник буду по ниму изучать свои ошибки terminator200911@mail.ru

  96. terminator200911

    зарание благодарен!!!

  97. terminator200911

    Народ я тут сайт нашел с исходниками старых игр http://flashgame2010.ucoz.com/ может по таким игрушкам что то сделают!

  98. Kирилл

    Stormit можете выслать мне исходник,почему то когда я делаю все получается только почему то ноги от тела отсоединяются!

  99. Roman

    Добрый день. Если кто перевел этот пример на AS 3.0 - вышлите мне пожалуйста исходники. Заранее премного благодарен!

  100. Ermac

    STORMIT подскажи пожалуйста как сделать чтобы ноги и тело вместе поварачивались за мышкой! заранее спасибо.

  101. Pr_anton

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

Оставить комментарий