Код AS3:
speedX = maxSpeed * Math.exp( -k * (objX - mouseX) * (objX - mouseX));
|
А как вам такой вариант?
Код 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;
}
}
}
}
|
| Часовой пояс GMT +4, время: 14:25. |
|
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.