저는 Flex/ActionScript에 익숙하지 않고 내비게이션 아이콘에 부드럽고 깨끗한 어안 효과를 만들기 위해 노력하고 있지만 롤오버 효과는 꽤 아름답습니다. 고르지 못한. 앞의 아이콘에 영향을 미치고 다음 아이콘으로 끝나는 것 같은 더 좋은 것들을 보았습니다. 그래서 3 번 모두에 동시에 영향을 미쳐서 더 부드럽게 보이지만 어떻게 할 것인지 전혀 모릅니다. 그게 내가해야 할 일이야? 누구든지 나를 위해 더 좋은 방법을 제안 할 수 있습니까?Flex/ActionScript 3를 사용하여 부드러운 롤오버 또는 FishEye 효과를 만드는 데 도움이 필요합니다.
public class CanvasDesktopModuleIcon extends Canvas
{
[Bindable] private var _desktopModuleObj:DesktopModuleBean;
private var zoomEffectObj:Zoom = new Zoom();
public var moduleImage:Image = new Image();
private var _textColor:uint = 0x000000;
private var myLabel:Text = new Text();
/**
* Constructor
*/
public function CanvasDesktopModuleIcon(doRollover:Boolean=true):void
{
try
{
_desktopModuleObj = new DesktopModuleBean();
this.percentHeight=100;
this.verticalScrollPolicy = "off";
this.horizontalScrollPolicy = "off";
this.setStyle("verticalScrollPolicy","off");
this.setStyle("horizontalScrollPolicy","off");
this.setStyle("borderStyle","none");
this.setStyle("backgroundAlpha",0.0);
myLabel.percentWidth=100;
myLabel.maxHeight=15;
myLabel.truncateToFit = true;
if(doRollover)
{
this.addEventListener(MouseEvent.ROLL_OUT, rollOutHandler);
this.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler);
}
}
catch (error:Error)
{
FlexException.errorHandler(error,"CanvasDesktopModuleIcon:CanvasDesktopModuleIcon");
}
}
/**
* rollOutHandler
* function that handles the roll out event
*
* @param Event event the contents of the event
* @return void
*/
private function rollOutHandler(event:Event):void
{
try
{
playZoomEffect(moduleImage,1.0,1.0,moduleImage.scaleY, moduleImage.scaleX);
}
catch (error:Error)
{
FlexException.errorHandler(error,"CanvasDesktopModuleIcon:rollOutHandler");
}
}
/**
* playZoom
* Getter function for the desktopModuleBean value
*
* @param void
* @return DesktopModuleBean The desktopModuleBean value.
*/
private function playZoomEffect(
myTarget:Object,
myHeight:Number,
myWidth:Number,
myFromHeight:Number,
myFromWidth:Number,
myDuration:Number = 200):void {
zoomEffectObj.end();
zoomEffectObj.target = myTarget;
zoomEffectObj.duration = myDuration;
zoomEffectObj.zoomHeightTo = myHeight;
zoomEffectObj.zoomHeightFrom = myFromHeight;
zoomEffectObj.zoomWidthTo = myWidth;
zoomEffectObj.zoomWidthFrom = myFromWidth;
zoomEffectObj.play();
}
/**
* rollOverHandler
* function that handles the roll over event
*
* @param Event event the contents of the event
* @return void
*/
private function rollOverHandler(event:Event):void
{
try
{
playZoomEffect(moduleImage,1.8,1.8,moduleImage.scaleY, moduleImage.scaleX);
}
catch (error:Error)
{
FlexException.errorHandler(error,"CanvasDesktopModuleIcon:rollOverHandler");
}
}
private function setupCanvas():void
{
try
{
// Setup Image
if(_desktopModuleObj.Module_Icon == "")
{
moduleImage.source = NavigationManager.defaultDashIcon;
}
else
{
moduleImage.source = NavigationManager[_desktopModuleObj.Module_Icon];
}
moduleImage.height = 50;
moduleImage.width = 50;
moduleImage.setStyle("horizontalCenter","0");
moduleImage.setStyle("bottom","15");
this.toolTip = _desktopModuleObj.Module_Window_Title;
// Setup Label
if(_desktopModuleObj.Module_Display_Title == 1)
{
myLabel.text = _desktopModuleObj.Module_Window_Title;
myLabel.setStyle("color",_textColor);
myLabel.setStyle("horizontalCenter","0");
myLabel.setStyle("bottom","0");
this.addChild(myLabel);
}
/*else
{
moduleImage.height = 68;
moduleImage.width = 68;
moduleImage.setStyle("horizontalCenter","0");
moduleImage.setStyle("bottom","0");
}*/
this.addChild(moduleImage);
}
catch (error:Error)
{
FlexException.errorHandler(error,"CanvasDesktopModuleIcon:setupCanvas");
}
}
private var _speed:int=3;
private var _blurX:int=15;
private var _blurY:int=15;
private function pulse(event:Event):void
{ //no try catch
_blurX+=_speed;
_blurY+=_speed;
if(_blurX>60)
{
_speed*=-1;
}
if(_blurX<15)
{
_speed*=-1;
}
event.currentTarget.filters=[new GlowFilter(0xFF0000,.75,_blurX,_blurY,2,1,false,false)];
}
public function glow(val:Boolean=true):void
{ //no try catch
if(val)
{
this.addEventListener(Event.ENTER_FRAME,pulse);
}
else
{
this.filters=[];
this.removeEventListener(Event.ENTER_FRAME,pulse);
}
}
}
나는 그것이 로컬 dev에 컴퓨터에 이후 나는 실제 페이지를 표시 할 수 없습니다 죄송합니다 :
여기에 내 현재 롤오버 효과를 위해 사용하고 코드입니다. 어떤 도움을 주셔서 감사합니다. 감사!
"이미지"와 "아이콘"의 차이점은 무엇입니까? 무엇을 시도하고 왜 작동하지 않았습니까? – JeffryHouser
예제의 이미지는 정적이었으며 디렉토리에서 가져온 배열이었습니다. 내 권한은 사용자의 권한에 따라 생성되어야하므로 배열과 대조적 인 컨테이너입니다. 컨테이너에 함수를 가리 키려고했으나 "이미 부모가있는 자식을 추가 할 수 없습니다."라는 오류가 나타납니다. 나는 또한 이것에 대해 꽤 새로운 것을 추가해야한다. 그래서 명백하거나 간단한 것으로 밝혀지면 나에게 알려주기 바란다. – Vegeta
문제의 구성 요소를 검토하지 않았습니다. 왜 사용자의 권한에 따라 '배열'을 생성 할 수 없습니까? 이것은 응용 프로그램 개발에서 매우 일반적입니다. 사용자 권한을 기반으로 dataProvider를 생성합니다. "컨테이너"가 사용자 권한과 어떤 관련이 있는지 이해할 수 없습니다. 좀 더 많은 코드를 공유 할 수 있습니까? 아마도 간단한 샘플로 문제를 설명하기에 충분합니까? – JeffryHouser