polygonal clickarea
This commit is contained in:
commit
91b0caf974
56
LaserTube.as3proj
Normal file
56
LaserTube.as3proj
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project>
|
||||
<!-- Output SWF options -->
|
||||
<output>
|
||||
<movie disabled="False" />
|
||||
<movie input="" />
|
||||
<movie path="bin/LaserTube.swf" />
|
||||
<movie fps="30" />
|
||||
<movie width="800" />
|
||||
<movie height="600" />
|
||||
<movie version="10" />
|
||||
<movie background="#FFFFFF" />
|
||||
</output>
|
||||
<!-- Other classes to be compiled into your SWF -->
|
||||
<classpaths>
|
||||
<class path="src" />
|
||||
</classpaths>
|
||||
<!-- Build options -->
|
||||
<build>
|
||||
<option accessible="False" />
|
||||
<option allowSourcePathOverlap="False" />
|
||||
<option benchmark="False" />
|
||||
<option es="False" />
|
||||
<option loadConfig="" />
|
||||
<option optimize="True" />
|
||||
<option showActionScriptWarnings="True" />
|
||||
<option showBindingWarnings="True" />
|
||||
<option showDeprecationWarnings="True" />
|
||||
<option showUnusedTypeSelectorWarnings="True" />
|
||||
<option strict="True" />
|
||||
<option useNetwork="True" />
|
||||
<option useResourceBundleMetadata="True" />
|
||||
<option warnings="True" />
|
||||
<option verboseStackTraces="False" />
|
||||
<option staticLinkRSL="True" />
|
||||
<option additional="" />
|
||||
<option customSDK="" />
|
||||
</build>
|
||||
<!-- Class files to compile (other referenced classes will automatically be included) -->
|
||||
<compileTargets>
|
||||
<compile path="src\Main.as" />
|
||||
</compileTargets>
|
||||
<!-- Paths to exclude from the Project Explorer tree -->
|
||||
<hiddenPaths>
|
||||
<!-- example: <hidden path="..." /> -->
|
||||
</hiddenPaths>
|
||||
<!-- Executed before build -->
|
||||
<preBuildCommand />
|
||||
<!-- Executed after build -->
|
||||
<postBuildCommand alwaysRun="False" />
|
||||
<!-- Other project options -->
|
||||
<options>
|
||||
<option showHiddenPaths="False" />
|
||||
<option testMovie="Default" />
|
||||
</options>
|
||||
</project>
|
80
src/ClickArea.as
Normal file
80
src/ClickArea.as
Normal file
|
@ -0,0 +1,80 @@
|
|||
package
|
||||
{
|
||||
import flash.display.Graphics;
|
||||
import flash.display.Shape;
|
||||
import flash.display.Sprite;
|
||||
import flash.geom.Point;
|
||||
/**
|
||||
* Represents a spot on the screen where the user can click.
|
||||
* @author jjp
|
||||
*/
|
||||
public class ClickArea extends Sprite
|
||||
{
|
||||
private var shape:Shape;
|
||||
private var shapeHidden:Shape;
|
||||
private var fHidden:Boolean;
|
||||
public function ClickArea(rgpoint: Array, color:uint, alpha:Number = 1)
|
||||
{
|
||||
super();
|
||||
shape = MakeShape(rgpoint, color, alpha);
|
||||
shapeHidden = MakeShape(rgpoint, color, 0);
|
||||
fHidden = false;
|
||||
addChild(shape);
|
||||
}
|
||||
private function MakeShape(rgpoint:Array, color:uint, alpha:Number):Shape
|
||||
{
|
||||
var shape:Shape = new Shape();
|
||||
shape.graphics.beginFill(color, alpha);
|
||||
var fFirstPoint:Boolean = true;
|
||||
for each (var point:Point in rgpoint)
|
||||
{
|
||||
if (fFirstPoint)
|
||||
{
|
||||
shape.graphics.moveTo(point.x, point.y);
|
||||
fFirstPoint = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
shape.graphics.lineTo(point.x, point.y);
|
||||
}
|
||||
}
|
||||
shape.graphics.lineTo(rgpoint[0].x, rgpoint[0].y);
|
||||
shape.graphics.endFill();
|
||||
return shape;
|
||||
}
|
||||
public function Show():void
|
||||
{
|
||||
if (fHidden)
|
||||
{
|
||||
removeChild(shapeHidden);
|
||||
addChild(shape);
|
||||
fHidden = false;
|
||||
}
|
||||
}
|
||||
public function Hide():void
|
||||
{
|
||||
if (!fHidden)
|
||||
{
|
||||
removeChild(shape);
|
||||
addChild(shapeHidden);
|
||||
fHidden = true;
|
||||
}
|
||||
}
|
||||
public function Toggle(): void
|
||||
{
|
||||
if (fHidden)
|
||||
Show();
|
||||
else
|
||||
Hide();
|
||||
}
|
||||
public function FHit(point:Point):Boolean
|
||||
{
|
||||
var shape:Shape;
|
||||
if (!fHidden)
|
||||
shape = this.shape;
|
||||
else
|
||||
shape = this.shapeHidden;
|
||||
return shape.hitTestPoint(point.x, point.y, true);
|
||||
}
|
||||
}
|
||||
}
|
37
src/Main.as
Normal file
37
src/Main.as
Normal file
|
@ -0,0 +1,37 @@
|
|||
package
|
||||
{
|
||||
import flash.display.Sprite;
|
||||
import flash.events.Event;
|
||||
import flash.events.MouseEvent;
|
||||
import flash.geom.Point;
|
||||
|
||||
/**
|
||||
* ...
|
||||
* @author jjp
|
||||
*/
|
||||
public class Main extends Sprite
|
||||
{
|
||||
private var clickarea:ClickArea;
|
||||
public function Main():void
|
||||
{
|
||||
clickarea = new ClickArea([new Point(50, 50), new Point(100, 80), new Point(30, 120)], 0x555555);
|
||||
if (stage) init();
|
||||
else addEventListener(Event.ADDED_TO_STAGE, init);
|
||||
}
|
||||
|
||||
private function init(e:Event = null):void
|
||||
{
|
||||
removeEventListener(Event.ADDED_TO_STAGE, init);
|
||||
// entry point
|
||||
addChild(clickarea);
|
||||
addEventListener(MouseEvent.CLICK, onClick);
|
||||
}
|
||||
private function onClick(e: MouseEvent): void
|
||||
{
|
||||
if (clickarea.FHit(new Point(e.stageX, e.stageY)))
|
||||
clickarea.Toggle();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue