![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2011
Адрес: Ibiza
Сообщений: 13
|
есть шарик с именем mc который можно двигать с помощью клавиатуры.. при нажатии клавиши А либо левой кнопки мыши этот шарик стреляет другим шариком но лишь в одном направлении..
вот код: import flash.display.MovieClip; import flash.display.DisplayObject; import flash.events.MouseEvent; import flash.ui.Keyboard; var dist:Number = 0; var Balls:Array = new Array(); var fire:MovieClip; stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardF); //событие клавиатуры; stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse); stage.addEventListener(Event.ENTER_FRAME, moveBall); // событие обновления экрана; fire= new MovieClip(); fire.x = 0; fire.y = 0; function mouse(e:MouseEvent):void { var Ball:ball = new ball(); addChild(fire); fire.addChild(Ball); Ball.x = mc.x; Ball.y = mc.y; } function keyboardF(e:KeyboardEvent):void { if (e.keyCode == Keyboard.A) { var Ball:ball = new ball(); addChild(fire); fire.addChild(Ball); Ball.x = mc.x; Ball.y = mc.y; } if (e.keyCode == Keyboard.DOWN) { mc.y += 4; } else if (e.keyCode == Keyboard.UP) { mc.y -= 4; } if (e.keyCode == Keyboard.RIGHT) { mc.x += 4; } else if (e.keyCode == Keyboard.LEFT) { mc.x -= 4; } } function moveBall(e:Event):void { for (var i=0; i<fire.numChildren; i++) { var Ball:DisplayObject = fire.getChildAt(i); Ball.y -= 5; if (Ball.y < 0) { fire.removeChildAt(i); trace("Шарик удален"); } } } Добавлено через 3 часа 16 минут нашел такой код работает но шарик летит в сторону курсора но если сдвинуть курсор шарик меняет направление и продолжает лететь к курсору и останавливается рядом с ним, а нужно чтобы летел в прямом направлении в ту сторону где находился курсор при выстреле не меняя направления.. помогите разобраться |
|
|||||
|
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
расчитывай "найденный" код по ивенту MOUSE_DOWN
чтот вроде: var dx:Number; var dy:Number; function mouseDownHandler(event:MouseEvent):void { var angle:Number = Math.atan2(mouseY-object.y, mouseX-object.x); this.dx = speed*Math.cos(angle); this.dy = speed*Math.sin(angle); } function enterFrame(event:Event):void { object.x += this.dx; object.y += this.dy; } Последний раз редактировалось nuToH; 15.03.2011 в 01:14. |
|
|||||
|
Регистрация: Mar 2011
Адрес: Ibiza
Сообщений: 13
|
сделал по этому методу шарики при выстреле не прилипают к курсору но все равно продолжают менять направление в сторону где находился курсор при повторном выстреле
import flash.display.MovieClip; import flash.display.DisplayObject; import flash.events.MouseEvent; import flash.ui.Keyboard; var dist:Number = 0; var Balls:Array = new Array(); var speed:Number = 10; var angle:Number; var dx:Number; var dy:Number; var fire:MovieClip; stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardF); //событие клавиатуры; stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse); stage.addEventListener(Event.ENTER_FRAME, moveBall); // событие обновления экрана. Об этом смотри ниже; fire= new MovieClip(); fire.x = 0; fire.y = 0; function mouse(e:MouseEvent):void {//тип String. Пояснение ниже var Ball:ball = new ball(); var angle:Number = Math.atan2(mouseY - mc.y,mouseX - mc.x); this.dx = speed * Math.cos(angle); this.dy = speed * Math.sin(angle); addChild(fire); fire.addChild(Ball); Ball.x = mc.x; Ball.y = mc.y; trace(angle); trace(dx, dy); } function keyboardF(e:KeyboardEvent):void {//тип String. Пояснение ниже if (e.keyCode == Keyboard.A) { var Ball:ball = new ball(); addChild(fire); fire.addChild(Ball); Ball.x = mc.x; Ball.y = mc.y; } if (e.keyCode == Keyboard.DOWN) {//проверяется, какая клавиша нажата mc.y += 4; } else if (e.keyCode == Keyboard.UP) { mc.y -= 4; } if (e.keyCode == Keyboard.RIGHT) {//проверяется, какая клавиша нажата mc.x += 4; } else if (e.keyCode == Keyboard.LEFT) { mc.x -= 4; } } function moveBall(e:Event):void { for (var i=0; i<fire.numChildren; i++) { var Ball:DisplayObject = fire.getChildAt(i); Ball.x += dx; Ball.y += dy; if (Ball.y < dy,Ball.x < dx) { fire.removeChildAt(i); trace("Шарик удален"); } } } |
|
|||||
|
Регистрация: Mar 2011
Адрес: Ibiza
Сообщений: 13
|
проблема так и не решена((
пробовал сделать еще таким методом var dist:Number = 0; var mc_speedXFROM: Array=new Array(); var mc_speedYFROM: Array=new Array(); var mc_angle; stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardF); stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse); stage.addEventListener(Event.ENTER_FRAME, moveBall); function mouse(e:MouseEvent):void { for (var i=0; i<fire.numChildren; i++) { mc_angle = Math.atan2(mouseY - mc.y,mouseX - mc.x); mc_speedXFROM[i] = Math.cos(mc_angle); mc_speedYFROM[i] = Math.sin(mc_angle); trace(i); } var Ball:ball = new ball(); Ball.x = mc.x; Ball.y = mc.y; fire.addChildAt(Ball,0); } function keyboardF(e:KeyboardEvent):void { if (e.keyCode == Keyboard.DOWN) { mc.y += 4; } else if (e.keyCode == Keyboard.UP) { mc.y -= 4; } if (e.keyCode == Keyboard.RIGHT) { mc.x += 4; } else if (e.keyCode == Keyboard.LEFT) { mc.x -= 4; } } function moveBall(e:Event):void { for (var s=0; s<fire.numChildren; s++) { var Ball:DisplayObject = fire.getChildAt(s); Ball.x += mc_speedXFROM[s] * 5; Ball.y += mc_speedYFROM[s] * 5; if (Ball.y < 0) { fire.removeChildAt(s); trace("Шарик удален"); } } } |
|
|||||
|
Регистрация: Mar 2009
Адрес: this.x=0;this.y=0;this.z=0
Сообщений: 89
|
ты при каждом нажатии на кнопку мышки переопределяешь направление для всех шариков
|
|
|||||
|
Регистрация: Mar 2011
Адрес: Ibiza
Сообщений: 13
|
как это исправить?? задать параметр для i правильно понимаю?
|
|
|||||
|
Регистрация: Mar 2009
Адрес: this.x=0;this.y=0;this.z=0
Сообщений: 89
|
там вообще цикл не нужен
естественно это решение не лучшее, я бы шар выделил в отдельный класс. |
|
|||||
|
Регистрация: Mar 2011
Адрес: Ibiza
Сообщений: 13
|
я новичок во флеше поэтому делаю тем методом который более менее понятен..
кому не сложно посмотрите пожалуйста исходный файл помогите исправить уже неделю мучаюсь с этим шаром(( |
|
|||||
|
Регистрация: Mar 2009
Адрес: this.x=0;this.y=0;this.z=0
Сообщений: 89
|
у меня твой файл не открывается, наверно CS5.
я без классов писать не умею. Последний раз редактировалось cr0w312; 20.03.2011 в 12:48. |
|
|||||
|
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
Попробуйте так:
function mouse(e:MouseEvent):void { var Ball:ball = new ball(); fire.addChildAt(Ball,0); Ball.x = mc.x; Ball.y = mc.y; mc_angle = Math.atan2(mouseY - mc.y,mouseX - mc.x); Ball["mc_speedXFROM"] = Math.cos(mc_angle); Ball["mc_speedYFROM"] = Math.sin(mc_angle); } и затем брать их из шарика в цикле |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|