在AS3页游中,快捷菜单组件的封装使用
来源:互联网 发布:伺服电机选型软件 编辑:程序博客网 时间:2024/06/06 01:06
良好的重用;决定良好的封装;
游戏中比较多的一些:
物品、或是聊天框中的链接、选中人物后,左上角出现的人物信息框,等等这些拥有点击弹出菜单功能的地方实现功能都可以按我封装的这个MenuContext实现;
下面简单写了一个:MenuContext,(C#叫:ContextMenu,我故意搞反了)
虽然现在市场上很多页游都有这个功能,他们也应该封装得挺好的,不过我之前却实见过,潦潦草草的实现方式;
不注重重用,所以我这边还是按自己对以前使用C#的WINFORM项目时使用的ContextMenu的封装方式来实现;
源码项目:MenuManagerTestingProject
DEMO 效果图:
外部调用时,主要的代码:
package{import flash.display.Bitmap;import flash.display.Sprite;import flash.display.StageAlign;import flash.display.StageScaleMode;import flash.events.Event;import flash.events.MouseEvent;import flash.geom.Rectangle;import view.ScaleBitmap;/** * 测试快捷菜单类 * @author Jave.Lin * @date 2013-9-18 **/[SWF(width="1000", height="600")]public class MenuManagerTestingProject extends Sprite{[Embed(source="../res/S9G1_10_10_40_40.png")]public static var S9D1_10_10_40_40:Class;public function MenuManagerTestingProject(){stage.frameRate = 60;stage.align = StageAlign.TOP_LEFT;stage.scaleMode = StageScaleMode.NO_SCALE;stage.color = 0xeeeeee;var self:MenuManagerTestingProject = this;addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);function onAddedToStage(e1:Event):void{var menuItemDataArr:Array = [{"name":"使用", "key":"use"},{"name":"装备", "key":"install"},{"name":"丢弃", "key":"discard"},{"name":"测试菜单项好长啊,怎么回事", "key":"testing"},{"name":"测试菜单项好长啊,怎么回事", "key":"testing"},{"name":"菜单项是可以重复的!嘿嘿!", "key":"testing"},];var menuItemDataArr1:Array = [{"name":"1", "key":"menu1"},{"name":"2", "key":"menu2"},{"name":"3", "key":"menu3"},{"name":"测试", "key":"menu testing"},{"name":"other", "key":"menu other"},{"name":"◆☆★", "key":"menu special chars", "enabled":false},];//方法一:自定义怎么用都可以var sp:Sprite = new Sprite();sp.name = "绿色矩形";sp.graphics.clear();sp.graphics.beginFill(0x00ff00);sp.graphics.drawRect(0, 0, 50, 50);sp.graphics.endFill();sp.x = 100;sp.y = 100;var sp1:Sprite = new Sprite();sp1.name = "蓝色矩形";sp1.graphics.clear();sp1.graphics.beginFill(0x00ffff);sp1.graphics.drawRect(0, 0, 50, 50);sp1.graphics.endFill();sp1.x = 200;sp1.y = 100;self.parent.addChild(sp);sp.addEventListener(MouseEvent.CLICK, onClick);self.parent.addChild(sp1);sp1.addEventListener(MouseEvent.CLICK, onClick);var s9gBg:ScaleBitmap = new ScaleBitmap((new S9D1_10_10_40_40() as Bitmap).bitmapData);var s9gRect:Rectangle = new Rectangle(20, 20, 10, 10);s9gBg.scale9Grid = s9gRect;var menuContext:MenuContext = new MenuContext(s9gBg);menuContext.menuDataArr = menuItemDataArr;menuContext.showOn(self.parent, 300, 100);menuContext.addEventListener(MenuContextEvent.SELECT, onMenuSelect);function onMenuSelect(e:MenuContextEvent):void{var tag:String = e.selectedItem.menuContext.tag ? e.selectedItem.menuContext.tag.name : "没有选中对象时,";trace("在" + tag + "选中菜单:" + e.selectedItem);}function onClick(e:MouseEvent):void{var menuData:Array;var sprite:Sprite = e.currentTarget as Sprite;menuData = sprite == sp ? menuItemDataArr : menuItemDataArr1;menuContext.tag = sprite;menuContext.menuDataArr = menuData;menuContext.showOn(self.parent, e.stageX, e.stageY);trace("shown");}//方法二:使用MenuContextManager统一使用var s1:Sprite1 = new Sprite1();addChild(s1);s1.x = 100;s1.y = 200;var s2:Sprite2 = new Sprite2();addChild(s2);s2.x = 200;s2.y = 200;s1.menuContext = menuContext;s2.menuContext = menuContext;MenuContextManager.getInstance().registerStage(stage);MenuContextManager.getInstance().register(s1);MenuContextManager.getInstance().register(s2);}}}}import flash.display.Sprite;class Sprite1 extends Sprite implements IMenuContextAble{private var menuItemDataArr1:Array;private var _menuContext:IMenuContext;public function Sprite1(){name = "Sprite1蓝色矩形";graphics.clear();graphics.beginFill(0x0000ff);graphics.drawRect(0, 0, 50, 50);graphics.endFill();menuItemDataArr1 = [{"name":"1", "key":"menu1", "enabled":false},{"name":"2", "key":"menu2"},{"name":"3", "key":"menu3", "enabled":false},{"name":"测试", "key":"menu testing"},{"name":"other", "key":"menu other", "enabled":false},{"name":"◆☆★", "key":"menu special chars", "enabled":false},];}public function getMenuDataArr():Array{// TODO Auto Generated method stubreturn menuItemDataArr1;}public function get menuContext():IMenuContext{// TODO Auto Generated method stubreturn _menuContext;}public function set menuContext(value:IMenuContext):void{// TODO Auto Generated method stub_menuContext = value;}}class Sprite2 extends Sprite implements IMenuContextAble{private var menuItemDataArr:Array;private var _menuContext:IMenuContext;public function Sprite2(){name = "Sprite2黄色矩形";graphics.clear();graphics.beginFill(0xffff00);graphics.drawRect(0, 0, 50, 50);graphics.endFill();menuItemDataArr = [{"name":"使用", "key":"use"},{"name":"装备", "key":"install"},{"name":"丢弃", "key":"discard"},{"name":"测试菜单项好长啊,怎么回事", "key":"testing"},{"name":"测试菜单项好长啊,怎么回事", "key":"testing"},{"name":"菜单项是可以重复的!嘿嘿!", "key":"testing"},];}public function getMenuDataArr():Array{// TODO Auto Generated method stubreturn menuItemDataArr;}public function get menuContext():IMenuContext{// TODO Auto Generated method stubreturn _menuContext;}public function set menuContext(value:IMenuContext):void{// TODO Auto Generated method stub_menuContext = value;}}
- 在AS3页游中,快捷菜单组件的封装使用
- 在对话框中创建菜单以及快捷菜单的步骤
- 在Java程序,如何实现自适应位置的快捷菜单
- 封装JDBC,简单快捷的使用PreparedStatement对象
- 我的第一个开源组件:一个抹出来的快捷菜单按钮
- C#快捷菜单的添加
- 在vue中封装可复用的组件
- React Native中组件的封装使用
- CodeRush使用教程十二:快捷菜单
- 快捷菜单
- 快捷菜单
- 快捷菜单
- 在所有的文件的右键菜单中加入快捷命令“查找目标...”
- #AOS应用基础平台# 实现了在用户权限范围内自定义的快捷菜单的导航展示
- MyEclipse的快捷使用
- MyEclipse的快捷使用
- MyEclipse的快捷使用
- MyEclipse的快捷使用
- JAVA设计模式学习——命令模式
- iOS7或以后将不能使用MAC地址生成设备的唯一标识
- windows大多数的弹窗提示内容是可以复制的(我们主要用于报错内容复制粘贴去百度)
- opengl 投影矩阵的理解
- HDU 1828 Picture
- 在AS3页游中,快捷菜单组件的封装使用
- 每日学习: 统计数字会说谎
- jsp页面格式化数字或时间
- windows7下cmd命令窗口没有滚动条的解救方法
- 数组全排列算法(一)字符串数组全排列——逐个追加组合算法
- 如何简化游戏ui数据更新
- odbc 读取excel
- ViewPager中有Activity的按键捕获问题
- LeetCode - Two Sum