作者cjcat2266 (CJ Cat)
看板Flash
标题Re: [问题] 拖曳旋转
时间Mon Apr 14 14:47:02 2008
※ 引述《IDontBite (大便兔子)》之铭言:
: 又碰到问题啦Orz
: 例如一个画挂在墙上,用滑鼠可以旋转他(也就是拖曳但是支点固定),
: 这样要怎麽写呢?
思考方向如下:
当滑鼠按下去的时候
利用Math.atan()或者Math.atan2()来改变目标的角度
然後当滑鼠放开的时候
取消这项功能
注意要考虑滑鼠按下去的时候物件有本身的旋转角度
所以要把自己本身的旋转角度(originalAngle)给加进去
以下code未经过测试,可能有错字之类的
还有因为BBS宽度有限,所以使用多一点变数,请自行缩减
P.S. offset为修正用的角度
<AS3版本>
var originalAngle:Number; //原本的角度
var startAngle:Number; //按下去瞬间的atan值
object.addEventListener(MouseEvent.PRESS, press);
object.addEventListener(MouseEvent.RELEASE, release);
object.addEventListener(MouseEvent.MOUSE_MOVE, rotate);
//按下滑鼠
function press(e:MouseEvent):void {
//纪录初始角度
var obj:DisplayObject = e.target;
originalAngle = e.target.rotation;
var startDX:Number = obj.parnet.mouseX - obj.x;
var startDY:Number = obj.parent.mouseY - obj.y;
var startRadian:Number = Math.atan(startDY / startDX);
startAngle = 180 * (startRadian / Math.PI);
e.target.addEventListener(MouseEvent.MOUSE_MOVE, rotate);
}
//放开滑鼠
function release(e:MouseEvent):void {
e.target.removeEventListener(MouseEvent.MOUSE_MOVE, rotate);
}
//拖曳旋转
function rotate(e:MouseEvent):void {
var obj:DisplayObject = e.target;
var dx:Number = obj.parent.mouseX - obj.x;
var dy:Number = obj.parent.mouseY - obj.y;
var radian:Number = Math.atan(dy / dx);
var degree:Number = 180 * (radian / Math.PI);
e.target.rotation = degree + originalAngle
- startAngle + offset;
e.updateAfterEvent();
}
<AS2版本>
var originalAngle:Number; //原本的角度
var startAngle:Number; //按下去瞬间的atan值
//按下滑鼠
object.onPress = function():Void {
//纪录初始角度
originalAngle = this._rotation;
var startDX:Number = this._parent._xmouse - this._x;
var startDY:Number = this._parent._ymouse - this._y;
var startRadian:Number = Math.atan(startDY / startDX);
startAngle = 180 * (startRadian / Math.PI);
this.onMouseMove = rotate;
}
//放开滑鼠
object.onRelease = function():Void {
this.onMouseMove = null;
}
//拖曳旋转
function rotate():Void {
var dx:Number = this._parent._xmouse - this._x;
var dy:Number = this._parent._ymouse - this._y;
var radian:Number = Math.atan(dy / dx);
var degree:Number = 180 * (radian / Math.PI);
this._rotation = degree + originalAngle
- startAngle + offset;
updateAfterEvent();
}
--
CJ Cat = Croa'J Cat = Cockroach Cat = 西街凯特 = 蜚蠊猫 = 蟑螂猫
Blog
http://cjcat.blogspot.com
Gallery
http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop - 阿多比闪光(Adobe Flash)研讨区
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.49.247
※ 编辑: cjcat2266 来自: 140.112.49.247 (04/14 14:48)
1F:推 adesigner:强者! 04/22 15:32