Re: [問題] 拖曳旋轉
※ 引述《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)
推
04/22 15:32, , 1F
04/22 15:32, 1F
討論串 (同標題文章)