点击舞台事件和点击元件冲突

HeyMystyle 2010-12-08 04:46:17
var Mylabel:TextField = new TextField();
var Kuang:my_mc = new my_mc();
stage.addEventListener(MouseEvent.CLICK,testFun);//点击的时候载入
Mylabel.addEventListener(MouseEvent.MOUSE_DOWN,testFun2);//双击的时候卸载
function testFun2(e:MouseEvent):void {
Mylabel.text = "";
removeChild(Kuang);
removeChild(Mylabel);
}
function testFun(e:MouseEvent):void {
if (Mylabel.text.length==0 ) {
addChild(Kuang);
Mylabel.text = "取消";
Mylabel.x = mouseX;
Mylabel.y = mouseY;
Kuang.x =mouseX;
Kuang.y = mouseY;
addChild(Mylabel);
}
}

卸载的时候相当于又单击的舞台了一次,大哥些怎么解决啊?
...全文
138 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fw176170847 2010-12-15
  • 打赏
  • 举报
回复
逻辑问题
csdnfan 2010-12-15
  • 打赏
  • 举报
回复
上面的函数有误,我的意思应该是

function RemoveTestFun2(e:MouseEvent):void{
stage.removeEventListener(MouseEvent.CLICK,testFun);
}


简单的应该如下:

import flash.events.MouseEvent;

var Mylabel:TextField = new TextField();
var Kuang:my_mc = new my_mc();
stage.addEventListener(MouseEvent.CLICK,testFun);//点击的时候载入
Mylabel.addEventListener(MouseEvent.MOUSE_DOWN,testFun2);//双击的时候卸载
function testFun2(e:MouseEvent):void {
Mylabel.text = "";
removeChild(Kuang);
removeChild(Mylabel);
e.stopPropagation();
}
function testFun(e:MouseEvent):void {
if (Mylabel.text.length==0 ) {
addChild(Kuang);
Mylabel.text = "取消";
Mylabel.x = mouseX;
Mylabel.y = mouseY;
Kuang.x =mouseX;
Kuang.y = mouseY;
addChild(Mylabel);
e.stopPropagation();
}
}
csdnfan 2010-12-15
  • 打赏
  • 举报
回复
LZ可以看一下AS3的事件流执行过程...
import flash.events.MouseEvent;

var Mylabel:TextField = new TextField();
var Kuang:my_mc = new my_mc();
stage.addEventListener(MouseEvent.CLICK,testFun);//点击的时候载入
Mylabel.addEventListener(MouseEvent.MOUSE_DOWN,testFun2);//双击的时候卸载
function testFun2(e:MouseEvent):void {
Mylabel.text = "";
stage.addEventListener(MouseEvent.CLICK,testFun);//重新加载
removeChild(Kuang);
removeChild(Mylabel);
}
function testFun(e:MouseEvent):void {
if (Mylabel.text.length==0 ) {
addChild(Kuang);
Mylabel.text = "取消";
Mylabel.x = mouseX;
Mylabel.y = mouseY;
Kuang.x =mouseX;
Kuang.y = mouseY;
addChild(Mylabel);
}
}
Mylabel.addEventListener(MouseEvent.MOUSE_DOWN,RemoveTestFun2,true);//捕获阶段事件注册

function RemoveTestFun2(e:MouseEvent):void{
stage.removeChild((MouseEvent.CLICK,testFun);
}


当然你这个最简单的不是用事件流的特性来解决,其实在舞台中调整你的addEventListener的位置就可以解决问题的......
passself 2010-12-09
  • 打赏
  • 举报
回复
楼主可以查一下,应该有个冒泡事件,你用函数调用一下,你阻止一下冒泡事件就可以了
diffmaker 2010-12-08
  • 打赏
  • 举报
回复
楼主那个不是双击吧?这样?
import flash.events.MouseEvent;
var Mylabel:TextField = new TextField();
var Kuang:my_mc = new my_mc();
Mylabel.doubleClickEnabled=true;
stage.addEventListener(MouseEvent.CLICK,testFun);//点击的时候载入
Mylabel.addEventListener(MouseEvent.DOUBLE_CLICK,testFun2);
//Mylabel.addEventListener(MouseEvent.MOUSE_DOWN,testFun2);//双击的时候卸载
function testFun2(e:MouseEvent):void {
Mylabel.text = "";
removeChild(Kuang);
removeChild(Mylabel);
}
function testFun(e:MouseEvent):void {
if (Mylabel.text.length==0 ) {
addChild(Kuang);
Mylabel.text = "取消";
Mylabel.x = mouseX;
Mylabel.y = mouseY;
Kuang.x =mouseX;
Kuang.y = mouseY;
addChild(Mylabel);
}
}

2,278

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计/Flash/Silverlight 开发 Flash流媒体开发
社区管理员
  • Flash流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧