![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Всем привет! Как ограничить движения mc кругом? чтоб его можно было перемещать только в пределах круга радиусом, например, 100рх, а не только в пределах прямоугольника, что без проблем позволяет функция startDrag
|
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Вычисляйте расстояние от центра окружности до объекта и сравнивайте с радиусом этой окружности.
|
|
|||||
|
Вот, вычислил и сравнил. Допустим, расстояние больше радиуса. как быть дальше?
|
|
|||||
|
Модрон-ветеринар
|
На событие onMouseDown делайте проверку на hitTest с объектом.
Если true - включайте функцию onMouseMove, в которой приравнивайте координаты объекта, подлежащего тасканию координатам мыши. На событие onMouseUp удаляйте функцию onMouseMove. В процессе таскания (внутри onMouseMove) делайте вашу проверку. Если проверка дает false - отключайте строки, где у вас идет назначение координат (поместите их в условный оператор). Последний раз редактировалось mooncar; 23.01.2010 в 04:25. |
|
|||||
|
Цитата:
Так красивше будет (псевдокод): x0 = ... y0 = ... // координаты центра r = ... // радиус var distance = Math.sqrt((x - x0) * (x - x0) + (y - y0) * (y - y0)) if (distance > r) { //раз distance > r, а r > 0, то distance никак не равно нулю - смело делим var sin = (y - y0) / distance; var cos = (x - x0) / distance; x = r * cos; y = r * sin;//пододвигаем координаты так, чтобы не вылазили из круга } |
|
|||||
|
сделал как-то так
|
|
|||||
|
я рисую линию от центра окружности до объекта. подскажите, как рисовать ее пунктирной?
|
|
|||||
|
Цитата:
Тезиса 2: - встроенной поддержки программного рисования пунктирный линий нет; - надо составлять эти линии из обычных - ручками или с помощью http://bezier.ru/ В данном случае можно тупо: //x0, y0, distance, sin, cos - из предыдущего примера var strokeSize = 5; var currentDistance = 0 while (currentDistance < distance) { moveTo(x0 + cos * currentDistance, y0 + sin * currentDistance) currentDistance += strokeSize lineTo(x0 + cos * currentDistance, y0 + sin * currentDistance) currentDistance += strokeSize } |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 950
|
есть еще реализация пунктирной линии
MovieClip.prototype.moveTo = function(x:Number, y:Number) { this.xc = x; this.yc = y; ASnative(901, 3).apply(this,arguments); }; MovieClip.prototype.lineTo = function(x:Number, y:Number, n:Number) { if (n) { var dx = (x-this.xc)/n/2; var dy = (y-this.yc)/n/2; for (var i = 0; i<n; i++) { ASnative(901, 3).call(this,this.xc+2*i*dx,this.yc+2*i*dy); ASnative(901, 4).call(this,this.xc+(2*i+1)*dx,this.yc+(2*i+1)*dy); } } else { ASnative(901, 4).apply(this,arguments); } this.xc = x; this.yc = y; }; var mc:MovieClip = this.createEmptyMovieClip("mc", 1); mc.lineStyle(2,0x990000,100); mc.moveTo(0,0); mc.lineTo(100,500,20); mc.lineStyle(3,0x990000,100); mc.moveTo(100,500); mc.lineTo(465,665); |
|
|||||
|
lexa2000lexa, спасибо!
|
![]() |
![]() |
Часовой пояс GMT +4, время: 15:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|