Re: [問題] 拖曳旋轉

看板Flash作者 (CJ Cat)時間18年前 (2008/04/14 14:47), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #180ltf8F (Flash)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #180ltf8F (Flash)