需求其实很简单,就是实施反映当前哪些房间住人,有几个人
主要客户希望用直观的平面方式展示出来,所以综合考虑后用flash来实现
也是第二次用as3这东东写应用,哈哈
先看效果图:
因为楼层和布局不会变所以没有做成可配置的
下面是代码:
场景中第一帧上面的代码
stop(); //加载需要的包 import com.greensock.*; import com.greensock.easing.*; import flash.text.TextFormat; import fl.managers.StyleManager; import flash.events.MouseEvent; import flash.events.Event; import flash.display.MovieClip; //设置字体样式 var style:TextFormat = new TextFormat(); style.size = 24; style.color = 0x000000; StyleManager.setStyle("textFormat",style); //画布大小; var sw:Number = stage.stageWidth; var sh:Number = stage.stageHeight; //创建房子显示对象 var houses:houseList=new houseList(); addChild(houses); //选项显示对象 var msg:showMsg = new showMsg(); addChild(msg); msg.x=(stage.stageWidth-msg.width)/2; msg.y=(msg.height*-1)-20; msg.ey=Number((stage.stageHeight-msg.height)/2); msg.alpha = 0; //楼层容器 var floors:floors_mc = new floors_mc(); this.addChild(floors); floors.alpha=0; floors.visible=false;
house类的代码
package { import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import com.greensock.*; import com.greensock.easing.*; import flash.text.TextFormat; import fl.managers.StyleManager; import fl.data.DataProvider; /** * ... * @author purecolor@foxmail.com */ public class house extends MovieClip { private var _floors:DataProvider; private var _name:String; private var _houseName:String; public function house() { super(); _floors = new DataProvider(); _name = ((this.toString()).split(" "))[1].replace("\]",""); init(); } private function init():void { switch(_name) { case("house_1"): _houseName = "一号楼"; _floors.addItem( { label:"一层", data:"house_1_floor_1" } ); _floors.addItem( { label:"二层", data:"house_1_floor_2" } ); _floors.addItem( { label:"三层", data:"house_1_floor_3" } ); _floors.addItem( { label:"四层", data:"house_1_floor_4" } ); break; case("house_2"): _houseName = "二号楼"; _floors.addItem( { label:"一层", data:"house_2_floor_1" } ); _floors.addItem( { label:"二层", data:"house_2_floor_2" } ); _floors.addItem( { label:"三层", data:"house_2_floor_3" } ); break; case("house_3"): _houseName = "三号楼"; _floors.addItem( { label:"一层", data:"house_3_floor_1" } ); _floors.addItem( { label:"二层", data:"house_3_floor_2" } ); break; case("house_4"): _houseName = "六号楼"; _floors.addItem( { label:"一层", data:"house_4_floor_1" } ); _floors.addItem( { label:"二层", data:"house_4_floor_2" } ); break; case("house_5"): _houseName = "五号楼"; _floors.addItem( { label:"一层", data:"house_5_floor_1" } ); _floors.addItem( { label:"二层", data:"house_5_floor_2" } ); break; } this.addEventListener(MouseEvent.MOUSE_OVER, handleOver); this.addEventListener(MouseEvent.MOUSE_OUT, handleOut); this.addEventListener(MouseEvent.CLICK, handleClick); } private function handleOver(e:MouseEvent):void { TweenMax.to(this, 1, {glowFilter:{color:0x9900ff, alpha:1, blurX:10, blurY:10, strength:2}}); } private function handleOut(e:MouseEvent):void { TweenMax.to(this, 1, {glowFilter:{alpha:0}}); } private function handleClick(e:MouseEvent):void { var root:MovieClip = MovieClip(root as MovieClip); var msg:MovieClip = root["msg"]; var timeline:TimelineLite = new TimelineLite(); timeline.append(new TweenMax(msg, 0.5, { y:msg.height*-1, alpha:0 , ease:Quad.easeInOut})); timeline.append(new TweenMax(msg, 0.5, { y:msg.ey, alpha:1 , ease:Quad.easeInOut} )); msg.nameTxt.text = _houseName; msg.msgList.clearSelection(); msg.msgList.dataProvider = _floors; } } }
floors_mc类的代码
package { import com.greensock.*; import com.greensock.easing.*; import fl.managers.StyleManager; import flash.events.Event; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.utils.Timer; import flash.events.TimerEvent; /** * ... * @author purecolor@foxmail.com */ public class floors_mc extends MovieClip { private var __floorsClose:MovieClip; public function floors_mc() { super(); //init(); } private function init():void { __floorsClose = getChildByName("floors_close") as MovieClip; __floorsClose.addEventListener(MouseEvent.CLICK, handleCloseFloor); } private function handleCloseFloor(e:MouseEvent):void{ TweenMax.to(this, 1, {alpha:0 , ease:Back.easeOut }); var times:Timer = new Timer(500,1); times.addEventListener(TimerEvent.TIMER, setvf); times.start(); } private function setvf(e:TimerEvent):void { if(this.numChildren>2) this.removeChild(this.getChildAt(2)); this.visible = false; } public function showFloor(e:String):void { if(this.numChildren>2) this.removeChild(this.getChildAt(2)); var _hid:String = e.split("_")[0]; var _fid:String = e.split("_")[1]; var floor_mc:MovieClip; var hf:String = "house_" + _hid + "_floor_" + _fid; switch(hf) { case("house_1_floor_1"): floor_mc = new house_1_floor_1; break; case("house_1_floor_2"): floor_mc = new house_1_floor_2; break; case("house_1_floor_3"): floor_mc = new house_1_floor_3; break; case("house_1_floor_4"): floor_mc = new house_1_floor_4; break; case("house_2_floor_1"): floor_mc = new house_2_floor_1; break; case("house_2_floor_2"): floor_mc = new house_2_floor_2; break; case("house_2_floor_3"): floor_mc = new house_2_floor_3; break; case("house_3_floor_1"): floor_mc = new house_3_floor_1; break; case("house_3_floor_2"): floor_mc = new house_3_floor_2; break; case("house_4_floor_1"): floor_mc = new house_4_floor_1; break; case("house_4_floor_2"): floor_mc = new house_4_floor_2; break; case("house_5_floor_1"): floor_mc = new house_5_floor_1; break; case("house_5_floor_2"): floor_mc = new house_5_floor_2; break; } this.addChild(floor_mc); floor_mc.y = 50; floor_mc.alpha = 0; TweenMax.to(floor_mc, 1, {alpha:1 , ease:Back.easeOut } ); trace(this.numChildren); } } }
room类的代码
package { import fl.controls.Label; import flash.display.MovieClip; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import com.greensock.*; import com.greensock.easing.*; import flash.events.MouseEvent; import flash.geom.PerspectiveProjection; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; /** * ... * @author purecolor@foxmail.com */ public class room extends MovieClip { private var _name:String; private var _item:XMLList; private var _house:String; public function room() { this.addEventListener(Event.ADDED_TO_STAGE, handleAdded); } private function handleAdded(e:Event):void { _name = (((this.toString()).split(" "))[1].replace("\]", "").split("_"))[1]; var xmlData:XML = MovieClip(root as MovieClip)["xmlData"]; _item = xmlData.house.floor.room.(@num == _name ); if (_item.@roomer > 0) { TweenMax.to(this, 1, {colorTransform:{tint:0xF22408, tintAmount:0.4}}); } if (int(_name)<2100||int(_name)>3100) { for (var i:int = 0, len:int = _item.@roomer; i < len; i++) { var _per:per = new per; this.addChild(_per); _per.y = this.height / 2; _per.x = (this.width - 16 * len) / 2+16*i; } } if (_item.@roomer > 0) showName(_item); } private function showName(e:XMLList):void { var _shape:MovieClip = new MovieClip; var len:Number = e.children().length(); var _h:Number = len * 20; var _tw:Number = 0; for (var i:int = 0; i < len; i++) { var __i:Number = ((e.pre[i].@name).toString()).length * 14; _tw = (__i > _tw)?__i:_tw; } var __w:Number = (_tw > this.width)?(_tw - this.width) / 2:0; var _maxw:Number = (_tw > this.width)?_tw:this.width; var x:Number = (this.width - (this.width)) / 2-__w, y:Number = 0; var ud:Boolean = false; var _w:Number = this.width + __w * 2; if (this.y > this.parent.height/4) { y = this.height + 5; ud = true; }else { y = -_h - 5; ud = false; } if (len > 0) { _shape.graphics.lineStyle(1, 0x000000); _shape.graphics.beginFill(0xffffff); _shape.graphics.drawRoundRect(x, y, _w, _h, 6); if (ud) { //下 _shape.graphics.moveTo(this.width/2-5, y); _shape.graphics.lineTo(this.width/2, y-5); _shape.graphics.lineTo(this.width/2+5, y); }else { //上 _shape.graphics.moveTo(this.width/2-5, y+_h); _shape.graphics.lineTo(this.width/2, y+_h+5); _shape.graphics.lineTo(this.width/2+5, y+_h); } _shape.graphics.endFill(); addChild(_shape); var _nameLabel:TextField = new TextField(); _shape.addChild(_nameLabel); _nameLabel.width = _maxw; _nameLabel.autoSize = TextFieldAutoSize.CENTER ; //_nameLabel.border = true; if(x<0) _nameLabel.x -= (Math.abs(x)); trace(x); trace(_nameLabel.x); trace('---'); for (var _i:int = 0; _i < len; _i++) { _nameLabel.appendText(e.pre[_i].@name+"\n"); } if (ud) { _nameLabel.y=y+(_h-_nameLabel.height)/2; }else { _nameLabel.y = y+(_h-_nameLabel.height)/2; } } } } }
showMsg类的代码
package { import fl.controls.Label; import fl.controls.List; import flash.display.MovieClip; import com.greensock.*; import com.greensock.easing.*; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextFormat; import fl.managers.StyleManager; /** * ... * @author purecolor@foxmail.com */ public class showMsg extends MovieClip { private var __btnClose:MovieClip; private var __msgList:List; private var __nameTxt:Label; public var ey:Number; public function showMsg() { super(); __btnClose = getChildByName("btnClose") as MovieClip; __msgList = getChildByName("msgList") as List; __nameTxt = getChildByName("nameTxt") as Label; __msgList.rowHeight = 36; __btnClose.addEventListener(MouseEvent.CLICK, handleClick); __msgList.addEventListener(Event.CHANGE, showData); } function handleClick(e:MouseEvent):void { TweenMax.to(this, 0.5, { y:this.height*-1, alpha:0 , ease:Back.easeOut}); } function showData(e:Event):void { var tid:String=e.target.selectedItem.data; TweenMax.to(this, 0.5, { y:this.height * -1, alpha:0 , ease:Back.easeOut } ); var root:MovieClip = MovieClip(root as MovieClip); var floor_mc:MovieClip; switch(tid) { case("house_1_floor_1"): floor_mc = new house_1_floor_1; break; case("house_1_floor_2"): floor_mc = new house_1_floor_2; break; case("house_1_floor_3"): floor_mc = new house_1_floor_3; break; case("house_1_floor_4"): floor_mc = new house_1_floor_4; break; case("house_2_floor_1"): floor_mc = new house_2_floor_1; break; case("house_2_floor_2"): floor_mc = new house_2_floor_2; break; case("house_2_floor_3"): floor_mc = new house_2_floor_3; break; case("house_3_floor_1"): floor_mc = new house_3_floor_1; break; case("house_3_floor_2"): floor_mc = new house_3_floor_2; break; case("house_4_floor_1"): floor_mc = new house_4_floor_1; break; case("house_4_floor_2"): floor_mc = new house_4_floor_2; break; case("house_5_floor_1"): floor_mc = new house_5_floor_1; break; case("house_5_floor_2"): floor_mc = new house_5_floor_2; break; } root["floors"].visible = true; TweenMax.to(root["floors"], 2, {alpha:1 , ease:Back.easeOut } ); root["floors"].addChild(floor_mc); floor_mc.y = 50; //trace(root["floors"].numChildren); //trace(root["floors"]+" : "+floor_mc); } } }