Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.06.2009, 21:40
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 11  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код AS3:
speedX = maxSpeed * Math.exp( -k * (objX - mouseX) * (objX - mouseX));

Старый 11.06.2009, 04:36
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 12  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
А как вам такой вариант?

Код AS3:
package {
 
	import flash.display.*;
	import flash.events.Event;
	import flash.geom.*;
 
	public class SnapToMouse extends Sprite {
 
		private var object:DisplayObject;
		private const snapAreaWidth:Number = 50;
		private const fixedCoords:Point = new Point(150, 150);
 
		public function SnapToMouse() {
			var sp:Shape = new Shape();
			sp.graphics.beginFill(0xFF00);
			sp.graphics.drawRect(-20, -5, 40, 10);
			addChild(sp);
			sp.x = fixedCoords.x;
			sp.y = fixedCoords.y;
			object = sp;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			stage.frameRate = 30;
 
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
 
		private function onEnterFrame(e:Event):void {
			var mx:Number = stage.mouseX;
			var my:Number = stage.mouseY;
			var dx:Number;
			var dy:Number;
			if (pointInSnapArea(mx, my)) {
				dx = mx - object.x;
				dy = my - object.y;
				if ((dx*dx + dy*dy) < 0.1) {
					object.x = mx;
					object.y = my;
				} else {
					// Изинг, можно делить на любое другое число
					dx /= 5;
					dy /= 5;
					object.x += dx;
					object.y += dy;
				}
			} else {
				// Изинг обратно
				dx = fixedCoords.x - object.x;
				dy = fixedCoords.y - object.y;
				if ((dx*dx + dy*dy) < 0.1) {
					object.x = fixedCoords.x;
					object.y = fixedCoords.y;
				} else {
					// Изинг, можно делить на любое другое число
					dx /= 3;
					dy /= 3;
					object.x += dx;
					object.y += dy;
				}
			}
		}
 
		private function pointInSnapArea(pointX:Number, pointY:Number):Boolean {
			var boundsRect:Rectangle = object.getBounds(stage);
			// Фигура типа в фиксированных координатах, т.е. не двигается
			boundsRect.x = fixedCoords.x;
			boundsRect.y = fixedCoords.y;
			// Фигура симетричная по двум осям, 
			// поэтому нормируем координаты относительно центра в одну четверть
			var halfW:Number = boundsRect.width/2;
			var halfH:Number = boundsRect.height/2;
			pointX -= boundsRect.x + halfW;
			pointY -= boundsRect.y + halfH;
			pointX = (pointX < 0) ? -pointX : pointX;
			pointY = (pointY < 0) ? -pointY : pointY;
			if (pointX >= halfW) {
				if (pointY > halfH) {
					pointX -= halfW;
					pointY -= halfH;
					return Math.sqrt(pointX*pointX + pointY*pointY) <= snapAreaWidth;
				} else {
					return (pointX - halfW) <= snapAreaWidth;
				}
			} else {
				return (pointY - halfH) <= snapAreaWidth;
			}
		}
 
	}
}
__________________
TankiOnline
Я разработчик Alternativa3D

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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