| rodnover |
23.02.2011 16:06 |
Дергающееся поле
Вложений: 1
Здравствуйте создаю флеш ролик для myspace под ubuntu в связке Eclipse+AS IDE+flex_sdk. При добавлении к картинке события MOUSE_MOVE и изменения в нем параметров фильтра изображение начинает дергаться. Причем, это дергание возникает только при параметре wmode="transparent". Если поставить wmode="opaque" дерганье исчезает.
Код добавления ролика на страничку:
PHP код:
<div style="height: 400px; width: 960px; ">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" style="height: 100%; width: 100%;">
<param name="allowScriptAccess" value="never" />
<param name="allowNetworking" value="internal" />
<param name="movie" value="header.swf" />
<param name="wmode" value="transparent" />
<embed type="application/x-shockwave-flash" allowScriptAccess="never" allowNetworking="internal" src="header.swf" style="height: 100%; width: 100%;" wmode="transparent" />
</object>
</div>
Поставить wmode="opaque" я не могу из-за особенностей myspace. При непосредственной загрузке swf в браузер мерцания тоже не наблюдается.
С чем это может быть связано и как можно это исправить?
http://www.myspace.com/lastwailtest здесь можно посмотреть корявость ролика.
Код AS3:
package lastwail.header
{
import flash.filters.BitmapFilterQuality;
import flash.filters.BitmapFilterType;
import flash.filters.GradientGlowFilter;
import flash.events.Event;
import flash.events.MouseEvent;
import mx.core.BitmapAsset;
public class Logo
{
// this.Parent.GetDisplay() - получает указатель на Sprite главного окна
private var Parent: Application;
[Embed(source="/var/www/Logo.png")]
private var EmbedLogo: Class;
private var LogoLoader: BitmapAsset;
private var Glow: GradientGlowFilter;
private var KAlpha: Number;
public static const KAlphaMax: Number = 0.7;
public static const KAlphaMin: Number = 0.5;
private function Fade(Current: Number, From: Number, To: Number): Number
{
var Result: Number = Current + (To - From) * 1000 / (Common.FadeTime() * this.Parent.GetDisplay().stage.frameRate)
if (((Result <= Current) && (Result < To)) || ((Result >= Current) && (Result > To)))
Result = To;
return Result;
}
public function Logo(P: Application)
{
this.Parent = P;
this.LogoLoader = new EmbedLogo();
this.KAlpha = 1;
Glow = new GradientGlowFilter();
Glow.distance = 0;
Glow.angle = 45;
Glow.colors = [0x0000FF, 0xFF0000];
Glow.alphas = [0, KAlphaMax];
Glow.ratios = [0, 255];
Glow.blurX = 0;
Glow.blurY = 0;
Glow.strength = 0;
Glow.quality = BitmapFilterQuality.HIGH;
Glow.type = BitmapFilterType.OUTER;
this.LogoLoader.x = (this.Parent.GetDisplay().stage.stageWidth - this.LogoLoader.width) / 2;
this.LogoLoader.y = 15;
this.Paint();
this.LogoLoader.filters = [Glow];
this.Parent.GetDisplay().stage.addEventListener(MouseEvent.MOUSE_MOVE, this.OnMouseMove);
}
private function OnMouseMove(event: MouseEvent):void
{
var MX: Number = event.stageX;
var MY: Number = event.stageY;
Glow.blurX = this.KAlpha * 127 * Math.exp(-5 * Math.abs(MX
- (this.LogoLoader.x + this.LogoLoader.width / 2)) / (this.Parent.GetDisplay().stage.stageWidth));
Glow.blurY = this.KAlpha * 127 * Math.exp(-5 * Math.abs(MY
- (this.LogoLoader.y + this.LogoLoader.height / 2)) / (this.Parent.GetDisplay().stage.stageHeight));
Glow.strength = this.KAlpha * 7 * Math.exp(-0.004 * (255 - (Glow.blurX + Glow.blurY)));
this.LogoLoader.filters = [Glow]; // Комментируем эту строчку - дергание прекращается
}
public function FadeIn(E: Event): void
{
this.KAlpha = Fade(this.KAlpha, KAlphaMin, KAlphaMax);
Glow.alphas = [0, this.KAlpha];
this.LogoLoader.filters = [Glow];
if (this.KAlpha >= 1)
this.Parent.GetDisplay().removeEventListener(Event.ENTER_FRAME, this.FadeIn);
}
public function FadeOut(E: Event): void
{
this.KAlpha = Fade(this.KAlpha, KAlphaMax, KAlphaMin);
Glow.alphas = [0, this.KAlpha];
this.LogoLoader.filters = [Glow];
if (KAlpha <= 0.5)
this.Parent.GetDisplay().removeEventListener(Event.ENTER_FRAME, this.FadeOut);
}
public function OnResizeDisplay(e: Event): void
{
if (this.Parent.GetDisplay().stage.stageHeight < Common.DefaultHeight())
{
this.Parent.GetDisplay().removeEventListener(Event.ENTER_FRAME, this.FadeOut);
this.Parent.GetDisplay().addEventListener(Event.ENTER_FRAME, this.FadeIn);
}
else
{
this.Parent.GetDisplay().removeEventListener(Event.ENTER_FRAME, this.FadeIn);
this.Parent.GetDisplay().addEventListener(Event.ENTER_FRAME, this.FadeOut);
}
}
private function Paint(): void
{
this.Parent.GetDisplay().addChild(this.LogoLoader);
}
}
}
|