В основном то, что я пытаюсь сделать, это изменить атрибуты horizontalCenter и verticalCenter компонента TileGroup обратно пропорционально движению мыши и использовать эффект искрового движения, чтобы сделать это движение плавным. TileGroup является дочерним элементом mx:Canvas, для которого установлено значение 100 % в ширину и 100 % в высоту. Их около 20 или около того BorderContainers внутри TileGroup.
Пример того, как это должно работать, см. на странице http://gallery.artofgregmartin.com/.
Моя версия движется точно так же, но не так плавно. Глядя на использование ЦП, как мое, так и его использование примерно одинаково (80-90%, когда идет движение), но мы различаемся по использованию графического процессора. Мой использует только около 4%, а его около 10%.
Вот мой код движения:
private function onMouseMove(event:MouseEvent):void{
var stageCenterX:Number = this.stage.stageWidth/2;
var stageCenterY:Number = this.stage.stageHeight/2;
var sliderPanelCenterX:Number = sliderPanel.width/2;
var sliderPanelCenterY:Number = sliderPanel.height/2;
var mouseX:Number = event.stageX;
var mouseY:Number = event.stageY;
var offsetX:Number = 0;
var offsetY:Number = 0;
var padding:Number = 400;
var multX:Number = (stageCenterX - mouseX)/stageCenterX;
offsetX = (multX * sliderPanelCenterX);
if(mouseX <= stageCenterX){
offsetX = offsetX - Math.abs(multX * stageCenterX) + Math.abs(multX * padding);
}
else {
offsetX = offsetX + Math.abs(multX * stageCenterX) - Math.abs(multX * padding);
}
var multY:Number = (stageCenterY - mouseY)/stageCenterY;
offsetY = (multY * sliderPanelCenterY);
if(mouseY <= stageCenterY){
offsetY = offsetY - Math.abs(multY * stageCenterY) + Math.abs(multY * padding);
}
else {
offsetY = offsetY + Math.abs(multY * stageCenterY) - Math.abs(multY * padding);
}
panelHC = Math.round(offsetX);
panelVC = Math.round(offsetY);
movePanel.captureStartValues();
sliderPanel.verticalCenter = panelVC; //sliderPanel is the id for the TileGroup
sliderPanel.horizontalCenter = panelHC;
movePanel.play();
}
А вот и благоговейный код mxml:
<fx:Declarations>
<s:Move id="movePanel" target="{sliderPanel}" />
</fx:Declarations>
<mx:Canvas width="100%" height="100%" backgroundColor="#111111"
horizontalScrollPolicy="off"
verticalScrollPolicy="off">
<s:TileGroup id="sliderPanel" horizontalGap="2" verticalGap="2" width="2010"
horizontalCenter="0" verticalCenter="0" z="1" />
</mx:Canvas>