Preloader


package
{
import evt.GameEvent;

import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.geom.Point;
import flash.text.TextField;

import mx.effects.SoundEffect;
import mx.events.FlexEvent;
import mx.preloaders.DownloadProgressBar;

/**
* This class extends the lightweight DownloadProgressBar class. This class
* uses an embedded Flash 8 MovieClip symbol to show preloading. *
* @author jessewarden * */
public class Preloader extends DownloadProgressBar
{
/**
* The Flash 8 MovieClip embedded as a Class. */
[Embed(source="/assets/flash/lisenwell.swf", symbol="loader")]
private var FlashPreloaderSymbol:Class;
[Embed(source="/assets/flash/lisenwell.swf", symbol="startbtn")]
private var FlashBtnSymbol:Class;
[Embed(source="/assets/flash/lisenwell.swf", symbol="mouseOver.mp3")]
[Bindable] public var mouseOverSound:Class;

private var clip:MovieClip;
private var _preloader:Sprite;
public var msg:TextField;
public var btn:SimpleButton;
public var point1:Point;
private var btnSoundEffect:SoundEffect;
public function Preloader()
{
super();
btnSoundEffect=new SoundEffect();
btnSoundEffect.source=mouseOverSound;
// instantiate the Flash MovieClip, show it, and stop it.
// Remember, AS2 is removed when you embed SWF's,
// even "stop();", so you have to call it manually if you embed.
this.clip=new FlashPreloaderSymbol();
// point1=new Point();
// clip.scaleX=1.5;
// clip.scaleY=1.5;
// point1.x=this.x-300;
// point1.y=this.y-300;
// point1=this.localToGlobal(point1);
// clip.x=point1.x;
// clip.y=point1.y;
clip.x=this.x
// clip.y=point1.y;
this.addChild(clip);
this.clip.gotoAndStop("start");
// msg=new TextField();
// msg.text="完成了!!!!";
// msg.x=200;
// msg.y=200;
// addChild(msg);

}
private function centerPreloader():void
{
x = (stageWidth / 2) - (clip.width / 2);
y = (stageHeight / 2) - (clip.height / 2);
trace(x+" y"+y+"myPreloader.width"+clip.width)
}
public override function set preloader(preloader:Sprite):void
{
preloader.addEventListener(ProgressEvent.PROGRESS, onSWFDownloadProgress);
preloader.addEventListener(Event.COMPLETE, onSWFDownloadComplete);
preloader.addEventListener(FlexEvent.INIT_PROGRESS, onFlexInitProgress);
preloader.addEventListener(FlexEvent.INIT_COMPLETE, onFlexInitComplete);
stage.addEventListener(Event.RESIZE, centerPreloader);
_preloader=preloader;
centerPreloader();
}

/**
* Makes sure that the preloader is centered in the center of the app.
* */
// private function centerPreloader(event:Event=null):void
// {
// var adjust_X:Number=300; // X coodinate adjustion according to Object layout.
// var adjust_Y:Number=500; // Y coodinate adjustion according to Object layout.
// x=((stage.stageWidth + adjust_X) / 2) - (clip.width / 2);
// y=((stage.stageHeight + adjust_Y) / 2) - (clip.height / 2);
// }

/**
* As the SWF (frame 2 usually) downloads, this event gets called.
* You can use the values from this event to update your preloader.
* @param event * */
private function onSWFDownloadProgress(event:ProgressEvent):void
{
var t:Number=event.bytesTotal;
var l:Number=event.bytesLoaded;
var p:Number=Math.round((l / t) * 100);
clip.loadA.gotoAndStop(p);
//clip.preloader.amount_txt.text=String(p);
//clip.preloader.amount_txt_img.text=String(p);
}

/** * When the download of frame 2
* is complete, this event is called.
* This is called before the initializing is done.
* @param event * */
private function onSWFDownloadComplete(event:Event):void
{
clip.loadA.gotoAndStop(100);
//clip.preloader.amount_txt.text="100";
//clip.preloader.amount_txt_img.text="100";
}

/**
* When Flex starts initilizating your application.
* @param event * */
private function onFlexInitProgress(event:FlexEvent):void
{
clip.loadA.gotoAndStop(100);
//clip.preloader.amount_txt.text="Init...";
}

/**
* When Flex is done initializing, and ready to run your app,
* this function is called. *
* You're supposed to dispatch a complete event when you are done.
* I chose not to do this immediately, and instead fade out the
* preloader in the MovieClip. As soon as that is done,
* I then dispatch the event. This gives time for the preloader
* to finish it's animation. * @param event *
*/
private function onFlexInitComplete(event:FlexEvent):void
{
_preloader.removeEventListener(ProgressEvent.PROGRESS, onSWFDownloadProgress);
_preloader.removeEventListener(Event.COMPLETE, onSWFDownloadComplete);
_preloader.removeEventListener(FlexEvent.INIT_PROGRESS, onFlexInitProgress);
_preloader.removeEventListener(FlexEvent.INIT_COMPLETE, onFlexInitComplete);
stage.removeEventListener(Event.RESIZE, centerPreloader);
// clip.addFrameScript(121, onDoneAnimating);
clip.gotoAndStop("fade out");
btn=new FlashBtnSymbol();
btn.x=280; btn.y=180;
clip.addChild(btn);
btn.addEventListener(MouseEvent.CLICK,onDoneAnimating);
btn.addEventListener(MouseEvent.MOUSE_OVER,onOver);
//clip.loadA.stop();
trace("fade out ");
clip.stop();

}

/**
* If the Flash MovieClip is done playing it's animation,
* I stop it and dispatch my event letting Flex know I'm done.
* @param event * */
private function onDoneAnimating(evt:MouseEvent):void
{
this.removeChild(clip);
dispatchEvent(new Event(Event.COMPLETE));
}
private function onOver(evt:MouseEvent):void{

btnSoundEffect.play([btnSoundEffect]);

}
}
}

<think>嗯,用户问的是预加载器(preloader)的相关信息,包括什么是preloader以及如何实现预加载功能。首先,我需要明确预加载器的定义和它在不同场景下的应用。预加载器通常用于提高用户体验,提前加载资源或数据,减少等待时间。可能涉及的技术包括前端预加载、Android应用中的预加载,还有可能涉及JavaScript库或者RxJava等框架。 接下来,用户提供的引用资料里有关于Java、Android、jQuery插件的示例。比如引用1和2提到了Java中的PreLoader类,引用3是jQuery的预加载插件,引用4是Android中使用RxJava实现预加载。这说明用户可能对多种实现方式感兴趣,需要覆盖不同平台和技术。 我需要先解释预加载器的基本概念,然后分不同场景说明实现方法。例如,前端可以用jQuery插件,Android可以用RxJava或预加载类,服务端可以用Java多线程。还要注意用户提到的代码示例,比如引用3中的HTML结构和引用4中的RxJava代码,需要正确引用这些例子到回答中。 另外,用户的问题结构要求生成相关问题,我需要确保相关问题与预加载器相关,覆盖实现方式、优化、应用场景等。同时,回答中引用的部分需要正确标注引用来源,比如引用3和4。 需要检查是否所有技术点都覆盖到了,比如资源预加载、数据预加载,以及不同平台的具体实现。还要注意使用中文回答,并确保LaTeX格式正确,但用户的问题中没有数学表达式,可能不需要用到。不过根据系统指令,如果有变量或代码,要正确格式化。这里的回答中主要是代码示例,需要用代码块包裹,并正确标注引用。 最后,确保回答结构清晰,分点说明,每个实现方法都有对应的例子和引用。可能还需要提醒用户预加载的注意事项,比如资源浪费,需要合理控制预加载的内容和时间。</think>### 预加载器(Preloader)的定义与实现 #### 1. 什么是预加载器? 预加载器(Preloader)是一种技术手段,通过提前加载用户可能需要的资源(如图片、数据、页面等),减少后续操作的等待时间,提升用户体验[^3]。其核心思想是“空间换时间”,常见于网页、移动应用和游戏开发中。 #### 2. 实现预加载功能的常见方法 ##### (1) 网页端实现(jQuery插件) 通过预加载动画或资源文件实现页面平滑过渡: ```html <div id="preloader">加载动画内容</div> <script> $(window).on("load", function(){ $("#preloader").fadeOut(); }); </script> ``` 需配合CSS定义预加载动画样式[^3]。 ##### (2) Android端实现 **RxJava异步预加载**: ```java // 创建延迟500ms的模拟网络请求 PreLoader<String> preLoader = RxPreLoader.preLoad( Observable.just("result").delay(500, TimeUnit.MILLISECONDS) ); ``` 通过Observable管理异步任务生命周期[^4]。 **多线程预加载**: ```java int preLoaderId = PreLoader.preLoad(new Loader() { @Override public void load() { // 执行耗时操作(如数据库查询) } }); ``` 使用独立线程执行预加载任务[^1][^2]。 ##### (3) 服务端实现 通过后台线程预加载热点数据: ```python import threading def preload_data(): # 数据库查询/API调用 pass # 启动预加载线程 threading.Thread(target=preload_data).start() ``` #### 3. 注意事项 - **资源控制**:避免过度预加载导致内存占用过高 - **触发时机**:建议在空闲时段或用户行为预测后执行 - **生命周期管理**:需与页面/应用生命周期绑定,及时终止无效预加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值