Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Перетаскивание объекта и кидание что-ли (http://www.flasher.ru/forum/showthread.php?t=134527)

mr_pol 03.01.2010 01:35

Перетаскивание объекта и кидание что-ли
 
Вложений: 1
Всем привет!) Помогите, пожалуйста, кодом или исходником)

что есть:
Есть круг. Круг постоянно движется с права налево. Мы можем схватить его и перетащить в любую точку сцены. При этом его движение справа налево прекращается. Как только отпускаем круг, движение возобновляется

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

Я тут нарисовал схемку, может на картинке понятнее будет)
http://s60.***********/i170/1001/50/de6ebd77ddf3.jpg
[IMG]http://s60.***********/i170/1001/50/de6ebd77ddf3.jpg[/IMG]

исходник того, что есть
Вложение 23576

etc 03.01.2010 12:05

Направление движения мыши вы можете получить по дельте координат между предыдущем её положением и текущим. Скорость можно взять равной длине вектора направления мыши и уменьшать её постепенно.

mr_pol 03.01.2010 16:11

А что значит дельта координат? Направление по двум точкам? первая - в момент когда взяли круг, а вторая - когда отпустили? А если я делаю несколько движений? например, беру круг в точке 1, тащу его сначала в точку 2 и не отпуская тащу в точку 3, то мне нужно направление 2-3, а не 1-3.

bigbit 03.01.2010 16:18

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

mr_pol 03.01.2010 16:27

Тогда эта дельта не подходит. а можно отслеживать положение круга раз в секунду, например? Если да, то как?)

etc 03.01.2010 16:45

Да хоть onEnterFrame.

KiL33 03.01.2010 20:32

Вложений: 1
Цитата:

Да хоть onEnterFrame.
Типа того

KiL33 03.01.2010 20:34

mr_pol, но это самый тупой вариант:confused:

mr_pol 03.01.2010 21:35

KiL33, это не то. Похожее есть и у меня в исходнике

etc 03.01.2010 21:58

KiL33, в данном случае вы вообще неизвестно что сделали.

NoCD 04.01.2010 07:37

Незнаю, правильно ли я понял задачу. Вот что у меня получилось!

Код AS1/AS2:

 
mc = attachMovie("mc","mc",1)
mc._x = mc.bx = 500;
mc._y = mc.by = 300
mc.dx = 0
mc.dy = mc._y
mc._xspeed = 1
mc._yspeed = 0
flag = true;
 
mc.onEnterFrame = function(){
        if(flag){
          var x = this.dx-this.bx;
        var y = this.dy-this.by;
        var angle4:Number = Math.atan2(y, x);
 
        this.xmov = this._xspeed*Math.cos(angle4);
        this.ymov = this._yspeed*Math.sin(angle4);               
 
        this._x+= this.xmov;
          this._y+= this.ymov;
                }
}
 
 
mc.onPress = function(){       
this.startDrag();       
flag = false;
this.bx = this._x;
this.by = this._y;
        }
 
mc.onRelease = function(){
flag = true;
this.stopDrag();       
this._xspeed = 1;
this._yspeed = 1;
this.dx = this._x;
this.dy = this._y;
        }

где mc - MovieClip

Замедление не стал делать.

KiL33 04.01.2010 09:55

Цитата:

Сообщение от etc (Сообщение 876692)
KiL33, в данном случае вы вообще неизвестно что сделали.

к данному случаю это особо и не относится, тупо передвижение объекта с помощью onEnterFrame

etc 04.01.2010 11:50

Цитата:

Сообщение от KiL33 (Сообщение 876730)
к данному случаю это особо и не относится, тупо передвижение объекта с помощью onEnterFrame

Замечательно, только этого не требовалось.

KiL33 04.01.2010 12:01

Желание помочь превысило разбора задачи:mosking:

mr_pol 06.01.2010 12:42

NoCD, спасибо! если перетаскивать объект по прямой, то все хорошо работает. Если по окружности, работает очень странно

bigbit 09.01.2010 22:45

Вложений: 1
Написано тупо, но принцип изложил. Только надо функцию движения слева направо сделать и запускать ее, когда заканчивается замедление. Ну, и останавливать по нажатию мыши.

mr_pol 09.01.2010 23:35

bigbit, спасибо! работает как надо!)

Добавлено через 51 секунду
только onMouseUp удалять нужно

bigbit 10.01.2010 00:51

Цитата:

Сообщение от mr_pol (Сообщение 877883)
только onMouseUp удалять нужно

Зачем? Впрочем, может и надо. Вроде бы событие и так одноразовое...

А, ну да. Точно.


Часовой пояс GMT +4, время: 14:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.