ActionScript 3.0 预加载器问题
首先,我非常感谢任何帮助,一如既往......
我已经从 Jarrod 的高级 AS3 预加载器教程。 我在其他地方进行了搜索,这似乎是我的最佳选择,因为这是我了解的唯一不需要 2 个 SWF 文件的选择。
我的代码实际上分为两个类,我的预加载器类和我的程序类。 我的问题是预加载器仅加载闪存中的图形,而不实际启动程序类。 我的问题是如何预加载以启动程序类?这两个文件的完整代码如下。
Preloader.as
package {
import flash.display.*;
import flash.text.*;
import flash.events.*;
import fl.containers.ScrollPane;
import flash.filters.*;
public class Preloader extends MovieClip {
public static const ENTRY_FRAME:Number=3;
public static const DOCUMENT_CLASS:String='Program';
public var myText:TextField;
public var myFormat:TextFormat;
private var progressBar:Sprite;
private var progressText:TextField;
public function Preloader() {
stop();
progressBar = getChildByName("loadbar_mc") as Sprite;
progressText = getChildByName("loading_txt") as TextField;
progressBar.scaleX = 0;
myFormat = new TextFormat();
myFormat.font="Helvetica";
myFormat.color = 0x000000;
myFormat.size = 24;
loaderInfo.addEventListener(Event.INIT, initHandler);
loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
}
private function initHandler(event:Event):void {
progressBar.scaleX = 0;
progressText.text = "Loading 0%";
}
private function progressHandler(event:ProgressEvent):void {
var loaded:uint = event.bytesLoaded;
var total:uint = event.bytesTotal;
var percentLoaded:Number = Math.round((loaded/total) * 50);
progressBar.scaleX = loaded/total;
progressText.text = "Loading " + percentLoaded + "%";
}
private function completeHandler(event:Event):void {
play();
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
private function enterFrameHandler(event:Event):void {
if (currentFrame >= Preloader.ENTRY_FRAME) {
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
stop();
main();
}
}
private function errorHandler(event:IOErrorEvent):void {
myText.text = ("Sorry, there was an error. " + event);
myText.setTextFormat(myFormat);
}
private function main():void {
var programClass:Class = loaderInfo.applicationDomain.getDefinition(Preloader.DOCUMENT_CLASS) as Class;
var program:Sprite = new programClass() as Sprite;
addChild(program);
}
}
}
Program.as
package {
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.text.*;
import fl.controls.TextInput;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.containers.ScrollPane;
import flash.geom.Rectangle;
import fl.controls.Label;
public class Program extends Sprite {
public function Program() {
//define variable
var startX:Number;
var startY:Number;
var counter:Number = 0;
var intMessages:Number = 550;
var limit:Number = 10;
var intBoardSize:Number = 476*(Math.round(intMessages/15)+1);
var intMessageMinX:Number = 35;
var intMessageMaxX:Number = intBoardSize-99;
var intMessageMinY:Number = 50;
var intMessageMaxY:Number = 310;
var activeGloveName:String = ""
var intDegreeHigh:Number = 45;
var intDegreeLow:Number = -45;
var newGlove:mcGlove;
//create objects
var myGlove:mcGlove = new mcGlove();
var showGlove:mcGlove = new mcGlove
var mcglovetarget:mcGloveTarget = new mcGloveTarget();
var myDropShadowFilterSmall = new DropShadowFilter (2,45,0x000000,0.65,3,3,2,3,false,false,false);
var myDropShadowFilterDown = new DropShadowFilter (3,45,0x000000,0.65,5,5,2,3,false,false,false);
var myDropShadowFilterUp = new DropShadowFilter (5,45,0x000000,0.65,7,7,2,3,false,false,false);
var topShadow = new DropShadowFilter (3,90,0x000000,0.35,8,8,2,3,false,false,false);
var pinkline:Sprite = new Sprite();
var searchBox:Sprite = new Sprite();
var txtSearchBox:TextInput = new TextInput();
var sSearchBox_Label:String = "Go to glove #";
var messageFormat:TextFormat = new TextFormat();
var messageTextField:Label = new Label();
var searchBoxLFormat:TextFormat = new TextFormat();
var txtSearchBox_Label:TextField = new TextField();
var SearchBoxBg:Sprite = new Sprite();
var topShadowBox:Sprite = new Sprite();
var searchButton:searchBtn = new searchBtn();
var alertRect:Rectangle = new Rectangle(0,0,848,393);
var errorMessage:AlertBox = new AlertBox(alertRect);
var holder:MovieClip = new MovieClip();
var aMessages:Array = new Array();
//Create a glove for each message
for (var gloveCount = 0; gloveCount < intMessages; gloveCount++){
aMessages[gloveCount] = new mcGlove();
aMessages[gloveCount] = createMessage(aMessages[gloveCount], gloveCount, gloveCount);
}
var scrollPane:ScrollPane = new ScrollPane();
scrollPane.verticalScrollPolicy = "false";
scrollPane.move(374, 0);
scrollPane.setSize(476, 370);
scrollPane.horizontalLineScrollSize = 120;
topShadowBox.graphics.beginFill(0x333333);
topShadowBox.graphics.drawRect(0,0,870,5);
topShadowBox.x = -10;
topShadowBox.y = -5;
topShadowBox.filters = [topShadow];
pinkline.graphics.beginFill(0xDB9195);
pinkline.graphics.drawRect(0,0,476,2);
pinkline.x = 374;
pinkline.y = 353;
searchBox.graphics.beginFill(0xDB9195);
searchBox.graphics.drawRect(0,0,476,25);
searchBox.x = 374;
searchBox.y = 370;
SearchBoxBg.graphics.beginFill(0xffffff);
SearchBoxBg.graphics.drawRect(0,0,35,17);
SearchBoxBg.x = 475;
SearchBoxBg.y = 374;
txtSearchBox.width = 35;
txtSearchBox.height = 15;
txtSearchBox.move(475,375);
txtSearchBox.restrict = "0-9";
txtSearchBox.maxChars = 4;
//txtSearchBox.background = "0xffffff";
//txtSearchBox.border = "0x0xDB9195";
searchBoxLFormat.font="Helvetica";
searchBoxLFormat.color = 0xffffff;
searchBoxLFormat.bold = true;
searchBoxLFormat.size = 10;
txtSearchBox_Label.x = 400;
txtSearchBox_Label.y = 374;
txtSearchBox_Label.width = 70;
txtSearchBox_Label.height = 17;
txtSearchBox_Label.text = sSearchBox_Label;
txtSearchBox_Label.setTextFormat(searchBoxLFormat);
searchButton.x = 534;
searchButton.y = 382;
//add to frame
sortObjects();
scrollPane.source = holder;
//create instance names for referancing/compairing objects
myGlove.name = "mcglove";
myGlove.setGloveMessage("My Sister Suzy, I pray that she will be ok. I love here so much, she is the best sister ever. I miss you RIP");
mcglovetarget.name = "mcglovetarget";
messageFormat.font="Helvetica";
messageFormat.color = 0xffffff;
messageFormat.bold = true;
messageFormat.size = 17;
messageFormat.align = "center";
messageTextField.x = -85;
messageTextField.y = -40;
messageTextField.width = 135;
messageTextField.height = 140;
messageTextField.text = myGlove.getGloveMessage();
messageTextField.wordWrap = true;
messageTextField.mouseEnabled = false;
messageTextField.buttonMode = true;
messageTextField.setStyle("textFormat", messageFormat);
//messageTextField.hitArea = 0;
myGlove.addChild(messageTextField);
//position the glove and modify apperiance
myGlove.x = 163;
myGlove.y = 211;
myGlove.filters = [myDropShadowFilterDown];
//myGlove.addChild(messageTextField);
showGlove.x = 163;
showGlove.y = 211;
showGlove.filters = [myDropShadowFilterDown];
mcglovetarget.x = 615;
mcglovetarget.y = 211;
mcglovetarget.alpha = 0
//action listeners
myGlove.addEventListener(MouseEvent.MOUSE_DOWN, selectGlove);
myGlove.addEventListener(MouseEvent.MOUSE_UP, releaseGlove);
searchButton.addEventListener(MouseEvent.CLICK, searchMessages);
txtSearchBox.addEventListener(KeyboardEvent.KEY_UP, checkForEnter);
function selectGlove(event:MouseEvent):void {
event.currentTarget.startDrag(true);
var myTargetName:String = event.currentTarget.name + "target";
var myTarget:DisplayObject = getChildByName(myTargetName);
myGlove.filters = [myDropShadowFilterUp];
addChild(myTarget);
event.currentTarget.parent.addChild(event.currentTarget);
addChild(topShadowBox);
myTarget.alpha = .5;
startX = event.currentTarget.x;
startY = event.currentTarget.y;
}
function releaseGlove(event:MouseEvent):void {
event.currentTarget.stopDrag();
var myTargetName:String = event.currentTarget.name + "target";
var myTarget:DisplayObject = getChildByName(myTargetName);
event.currentTarget.filters = [myDropShadowFilterDown];
myTarget.alpha = 0;
if (event.currentTarget.dropTarget != null && event.currentTarget.dropTarget.parent == myTarget){
event.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN, selectGlove);
event.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, releaseGlove);
event.currentTarget.x = myTarget.x;
event.currentTarget.y = myTarget.y;
var myTween:Tween = new Tween(getChildByName(event.currentTarget.name), "scaleX",Strong.easeOut,getChildByName(event.currentTarget.name).scaleX,.28,2,true);
var myTween2:Tween = new Tween(getChildByName(event.currentTarget.name), "scaleY",Strong.easeOut,getChildByName(event.currentTarget.name).scaleY,.28,2,true);
holder.addChild(getChildByName(event.currentTarget.name));
event.currentTarget.removeChild(messageTextField);
scrollPane.source = holder;
holder.getChildByName(event.currentTarget.name).x=Math.round(Math.random() * (470+Math.round(scrollPane.horizontalScrollPosition) - Math.round(scrollPane.horizontalScrollPosition))) + Math.round(scrollPane.horizontalScrollPosition);
holder.getChildByName(event.currentTarget.name).y=Math.round(Math.random() * (intMessageMaxY - intMessageMinY)) + intMessageMinY;
holder.getChildByName(event.currentTarget.name).addEventListener(MouseEvent.MOUSE_DOWN, clickMessage);
holder.getChildByName(event.currentTarget.name).addEventListener(MouseEvent.MOUSE_UP, releaseMessage);
event.currentTarget.name = "" + intMessages;
addChild(showGlove);
messageTextField.text = "Select a glove to view its message here.";
showGlove.addChild(messageTextField);
} else {
event.currentTarget.x = startX;
event.currentTarget.y = startY;
}
//sortObjects();
addChild(mcglovetarget);
addChild(scrollPane);
addChild(pinkline);
addChild(searchBox);
addChild(SearchBoxBg);
addChild(txtSearchBox);
addChild(txtSearchBox_Label);
addChild(searchButton);
addChild(topShadowBox);
}
function position(target) {
target.x = Math.round(Math.random() * (intMessageMaxX - intMessageMinX)) + intMessageMinX;
target.y = Math.round(Math.random() * (intMessageMaxY - intMessageMinY)) + intMessageMinY;
for (var i:uint=0; i<aMessages.length -1 ; i++) {
if(target.hitTestObject(aMessages[i]) && counter < limit){
counter++;
position(target);
//return false;
};
}
}
function createMessage(newGlove:mcGlove, sName:String, sMessage:String){
newGlove.scaleX = .28;
newGlove.scaleY = .28;
counter = 0;
position(newGlove);
newGlove.rotation = (0, 0, 0, Math.round(Math.random() * (intDegreeHigh - intDegreeLow)) + intDegreeLow);
newGlove.filters = [myDropShadowFilterSmall];
newGlove.name = sName;
holder.addChild(newGlove);
newGlove.setGloveMessage(sMessage);
newGlove.addEventListener(MouseEvent.MOUSE_DOWN, clickMessage);
newGlove.addEventListener(MouseEvent.MOUSE_UP, releaseMessage);
newGlove.buttonMode = true;
return newGlove;
}
function clickMessage(event:MouseEvent):void{
selectMessage(event.target);
}
function checkForEnter(event:KeyboardEvent):void
{
if (event.keyCode == 13) // If Keypress is Enter
{
searchMessages();
}
}
function searchMessages():void{
if (showGlove.parent == mcglovetarget.parent){
if ( txtSearchBox.text != "" ){
var searchTarget:DisplayObject = holder.getChildByName(txtSearchBox.text);
if (searchTarget){
selectMessage(searchTarget);
scrollPane.horizontalScrollPosition = searchTarget.x - 220;
}else if(1==1){ //if in file
gloveCount = aMessages.length;
aMessages[gloveCount] = new mcGlove();
aMessages[gloveCount] = createMessage(aMessages[gloveCount], txtSearchBox.text, txtSearchBox.text);
selectMessage(aMessages[gloveCount]);
scrollPane.horizontalScrollPosition = aMessages[gloveCount].x - 220;
}else{
errorMessage.setAlertText("Sorry, the glove you are searching for does not exist.");
addChild(errorMessage);
}
}
}else{
errorMessage.setAlertText("You must post your message first, otherwise your message will be lost.");
addChild(errorMessage);
}
}
function selectMessage(object:mcGlove):void{
if (showGlove.parent == mcglovetarget.parent){
if (activeGloveName != ""){
var activeGlove:DisplayObject = holder.getChildByName(activeGloveName);
activeGlove.filters = [myDropShadowFilterSmall];
activeGlove.scaleX = .28;
activeGlove.scaleY = .28;
holder.addChild(activeGlove);
}
activeGloveName = object.name;
//event.target.dragIt();
holder.addChild(object);
object.filters = [new GlowFilter(0xABEEFC, .65, 15, 15, 1, 1, false, false)];
object.scaleX = .35;
object.scaleY = .35;
messageTextField.text = object.getGloveMessage();
}else{
errorMessage.setAlertText("You must post your message first, otherwise your message will be lost.");
addChild(errorMessage);
}
}
function releaseMessage(event:MouseEvent):void{
event.target.dropIt();
}
function sortObjects():void{
addChild(mcglovetarget);
addChild(scrollPane);
addChild(pinkline);
addChild(searchBox);
addChild(SearchBoxBg);
addChild(txtSearchBox);
addChild(txtSearchBox_Label);
addChild(searchButton);
addChild(myGlove);
addChild(topShadowBox);
}
myGlove.buttonMode = true;
searchButton.buttonMode = true;
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在预加载器主程序中,您像这样实例化程序,
我认为您应该这样做:
请注意,您不需要将程序转换为精灵,因为它已经是精灵了。
ps:你真的在程序构造函数中编写嵌套函数吗? 我的天啊 :-/
in the preloader main, you istantiate the program like this
I think you should do:
Note that you don't need to cast Program as a Sprite, since it is already a Sprite.
ps: are you really writing nested functions in the Program constructor? omg :-/