Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Beginning ActionScript 2.0 2006

.pdf
Скачиваний:
105
Добавлен:
17.08.2013
Размер:
12.47 Mб
Скачать

Appendix A

<body bgcolor=”#ffffff”>

<object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000” codebase=”http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#ver sion=8,0,0,0” width=”400” height=”100” id=”tryItOut_openWIndow” align=”middle”>

<param name=”allowScriptAccess” value=”sameDomain” /> <param name=”movie” value=”exercise1.swf” />

<param name=”quality” value=”high” /> <param name=”bgcolor” value=”#ffffff” />

<embed src=”exercise1.swf” quality=”high” bgcolor=”#ffffff” width=”400” height=”100” name=”tryItOut_openWIndow” align=”middle” allowScriptAccess=”sameDomain” type=”application/x-shockwave-flash” pluginspage=”http://www.macromedia.com/go/getflashplayer” />

</object>

</body>

</html>

Chapter 25

Exercise Solution

The Flash player will prompt the user to select a download directory to save the file in for each attempt. There is no way around this. However, it will at least remember the last location selected.

import mx.controls.Button; import mx.controls.Label; import mx.controls.TextInput; import mx.controls.ProgressBar; import flash.net.FileReference;

var eventHandler:Object = new Object(); var fileRefListener:Object = new Object();

var fileRef:FileReference = new FileReference(); var numRetries:Number = 0;

var retryIntervalId:Number;

setupInterface();

function setupInterface()

{

this.createClassObject(Label, “urlLabel”, this.getNextHighestDepth(), ; {_x:10, _y:13});

urlLabel.text = “URL:”;

this.createClassObject(TextInput, “urlInput”, this.getNextHighestDepth(), ; {_x:60, _y:10, _width:450});

urlInput.text = ; “http://www.macromedia.com/platform/whitepapers/platform_overview.pdf”;

this.createClassObject(Button, “openWindowButton”, this.getNextHighestDepth(), ; {_x:10, _y:50});

openWindowButton.label = “Download”; openWindowButton.addEventListener(“click”, eventHandler);

this.createClassObject(ProgressBar, “fileTransferProgressBar”, ;

748

Exercise Answers

this.getNextHighestDepth()); fileTransferProgressBar._x = 120; fileTransferProgressBar._y = 50; fileTransferProgressBar.mode = “manual”; fileTransferProgressBar.label = “Downloaded %3%%”; fileTransferProgressBar._visible = false;

this.createTextField(“feedbackField”, this.getNextHighestDepth(), ; 10, 80, 400, 30);

}

fileRefListener.onOpen = function(file:FileReference)

{

feedbackField.text = “Starting file download.”; fileTransferProgressBar._visible = true;

}

fileRefListener.onProgress = function(file:FileReference, bytesLoaded:Number, ; bytesTotal:Number)

{

feedbackField.text = “Download in progress.”; fileTransferProgressBar.setProgress(bytesLoaded, bytesTotal);

}

fileRefListener.onComplete = function(file:FileReference)

{

feedbackField.text = “Download complete.”; fileTransferProgressBar._visible = false;

}

fileRefListener.onIOError = function(file:FileReference)

{

fileTransferProgressBar._visible = false; if(numRetries < 3)

{

feedbackField.text = “Download failed - retrying in 30 seconds.”; numRetries++;

retryIntervalId = setInterval(retryDownload, 18000);

}

else

{

feedbackField.text = “Download failed after 3 retries.”;

}

}

fileRefListener.onSecurityError = function(file:FileReference)

{

feedbackField.text = “Download failed - security/permissions error.”; fileTransferProgressBar._visible = false;

}

eventHandler.click = function()

{

clearInterval(retryIntervalId);

fileRef.addListener(fileRefListener);

fileRef.download(urlInput.text);

749

Appendix A

numRetries = 0;

}

function retryDownload():Void

{

clearInterval(retryIntervalId); feedbackField.text = “Trying download again.”; fileRef.download(urlInput.text);

}

Chapter 26

Exercise 1 Solution

var operatingSystem = System.capabilities.os ; this.createTextField(“welcome”,0,10,10,200,0); welcome.autoSize = true;

welcome.multiline = true;

welcome.text = “Welcome “+operatingSystem+” user.”;

logo = this.createEmptyMovieClip(“clip1”,this.getNextHighestDepth()); logo._y = welcome._y + welcome.textHeight; logo.loadMovie(operatingSystem+”.jpg”);

Exercise 2 Solution

1.Place the first EXE in the root of your project folder.

2.Create an fscommand folder in the root of your project folder.

3.Place the second EXE in the fscommand folder.

4.In the first EXE, enter the following ActionScript on frame 1:

fscommand(“exec”,”second.exe”);

5.Test the first EXE projector to see both projectors launch.

Exercise 3 Solution

In Windows, rename the file myFlashSaver.scr and place it in the System32 folder. Set it as your screen saver in the Display Properties dialog box.

Chapter 27

Exercise 1 Solution

a.Valid. When a public or private keyword is not included, the property defaults to being public.

b.Valid. Although no type information is provided, this will only prevent the compiler from checking for type conflicts with this property.

c.Valid. Static properties are allowed and let the developer access a piece of data without having to instantiate the class.

d.Invalid: It is missing the var keyword.

750

Exercise Answers

e.Valid. Assignment statements can be combined with the property declaration.

f.The property declaration is valid, but the variable assignment results in a type mismatch compiler error.

Exercise 2 Solution

a.Sets the pMessageText property to “The quick brown fox. Jumped over the lazy dog.”

b.Prints “The quick brown fox. Jumped over the lazy dog.” in the output panel.

c.Results in a compiler error because it is attempting to access a private property.

d.Results in a compiler error because it is attempting to access a private method.

e.Removes all periods from the text stored in pMessageText.

f.Traces “The quick brown fox Jumped over the lazy dog”.

g.Sets the altMessage property to “foo”.

h.Results in a compiler error because there is no public property called alternate, nor an alternate getter method. The getAlternate() method is not strictly a getter; it is a normal class method.

i.Outputs the string “Foo”.

j.Outputs the string “Foo”.

Exercise 3 Solution

This exercise is representative of how you might want to manage application data for any application, where the data is structured in a class, and where methods and properties control access to that data.

Contents of PhotoData.as:

class PhotoData

{

var pPhotoArray:Array; var pNumVisited:Number;

public function PhotoData()

{

pPhotoArray = new Array(); pNumVisited = 0;

}

public function addData(photoId:String, photoName:String, ; description:String, thumbnailURL:String, fullSizeURL:String, ; imageSize:Number):Void

{

var tempObject:Object = new Object(); tempObject.id = photoId; tempObject.name = photoName; tempObject.description = description; tempObject.thumbnailURL = thumbnailURL; tempObject.fullSizeURL = fullSizeURL;

751

Appendix A

tempObject.size = imageSize; tempObject.visited = false;

pPhotoArray.push(tempObject);

}

public function getDataById(photoId:String):Object

{

var numPhotos:Number = pPhotoArray.length; for (var i:Number = 0; i < numPhotos; i++)

{

if (pPhotoArray[i].id == photoId)

{

return pPhotoArray[i];

}

}

return null;

}

public function getDataByIndex(photoIndex:Number):Object

{

if (photoIndex >= 0 && photoIndex < pPhotoArray.length)

{

return pPhotoArray[photoIndex];

}

}

public function get numPhotos():Number

{

return pPhotoArray.length;

}

public function get numVisited():Number

{

return pNumVisited;

}

public function setVisited(photoIndex:Number):Void

{

var tempData:Object = getDataByIndex(photoIndex); if (tempData != null)

{

tempData.visited = true; pNumVisited++;

}

}

public function toString():String

{

var numPhotos:Number = pPhotoArray.length; var returnString:String = “”;

for (var i:Number = 0; i < numPhotos; i++)

{

returnString

+=

“\n------------------------

”;

returnString

+=

“\nid:

“ + pPhotoArray[i].id;

752

 

Exercise Answers

 

 

returnString += “\nname:

“ + pPhotoArray[i].name;

returnString += “\ndescription:

“ + pPhotoArray[i].description;

returnString += “\nthumbnailURL:

“ + pPhotoArray[i].thumbnailURL;

returnString += “\nfullSizeURL:

“ + pPhotoArray[i].fullSizeURL;

returnString += “\nsize:

“ + pPhotoArray[i].size;

returnString += “\nvisited:

“ + pPhotoArray[i].visited;

}

 

return returnString;

 

}

}

Sample script on the FLA timeline:

var fullPhotoData:PhotoData = new PhotoData(); fullPhotoData.addData(“photo1”, “Photo 1”, “The quick brown fox 1”, ;

“photo1Thumbnail.jpg”, “photo1FullSize.jpg”, 123); fullPhotoData.addData(“photo2”, “Photo 2”, “The quick brown fox 2”, ;

“photo2Thumbnail.jpg”, “photo2FullSize.jpg”, 213); fullPhotoData.addData(“photo3”, “Photo 3”, “The quick brown fox 3”, ;

“photo3Thumbnail.jpg”, “photo3FullSize.jpg”, 312);

fullPhotoData.setVisited(1);

trace(“Visiting: “ + fullPhotoData.getDataByIndex(1).name);

trace(“photo2 description: “ + fullPhotoData.getDataById(“photo2”).description); trace(“numPhotos: “ + fullPhotoData.numPhotos);

trace(“numVisited: “ + fullPhotoData.numVisited); trace(fullPhotoData);

Exercise 4 Solution

The bold lines in the following code indicate lines that have been added to the ThumbnailButton class.

import flash.filters.DropShadowFilter;

class ThumbnailButton

{

private var pParentTimeline:MovieClip; private var pThumbnailName:String; private var pThumbnailHolder:MovieClip; private var pImageHolder:MovieClip; private var pBorderHolder:MovieClip; private var pToolTipHolder:MovieClip; private var pClickHandler:Function;

private var pMovieClipLoader:MovieClipLoader; private var pDrawDropShadow:Boolean = true; private var pDrawBorder:Boolean = true;

public function ThumbnailButton(parentTimeline:MovieClip, thumbnailName:String)

{

pParentTimeline = parentTimeline; pThumbnailName = thumbnailName;

pParentTimeline.createEmptyMovieClip(pThumbnailName, ; pParentTimeline.getNextHighestDepth());

753

Appendix A

pThumbnailHolder = pParentTimeline[pThumbnailName];

pThumbnailHolder.createEmptyMovieClip(“imageHolder”, ; pThumbnailHolder.getNextHighestDepth());

pImageHolder = pThumbnailHolder.imageHolder;

pThumbnailHolder.createEmptyMovieClip(“borderHolder”, ; pThumbnailHolder.getNextHighestDepth());

pBorderHolder = pThumbnailHolder.borderHolder;

pThumbnailHolder.createEmptyMovieClip(“toolTipHolder”, ; pThumbnailHolder.getNextHighestDepth());

pToolTipHolder = pThumbnailHolder.toolTipHolder; pToolTipHolder.createTextField(“toolTipText”, ;

pToolTipHolder.getNextHighestDepth(), 0, 0, 200, 20); pToolTipHolder.toolTipText.autoSize = true;

pMovieClipLoader = new MovieClipLoader(); pMovieClipLoader.addListener(this);

}

public function load(imageURL:String):Void

{

pMovieClipLoader.loadClip(imageURL, pImageHolder);

}

private function onLoadInit(targetMovieClip:MovieClip):Void

{

var parent:ThumbnailButton = this;

drawThumbnail(“up”);

pThumbnailHolder.onPress = function()

{

parent.drawThumbnail(“down”);

}

pThumbnailHolder.onRelease = function()

{

if (parent.pClickHandler != null)

{

parent.pClickHandler(parent);

}

parent.drawThumbnail(“over”);

}

pThumbnailHolder.onReleaseOutside = function()

{

parent.drawThumbnail(“up”);

}

pThumbnailHolder.onRollOver = function()

{

parent.drawThumbnail(“over”);

754

Exercise Answers

}

pThumbnailHolder.onRollOut = function()

{

parent.drawThumbnail(“up”);

}

}

private function drawThumbnail(thumbnailState:String):Void

{

var dropShadowFilter:DropShadowFilter; var appliedFilterArray = new Array(); pBorderHolder.clear();

switch(thumbnailState)

{

case “up”:

dropShadowFilter = new DropShadowFilter(3, 45, 0x666666, ; 0.8, 5, 5, 1, 3, false, false, false);

pImageHolder._x = pBorderHolder._x = 0; pImageHolder._y = pBorderHolder._y = 0;

pToolTipHolder._visible = false;

pBorderHolder.lineStyle(1, 0x666666); break;

case “over”:

dropShadowFilter = new DropShadowFilter(3, 45, 0x000000, ; 1, 5, 5, 1, 5, false, false, false);

pImageHolder._x = pBorderHolder._x = 0; pImageHolder._y = pBorderHolder._y = 0;

pToolTipHolder._visible = true; pToolTipHolder._x = pImageHolder._width/2 - ;

pToolTipHolder._width/2; pToolTipHolder._y = pImageHolder._height + 10;

pBorderHolder.lineStyle(1, 0x000000); break;

case “down”:

dropShadowFilter = new DropShadowFilter(1, 45, 0x000000, ; 1, 3, 3, 1, 5, false, false, false);

pImageHolder._x = pBorderHolder._x = 2; pImageHolder._y = pBorderHolder._y = 2;

pToolTipHolder._visible = true; pToolTipHolder._x = pImageHolder._width/2 - ;

pToolTipHolder._width/2 + 2; pToolTipHolder._y = pImageHolder._height + 12;

pBorderHolder.lineStyle(1, 0x990000); break;

755

Appendix A

}

if (pDrawBorder == true)

{

pBorderHolder.moveTo(0, 0); pBorderHolder.lineTo(pImageHolder._width-1, 0); pBorderHolder.lineTo(pImageHolder._width-1, pImageHolder._height-1); pBorderHolder.lineTo(0, pImageHolder._height-1); pBorderHolder.lineTo(0, 0);

}

if (pDrawDropShadow == true)

{

appliedFilterArray.push(dropShadowFilter); pThumbnailHolder.filters = appliedFilterArray;

}

}

public function get onClick():Function

{

return pClickHandler;

}

public function set onClick(clickHandler:Function):Void

{

pClickHandler = clickHandler;

}

public function get x():Number

{

return pThumbnailHolder._x;

}

public function set x(xPosition:Number):Void

{

pThumbnailHolder._x = xPosition;

}

public function get y():Number

{

return pThumbnailHolder._y;

}

public function set y(yPosition:Number):Void

{

pThumbnailHolder._y = yPosition;

}

public function get drawBorder():Boolean

{

return pDrawBorder;

}

public function set drawBorder(drawBorderSetting:Boolean):Void

756

Exercise Answers

{

pDrawBorder = drawBorderSetting; drawThumbnail(“up”);

}

public function get drawDropShadow():Boolean

{

return pDrawDropShadow;

}

public function set drawDropShadow(drawDropShadowSetting:Boolean):Void

{

pDrawDropShadow = drawDropShadowSetting; drawThumbnail(“up”);

}

public function get thumbnailName():String

{

return pThumbnailName;

}

public function get toolTipText():String

{

return pToolTipHolder.toolTipText.text;

}

public function set toolTipText(newText:String):Void

{

var tempField:TextField = pToolTipHolder.toolTipText; pToolTipHolder.toolTipText.text = newText;

var toolTipTextFormat:TextFormat = new TextFormat(); toolTipTextFormat.font = “Arial”; toolTipTextFormat.size = 12; toolTipTextFormat.color = 0x333333;

tempField.setTextFormat(toolTipTextFormat);

pToolTipHolder.clear(); pToolTipHolder.lineStyle(1, 0x666666); pToolTipHolder.beginFill(0xFFF8B6, 100);

pToolTipHolder.moveTo(tempField._x - 2, tempField._y - 2); pToolTipHolder.lineTo(tempField._x + tempField._width + 2, ;

tempField._y - 2);

pToolTipHolder.lineTo(tempField._x + tempField._width + 2, ; tempField._y + tempField._height);

pToolTipHolder.lineTo(tempField._x - 2, tempField._y + tempField._height); pToolTipHolder.lineTo(tempField._x - 2, tempField._y - 2); pToolTipHolder.endFill();

}

}

757