Не могу понять как сделать так что бы кликаешь в определенную точку и персонаж(Кубик)двигался к месту клика. Помогите простым примером или пошлите меня туда где эта фишка описана...
var mousex:Number;//Переменная для оси х var mousey:Number;//Переменная для оси у var bullet:MovieClip = new mc_bullet;//Переменная для создания пули var bulletSpeed:Number = 20;//Переменная для скорости пули
stage.addEventListener(MouseEvent.CLICK,mouseClick);//Слушатель для клика мыши stage.addEventListener(Event.ENTER_FRAME,bulletMove);//Слушатель для движения пули stage.addEventListener(KeyboardEvent.KEY_DOWN,moveHero);//Слушатель для движения Hero function mouseClick(e:MouseEvent):void//Функция для клика мыши { mousex = mouseX;//Узнаем ось по х mousey = mouseY;//Узнаем ось по у addChild(bullet);//Рисуем пулю(Кубик) bullet.x = hero.x;//Позиционируем кубик(Пулю) там где и Hero по х bullet.y = hero.y;//Позиционируем кубик(Пулю) там где и Hero по у } function moveHero(e:KeyboardEvent):void//Функция для движения Hero. { //Движение с помощью WASD(У меня кнопка Left не пашет на буке ) if (e.keyCode == 87)//W { hero.y -= 5; } if (e.keyCode == 83)//S { hero.y += 5; } if (e.keyCode == 65)//A { hero.x -= 5; } if (e.keyCode == 68)//D { hero.x +=5; } } function bulletMove(e:Event):void { //А что тут писать я даже не знаю.Что перепробовал то работает некоректно.Обидно блин... }
Все прокомментировано.Во Fla только два объекта это Hero и mc_bullet. Помогите.Ну или поугарайте над говнопроггером и укажите на ошибки...
function bulletMove(e:Event):void { //А что тут писать я даже не знаю.Что перепробовал то работает некоректно.Обидно блин... }
Делай переменную speed(ну или числами пиши, как удобней) и пиши так
Quote
//Движение по оси X bullet_mc.x=mousex-bulet_mc.x+speed; //Движение по оси Y bullet_mc.y=mousey-bulet_mc.y+speed;
потом делай переодическую функцию. Проверить пока не могу, но если что скажешь, разберемся. DMScript - мой язык программирования <--- Скажи "ДА!" загаживанию форума! Мы за троллинг, флуд и оффтоп!
Забыл упомянуть что пишу (Пытаюсь писать) на AS3. Человек-панчлайн, Не работает.Пуля дергается в эпилептическом припадке. Вот Fla файл на всякий случай. Тыц
var mousex:Number;//Переменная для оси х var mousey:Number;//Переменная для оси у var bullet:MovieClip = new mc_bullet;//Переменная для создания пули var bulletSpeed:Number = 2;//Переменная для скорости пули
stage.addEventListener(MouseEvent.CLICK,mouseClick);//Слушатель для клика мыши stage.addEventListener(Event.ENTER_FRAME,bulletMove);//Слушатель для движения пули stage.addEventListener(KeyboardEvent.KEY_DOWN,moveHero);//Слушатель для движения Hero function mouseClick(e:MouseEvent):void//Функция для клика мыши { mousex = mouseX;//Узнаем ось по х mousey = mouseY;//Узнаем ось по у addChild(bullet);//Рисуем пулю(Кубик) bullet.x = hero.x;//Позиционируем кубик(Пулю) там где и Hero по х bullet.y = hero.y;//Позиционируем кубик(Пулю) там где и Hero по у } function moveHero(e:KeyboardEvent):void//Функция для движения Hero. { //Движение с помощью WASD(У меня кнопка Left не пашет на буке <img src="http://s12.ucoz.net/sm/1/sad.gif" border="0" align="absmiddle" alt="sad" /> ) if (e.keyCode == 87)//W { hero.y -= 5; } if (e.keyCode == 83)//S { hero.y += 5; } if (e.keyCode == 65)//A { hero.x -= 5; } if (e.keyCode == 68)//D { hero.x +=5; } } function bulletMove(e:Event):void { //Движение по оси X bullet.x=bullet.x+(mouseX-bullet.x)/5; //Движение по оси Y bullet.y=bullet.y+(mouseY-bullet.y)/5;
Человек-панчлайн, В принципе то что надо.Можно закрутить креативно, но как мне удалить объект когда он доберется? Написал это но реакции ноль... if(bullet.x == mousex)//Проверяет равны ли координаты пули координатам клика по х { removeChild(bullet); }
Я немного изменил твой алгоритм. bullet.x=bullet.x+(mousex-bullet.x)/5; bullet.y=bullet.y+(mousey-bullet.y)/5; Там у меня при клике в переменные mousex и mousey вбиваются координаты мыши.У тебя в каждом фрейме обновлялись координаты мыши а так есть не меняющиеся координаты и пуля летит строго в точку клика. /5 как понимаю это кадры до конца пути?А можешь перевести на русский весь алгоритм а то даже смысл не улавливаю.Что для чего там? Но в целом очень круто все.Подобное я только с Tween Lite бы мог сделать,спасибо!
Сообщение отредактировал Laendel - Суббота, 05 Ноября 2011, 22:20
Деление на пять это просто число от фонаря. Просто помню где-то читал что-то такое в туторе каком-то (не по флешу) и там было деление(на 6, но не суть важно).
mousex и mousey это координаты клика мыши.Нужно удалить объект когда координаты клика и пули будут совпадать или хотя бы находиться рядом. Весь смысл этого штурма мозга что бы создать выстрел.Искал в нете но там там заумно написано... Пытался разобраться с методами MathAtan2,Math.cos,Math.sin но нигде они не описаны туманно. Вот кстати статья интересная по этому делу... Тыц
Сообщение отредактировал Laendel - Суббота, 05 Ноября 2011, 22:38
если ты хочешь сделать выстрел, то явно надо чтобы пуля летела не до мышки, а до препятствия. Сейчас напишу по-быстрому. DMScript - мой язык программирования <--- Скажи "ДА!" загаживанию форума! Мы за троллинг, флуд и оффтоп!
var speed:Number = 5; var rx:Number = _mouseX - x; //получаем расстояние по по оси х var ry:Number = _mouseY - y; //получаем расстояние по по оси х var dist = Math.sqrt(rx*rx+ry*ry); //полное прямое движения var dx:Number = rx/dist; // нормализуем вектор движения по х, тоесть значение он примет от [-1..1] var dy:Number = ry/dist; // нормализуем вектор движения по y, тоесть значение он примет от [-1..1]
x+= dx * speed; // прибавляем к х умноженный вектор движения по х на скорость, y+= dy * speed; // прибавляем к у умноженный вектор движения по у на скорость, @noTformaT
mousex и mousey это координаты клика мыши.Нужно удалить объект когда координаты клика и пули будут совпадать или хотя бы находиться рядом. Весь смысл этого штурма мозга что бы создать выстрел.Искал в нете но там там заумно написано...
Вечером домой приду могу дать исходник ТДС, с движением и пулями, врезающимися в стены. DMScript - мой язык программирования <--- Скажи "ДА!" загаживанию форума! Мы за троллинг, флуд и оффтоп!
var gradus:Number;//Градус var mousex:Number;//Переменная для оси х var mousey:Number;//Переменная для оси у var bullet:MovieClip = new mc_bullet;//Переменная для создания пули var bulletSpeed:Number = 10;//Переменная для скорости пули
stage.addEventListener(MouseEvent.CLICK,mouseClick);//Слушатель для клика мыши stage.addEventListener(Event.ENTER_FRAME,bulletMove);//Слушатель для движения пули stage.addEventListener(KeyboardEvent.KEY_DOWN,moveHero);//Слушатель для движения Hero function mouseClick(e:MouseEvent):void//Функция для клика мыши { mousex = mouseX;//Узнаем ось по х mousey = mouseY;//Узнаем ось по у addChild(bullet);//Рисуем пулю(Кубик) bullet.x = hero.x;//Позиционируем кубик(Пулю) там где и Hero по х bullet.y = hero.y;//Позиционируем кубик(Пулю) там где и Hero по у trace(mousex, mousey); gradus = Math.atan2(mousey-bullet.y,mousex-bullet.x)*180/Math.PI;//Узнаем градус клика по отношению к пули. } function moveHero(e:KeyboardEvent):void//Функция для движения Hero. { //Движение с помощью WASD(У меня кнопка Left не пашет на буке ) if (e.keyCode == 87)//W { hero.y -= 5; } if (e.keyCode == 83)//S { hero.y += 5; } if (e.keyCode == 65)//A { hero.x -= 5; } if (e.keyCode == 68)//D { hero.x +=5; } } function bulletMove(e:Event):void {
var radians:Number = gradus * Math.PI / 180;//Переводим градус в радиан. var vx:Number = Math.cos(radians) * bulletSpeed;//Хрен знает зачем но надо... var vy:Number = Math.sin(radians) * bulletSpeed;//Хрен знает зачем но надо...
bullet.x += vx;//Двигаем пулю по оси х. bullet.y += vy;//Двигаем пулю по оси у
}
Вот Fla Тыц Теперь дело за малым,сообразить как сделать так что бы пуль было много а не одна(При повторном клике предыдущая исчезает) и удалить ее когда она выходит за приделы сцены.
Сообщение отредактировал Laendel - Воскресенье, 06 Ноября 2011, 13:33
Laendel, если ты хочешь сделать стрелковое оружие, то имхо, для отрисовки эффекта лучше чертить линию до точки стокновения с объектом. DMScript - мой язык программирования <--- Скажи "ДА!" загаживанию форума! Мы за троллинг, флуд и оффтоп!
если ты хочешь сделать стрелковое оружие, то имхо, для отрисовки эффекта лучше чертить линию до точки стокновения с объектом.
Отнюдь.Движение пули с актуальной скоростью будет создавать иллюзию шлейфа что нам и надо. Кстати,а ты не знаешь как правильно создавать дубликаты пули или же их всех в массив запихнуть?
Добавлено (06.11.2011, 17:22) --------------------------------------------- noTformaT, А этот метод Math.sqrt AS3 поддерживает а то я его в справке не нашел что-то...