|
|
|||||
Регистрация: May 2013
Сообщений: 34
|
Почему объект ускоряется?
Здравствуйте. Есть код:
package { import flash.display.*; import flash.events.*; import flash.text.*; import flash.utils.*; import flash.net.*; import flash.media.*; import flash.geom.*; public class list extends Sprite { public function list() { var list_new1:MiniList_new1 = new MiniList_new1(); var list_new2:MiniList_new2 = new MiniList_new2(); var list_new3:MiniList_new3 = new MiniList_new3(); var list_new4:MiniList_new4 = new MiniList_new4(); var list_new5:MiniList_new5 = new MiniList_new5(); addChild(list_new1); list_new1.y = 0; addChild(list_new2); list_new2.y = 778.5; addChild(list_new3); list_new3.y = 1557; addChild(list_new4); list_new4.y = 2335.5; addChild(list_new5); list_new5.y = 3114; } } } import flash.display.*; import flash.events.*; import flash.text.*; import flash.utils.*; import flash.net.*; import flash.media.*; import list; var l:Boolean = false; var mcList:list = new list(); var mouse_y:int; var speed:Number = 0; var dd:Number = new Number(); mcList.x = stage.stageWidth / 2; mcList.y = 450; addChild(mcList); stage.addEventListener(Event.ENTER_FRAME, _enterFrame); stage.addEventListener(MouseEvent.MOUSE_DOWN, mcListDown); stage.addEventListener(MouseEvent.MOUSE_UP, mcListUp); stage.addEventListener(MouseEvent.MOUSE_MOVE, mcListMove); function _enterFrame(e:Event) { if (mcList.y > 895) { mcList.y = 895; } if (mcList.y < -3088) { mcList.y = -3088; } } function mcListDown(e:MouseEvent) { l = true; } function mcListUp(e:MouseEvent) { l = false; for (var d:int = 0; d < 5; d++) { if (mcList.y > (450 + (-779 * d)) - 450 && mcList.y < (450 + (-779 * d)) + 450) { speed = 0; if (mcList.y < 450 + (-779 * d)) { speed = 20; } if (mcList.y > 450 + (-779 * d)) { speed = -20; } dd = d; stage.addEventListener(Event.ENTER_FRAME, _enterFrame); function _enterFrame(e:Event) { mcList.y += speed; if (speed == 20) { if (mcList.y > 450 + (-779 * dd)) { speed = 0; mcList.y = 450 + (-779 * dd); } } if (speed == -20) { if (mcList.y < 450 + (-779 * dd)) { speed = 0; mcList.y = 450 + (-779 * dd); } } } } } } function mcListMove(e:MouseEvent) { if (l == true) { mcList.y += stage.mouseY - mouse_y; } mouse_y = stage.mouseY; e.updateAfterEvent(); } Но вот в чём проблема здесь скорость движения 20 пикселей, но потом (через несколько перемещений) они ускоряются и перемещаются мнгновенно. Я не могу понять почему. Помогите. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Исходник не смотрел, по коду скажу:
1. Зачем называть функции одинаково? Сами не путаетесь? 2. У Вас две подписки на ENTER_FRAME и ни одной отписки. 3. Вторая функция _enterFrame вложенная. Когда условие выполняется, происходит подписка с этим обработчиком, и он будет выполняться каждый кадр по крайней мере, пока существует объект. Параллельно с другой функцией _enterFrame. Вам правда так нужно? И Вы уверены, что подписали именно этот вложенный обработчик, а не тот что на уровне класса? Зачем усложнять себе жизнь?
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: May 2013
Сообщений: 34
|
Wolsh, спасибо! Сделал вот так:
package { import flash.display.*; import flash.events.*; import flash.text.*; import flash.utils.*; import flash.net.*; import flash.media.*; import flash.geom.*; public class list extends Sprite { public function list() { var list_new1:MiniList_new1 = new MiniList_new1(); var list_new2:MiniList_new2 = new MiniList_new2(); var list_new3:MiniList_new3 = new MiniList_new3(); var list_new4:MiniList_new4 = new MiniList_new4(); var list_new5:MiniList_new5 = new MiniList_new5(); addChild(list_new1); list_new1.y = 0; addChild(list_new2); list_new2.y = 778.5; addChild(list_new3); list_new3.y = 1557; addChild(list_new4); list_new4.y = 2335.5; addChild(list_new5); list_new5.y = 3114; } } } import flash.display.*; import flash.events.*; import flash.text.*; import flash.utils.*; import flash.net.*; import flash.media.*; import list; var timer:Timer = new Timer(1); var l:Boolean = false; var mcList:list = new list(); var mouse_y:int; var speed:Number = 0; var dd:Number = new Number(); mcList.x = stage.stageWidth / 2; mcList.y = 450; addChild(mcList); stage.addEventListener(Event.ENTER_FRAME, _enterFrame); stage.addEventListener(MouseEvent.MOUSE_DOWN, mcListDown); stage.addEventListener(MouseEvent.MOUSE_UP, mcListUp); stage.addEventListener(MouseEvent.MOUSE_MOVE, mcListMove); function _enterFrame(e:Event) { if (mcList.y > 895) { mcList.y = 895; } if (mcList.y < -3088) { mcList.y = -3088; } mcList.y += speed; if (speed == 20) { if (mcList.y > 450 + (-779 * dd)) { speed = 0; mcList.y = 450 + (-779 * dd); } } if (speed == -20) { if (mcList.y < 450 + (-779 * dd)) { speed = 0; mcList.y = 450 + (-779 * dd); } } } function mcListDown(e:MouseEvent) { l = true; } function mcListUp(e:MouseEvent) { l = false; for (var d:int = 0; d < 5; d++) { if (mcList.y > (450 + (-779 * d)) - 450 && mcList.y < (450 + (-779 * d)) + 450) { speed = 0; if (mcList.y < 450 + (-779 * d)) { speed = 20; } if (mcList.y > 450 + (-779 * d)) { speed = -20; } dd = d; } } timer.start(); } function mcListMove(e:MouseEvent) { if (l == true) { mcList.y += stage.mouseY - mouse_y; } mouse_y = stage.mouseY; e.updateAfterEvent(); } |
Часовой пояс GMT +4, время: 17:18. |
|
« Предыдущая тема | Следующая тема » |
|
|