The final thoughts
Here, I just added a white stage sized MovieClip ‘Floor’ and made the stage background black:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | //-----Loaders----- //Mouse handlers import flash.events.MouseEvent //Mouse point (position) import flash.geom.Point //Dynamic line import flash.display.MovieClip //Global variables import globals //-----Create visual placeholders----- //New MovieClip var lineOfSight:MovieClip = new MovieClip() lineOfSight.name = "lineOfSight" //Attach it addChild(lineOfSight) //-----Define key press automation----- var keys:Array = new Array() var key:Number = 0 var minKeys:Number = 37 var maxKeys:Number = 40 for(key = minKeys; key < maxKeys; key++){ keys[key] = false } //-----Variable definition----- //Movement speed var speed:Number = 4 //Line / sight distance var sightDistance:Number = 100 //Line / sight spread var sightSpread:Number = 60 //Line / sight accuracy (How many lines) var sightAccuracy:Number = 100 //Line / sight hit accuracy (How many 'part' lines) var sightHitAccuracy:Number = 100 //Dont change these variables var radiusX:Number = Player.width / 2 var radiusY:Number = Player.height / 2 var mouseIsDown:Boolean = false //-----Add key listeners----- stage.addEventListener(KeyboardEvent.KEY_DOWN, key_Down) stage.addEventListener(KeyboardEvent.KEY_UP, key_Up) stage.addEventListener(MouseEvent.MOUSE_DOWN, mouse_Down) stage.addEventListener(MouseEvent.MOUSE_UP, mouse_Up) stage.addEventListener(MouseEvent.MOUSE_MOVE, mouse_Move) stage.addEventListener(Event.ENTER_FRAME, enter_Frame) //Add key functions function key_Down(event:KeyboardEvent){ keys[event.keyCode] = true } function key_Up(event:KeyboardEvent){ keys[event.keyCode] = false } function mouse_Down(event:MouseEvent){ mouseIsDown = true Floor.mask = lineOfSight } function mouse_Up(event:MouseEvent){ mouseIsDown = false //Remove line lineOfSight.graphics.clear() Floor.mask = undefined } function mouse_Move(event:MouseEvent){ var target:* = event.target var location:Point = new Point(target.mouseX, target.mouseY) location = target.localToGlobal(location) //Global variables for mouse positions globals.data.mousePositionX = location.x globals.data.mousePositionY = location.y } function enter_Frame(event:Event){ move_Player() collision_Player() lineOfSight.graphics.clear() create_Sight(mouseIsDown) } function move_Player(){ if(keys[37]){ //Left Player.x -= speed } if(keys[38]){ //Up Player.y -= speed } if(keys[39]){ //Right Player.x += speed } if(keys[40]){ //Down Player.y += speed } } function collision_Player(){ while(Walls.hitTestPoint(Player.x - radiusX, Player.y, true)){ Player.x ++ } while(Walls.hitTestPoint(Player.x + radiusX, Player.y, true)){ Player.x -- } while(Walls.hitTestPoint(Player.x, Player.y - radiusY, true)){ Player.y ++ } while(Walls.hitTestPoint(Player.x, Player.y + radiusY, true)){ Player.y -- } } function create_Sight(status):void{ if(status){ //Read global variables for mouse position and convert into local variable var xMouse:Number = globals.data.mousePositionX var yMouse:Number = globals.data.mousePositionY var xDif:Number = xMouse - Player.x var yDif:Number = yMouse - Player.y var sightAngleBaseRadians:Number = Math.atan2(yDif, xDif) var sightAngleBase:Number = 360 * sightAngleBaseRadians / (2 * Math.PI) lineOfSight.graphics.lineStyle(3,0xff0000) lineOfSight.graphics.beginFill(0xff0000) //Find start of line var startX:Number = Player.x + Math.cos(sightAngleBase * Math.PI / 180) * radiusX var startY:Number = Player.y - Math.sin(sightAngleBase * Math.PI / 180) * -radiusX //Draw the line lineOfSight.graphics.moveTo(startX, startY) for (var sightAngle:Number = 0; sightAngle <= sightSpread; sightAngle += (sightSpread/sightAccuracy)){ //Find individual line angle var sightAngleIndividual = (sightAngleBase-(sightSpread/2) + sightAngle)*(Math.PI/180) for (var sightLength:Number = 0; sightLength < sightDistance; sightLength += (sightDistance/sightHitAccuracy)){ //Find end of line var endX:Number = Player.x + Math.cos(sightAngleIndividual) * sightLength var endY:Number = Player.y + Math.sin(sightAngleIndividual) * sightLength if(Walls.hitTestPoint(endX, endY, true)){ break } } lineOfSight.graphics.lineTo(endX, endY) } lineOfSight.graphics.lineTo(startX, startY) } } |
Just click to turn off the lights and on with the torch


Nice work man its awesome!