Flash / Flex / ActionScript/Development/stage
Содержание
- 1 A stretchy layout
- 2 Distinguishing Events Targeted at an Object from Events Targeted at That Object"s Descendants
- 3 Local Global Sample
- 4 Recursive display list tree traversal
- 5 responds to mouse clicks that occur over any object on the display list, but not over a vacant area of the Stage instance
- 6 Setting the Frame Rate
- 7 Simple Scribble
- 8 Traversing Objects in a Display Hierarchy
- 9 Working with the Stage
A stretchy layout
<source lang="java">
package {
import flash.display.*; import flash.events.*; public class Main extends Sprite { private var rect:Sprite = new Sprite( ); public function Main() { rect.graphics.lineStyle( ); rect.graphics.beginFill(0x0000FF); rect.graphics.drawRect(0, 0, 150, 75); addChild(rect); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener(Event.RESIZE, resizeListener); positionRectangle( ); } private function resizeListener (e:Event):void { positionRectangle( ); } private function positionRectangle ( ):void { rect.x = stage.stageWidth - rect.width; rect.y = 0; } }
}
</source>
Distinguishing Events Targeted at an Object from Events Targeted at That Object"s Descendants
<source lang="java">
package{
import flash.display.GradientType; import flash.display.Sprite; import flash.geom.Matrix; import flash.events.*; public class Main extends Sprite { public function Main() { stage.addEventListener(MouseEvent.CLICK, clickListener); } private function clickListener (e:MouseEvent):void { if (e.eventPhase == EventPhase.AT_TARGET) { } } }
}
</source>
Local Global Sample
<source lang="java">
package {
import flash.display.Sprite; import flash.events.MouseEvent; public class Main extends Sprite { public function Main() { this.stage.scaleMode = "noScale"; this.stage.align = "tl"; var localSprite:Sprite = new Sprite(); localSprite.graphics.beginFill(0x00ffCC, 1); localSprite.graphics.drawCircle(0, 0, 50); localSprite.graphics.endFill(); addChild(localSprite); localSprite.x = 200; localSprite.y = 200; localSprite.addEventListener(MouseEvent.MOUSE_MOVE, moving); } private function moving(mouseEvent:MouseEvent):void { trace(" local " + mouseEvent.localX + " " + mouseEvent.localY); trace(" stage " + mouseEvent.stageX + " " + mouseEvent.stageY); } }
}
</source>
Recursive display list tree traversal
<source lang="java">
package {
import flash.display.*; import flash.events.*; public class Main extends Sprite { public function Main ( ) { var rects:Array = new Array( ); for (var i:int = 0; i < 20; i++) { rects[i] = new Shape( ); rects[i].graphics.lineStyle(1); rects[i].graphics.beginFill(Math.floor(Math.random( )*0xFFFFFF), 1); rects[i].graphics.drawRect(0, 0, 100, 50); rects[i].x = Math.floor(Math.random( )*500); rects[i].y = Math.floor(Math.random( )*400); addChild(rects[i]); } stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener); } private function mouseDownListener (e:Event):void { for (var i:int=0; i < numChildren; i++) { getChildAt(i).rotation = Math.floor(Math.random( )*360); } } public function processChildren (container:DisplayObjectContainer):void { for (var i:int = 0; i < container.numChildren; i++) { var thisChild:DisplayObject = container.getChildAt(i); trace(thisChild.toString( )); if (thisChild is DisplayObjectContainer) { processChildren(DisplayObjectContainer(thisChild)); } } } }
}
</source>
responds to mouse clicks that occur over any object on the display list, but not over a vacant area of the Stage instance
<source lang="java">
package{
import flash.display.GradientType; import flash.display.Sprite; import flash.geom.Matrix; import flash.events.*; public class Main extends Sprite { public function Main() { stage.addEventListener(MouseEvent.CLICK, clickListener); } private function clickListener (e:MouseEvent):void { if (e.eventPhase != EventPhase.AT_TARGET) { } } }
}
</source>
Setting the Frame Rate
<source lang="java">
package {
import flash.display.*; public class Main extends Sprite { public function Main( ) { stage.frameRate = 150; } }
}
</source>
Simple Scribble
<source lang="java">
package {
import flash.display.*; import flash.events.*; public class Main extends Sprite { public function Main( ) { stage.frameRate = 1; graphics.moveTo(stage.mouseX, stage.mouseY); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener); } private function mouseMoveListener (e:MouseEvent):void { graphics.lineStyle(2, 0xFF0000); graphics.lineTo(e.stageX, e.stageY); } }
}
</source>
Traversing Objects in a Display Hierarchy
<source lang="java">
package {
import flash.display.*; import flash.events.*; public class Main extends Sprite { public function Main ( ) { var rects:Array = new Array( ); for (var i:int = 0; i < 20; i++) { rects[i] = new Shape( ); rects[i].graphics.lineStyle(1); rects[i].graphics.beginFill(Math.floor(Math.random( )*0xFFFFFF), 1); rects[i].graphics.drawRect(0, 0, 100, 50); rects[i].x = Math.floor(Math.random( )*500); rects[i].y = Math.floor(Math.random( )*400); addChild(rects[i]); } stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener); } private function mouseDownListener (e:Event):void { for (var i:int=0; i < numChildren; i++) { getChildAt(i).rotation = Math.floor(Math.random( )*360); } } }
}
</source>
Working with the Stage
<source lang="java">
package{
import flash.display.Sprite; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display.DisplayObjectContainer; import flash.events.Event; public class Main extends Sprite { public function Main() { this.graphics.beginFill(0xff0000, 1); this.graphics.drawRect(0, 0, stage.stageWidth/2, stage.stageHeight/2); this.graphics.endFill(); //set what part of the browser the stage will set itself in this.stage.align = StageAlign.TOP_LEFT; //set how the stage scales itself this.stage.scaleMode = StageScaleMode.NO_SCALE; //add an event listener for the stages resized event stage.addEventListener(Event.RESIZE, stageResized); } private function stageResized(event:Event):void { trace(stage.stageHeight+" "+stage.stageWidth); this.graphics.clear(); this.graphics.beginFill(0xff0000, 1); this.graphics.drawRect(0, 0, stage.stageWidth/2, stage.stageWidth/2); this.graphics.endFill(); } }
}
</source>