2016-11-02 112 views
2

我正在創建一個工具,允許代表爲我們的客戶選擇最好的產品。需要在移動設備上使用此工具。我想讓用戶選擇捏合縮放,以便在小設備上更合適地使用設備。AS3 - 縮放到舞臺的手勢

由於該工具的性質,我無法將該工具的內容放入影片剪輯並捏合縮放該影片剪輯。我尋找一個工作的AS3代碼來縮放舞臺(以及舞臺上的內容)已經空了。

我發現對堆棧溢出驗證碼:

Multitouch.inputMode = MultitouchInputMode.GESTURE; 

stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom); 
function onZoom (e:TransformGestureEvent):void{ 
    stage.scaleX *= e.scaleX; 
    stage.scaleY *= e.scaleY; 
} 

通過Adobe動畫進行測試時,它這將返回以下錯誤:

Error: Error #2071: The Stage class does not implement this property or method. 
    at Error$/throwError() 
    at flash.display::Stage/set scaleX() 
    at Beta04_fla::MainTimeline/onZoom()[Beta04_fla.MainTimeline::frame501:5] 
    at runtime::ContentPlayer/simulationSendGestureEvent() 
    at runtime::SimulatedContentPlayer/clientSocketDataHandler() 

任何人都可以提供關於如何解決工作代碼或諮詢這個問題?先謝謝你。

+1

而不是縮放階段,縮放文檔類(主時間軸)。所以:'this.scaleX * = e.scaleX;' – BadFeelingAboutThis

+0

這工作!我當然是編碼方面的業餘愛好者,但即便如此,我錯過了這一點,我感到很蠢。謝謝你的幫助。 – Dustin

回答

1

停止縮放階段,它不是一個正確的方式

移動你的內容對孩子影片剪輯,而不是舞臺,然後擴展或只使用位圖:

你必須做的放大倍數來代替。 你應該首先製作一個舞臺快照, 意思是將整個舞臺或者只是想要的舞臺區域繪製到一個帶有自己的變換矩陣(matrix.scale(2,2))的位圖對象,然後將其切斷到你最喜歡的尺寸,並簡單地把它作爲一個新的臨時影片剪輯給你的客戶。

var bitmapData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight); 
var matrix:Matrix = new Matrix(); 
matrix.translate(-50,-50); // moves your stage under magnifier 
matrix.scale(3,3); // magnification 
bitmapData.draw(stage, matrix); 

// And to actually see it 
var bitmap:Bitmap = new Bitmap(bitmapData); 
this.addChild(bitmap); 

enter image description here

此外,如果想流暢的動畫縮放,你可以在你的事件監聽一步變量,根據手指之間的距離在我的代碼的影響,而不是靜態的變焦矩陣的變化,更新您的位圖

+0

我很欣賞你的答案,但正如我所說的,將工具放入影片剪輯中存在問題。 @BadFeeling關於這提供了一個以上的工作,但你的答案也可以工作。再次感謝您的回覆。 – Dustin