flash as3.0 实例化 包块中的类后,事件无法触发!
我的思路是如下:1、新建一个as文件,如下:package{importflash.display.DisplayObject;importflash.events.*;...
我的思路是如下:
1、新建一个as文件,如下:
package {
import flash.display.DisplayObject;
import flash.events.*;
import flash.display.*;
import flash.filters.BlurFilter;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
public class nav_item extends Sprite {
public var myshape:Shape=new Shape();//背景
public var abv:String="a3";//测试属性
public function c_sprite(yy:int) {
myshape.y=yy;
myshape.graphics.beginFill(0xff0000);
myshape.graphics.drawRect(0, 0, 100, 30);
myshape.graphics.endFill();
this.addEventListener(MouseEvent.MOUSE_OVER,test);
return myshape;
}
function test(e:MouseEvent):void {
trace("google");
}
}
}
2、新建一个fla 文件,在第一帧上添加代码如下:
import nav_item;
var my:Sprite=new Sprite();
var b1:nav_item=new nav_item();
var nono:Shape=Shape(b1.c_sprite(10));
addChild(nono);
问题:为什么实例化后的 shape 没有触发 事件呢?该如何解决呢?
1、新建一个as文件,如下:
package {
import flash.display.DisplayObject;
import flash.events.*;
import flash.display.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
public class nav_item extends Sprite {
public var myshape:Shape=new Shape();
public function navitem(yy:int) {
myshape.y=yy;
myshape.graphics.beginFill(0xff0000);
myshape.graphics.drawRect(0, 0, 100, 30);
myshape.graphics.endFill();
this.addEventListener(MouseEvent.MOUSE_OVER,test);
addChild(myshape) \\为什么这里要加个 addChild
}
function test(e:MouseEvent):void {
trace("google");
}
}
}
2、新建一个fla 文件,在第一帧上添加代码如下:
import nav_item;
var b1:nav_item=new nav_item();
addChild(b1); \\为什么这里也要加个 addChild 展开
1、新建一个as文件,如下:
package {
import flash.display.DisplayObject;
import flash.events.*;
import flash.display.*;
import flash.filters.BlurFilter;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
public class nav_item extends Sprite {
public var myshape:Shape=new Shape();//背景
public var abv:String="a3";//测试属性
public function c_sprite(yy:int) {
myshape.y=yy;
myshape.graphics.beginFill(0xff0000);
myshape.graphics.drawRect(0, 0, 100, 30);
myshape.graphics.endFill();
this.addEventListener(MouseEvent.MOUSE_OVER,test);
return myshape;
}
function test(e:MouseEvent):void {
trace("google");
}
}
}
2、新建一个fla 文件,在第一帧上添加代码如下:
import nav_item;
var my:Sprite=new Sprite();
var b1:nav_item=new nav_item();
var nono:Shape=Shape(b1.c_sprite(10));
addChild(nono);
问题:为什么实例化后的 shape 没有触发 事件呢?该如何解决呢?
1、新建一个as文件,如下:
package {
import flash.display.DisplayObject;
import flash.events.*;
import flash.display.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
public class nav_item extends Sprite {
public var myshape:Shape=new Shape();
public function navitem(yy:int) {
myshape.y=yy;
myshape.graphics.beginFill(0xff0000);
myshape.graphics.drawRect(0, 0, 100, 30);
myshape.graphics.endFill();
this.addEventListener(MouseEvent.MOUSE_OVER,test);
addChild(myshape) \\为什么这里要加个 addChild
}
function test(e:MouseEvent):void {
trace("google");
}
}
}
2、新建一个fla 文件,在第一帧上添加代码如下:
import nav_item;
var b1:nav_item=new nav_item();
addChild(b1); \\为什么这里也要加个 addChild 展开
展开全部
1.Shape类是图形类,不能进行交互,你的第1个类,在c_sprite()这个方法中必须有(在return()之前):
addChild(myshape);
你的第1个fla文件中,var b1:nav_item=new nav_item();后面加上
b1.c_sprite(10);
addChild(b1);
搞定
2.问题补充那里,第1个addChild()是把myshape加到类nav_item的显示列表中,第2个addChild()是把b1添加到舞台上主类的显示列表中,把显示对象添加到显示列表中,才能让它显示出来,不然的话虽然它是存在的,但是它不显示
addChild(myshape);
你的第1个fla文件中,var b1:nav_item=new nav_item();后面加上
b1.c_sprite(10);
addChild(b1);
搞定
2.问题补充那里,第1个addChild()是把myshape加到类nav_item的显示列表中,第2个addChild()是把b1添加到舞台上主类的显示列表中,把显示对象添加到显示列表中,才能让它显示出来,不然的话虽然它是存在的,但是它不显示
展开全部
因为在flash官方文档中shape是不能接收鼠标事件的,如果你把shape换成sprite的话就可以了。
你可以试试。
你可以试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你第一个
AS3的API 中 Shape类 因为他不是继承于 EventDispacther这个类的 所以他没有事件侦听功能的。
你第2个补充的
为什么这里要加个addChild 因为 你的nav_item 是继承于 Sprite 可以被显示的 所以的话 你的nav_item 当成对象来看的话 你的 myshape 是加入到了 你的nav_item 这个类的显示列表中。 对nav_item而言 你的myshape 是在他里面了。 但在最后你这里也要加个addChild 因为你的 nav_item 实例 没有加入舞台的显示列表 所以对于nav_item 实例 而言 你这个实例看不到的
通俗的来说 就好比 你有一个影片剪辑MC 你把另外一个影片剪辑 拖入到这个MC来呢 那么 自然在MC里你是能看到这个被拖入来的影片剪辑。 但对于测试影片 对于舞台来说你的MC 并不存在于 舞台的显示列表中 所以你看不到 你得把MC 托到舞台你才能看到这个MC 所以addChild 就是添加到显示列表。
AS3的API 中 Shape类 因为他不是继承于 EventDispacther这个类的 所以他没有事件侦听功能的。
你第2个补充的
为什么这里要加个addChild 因为 你的nav_item 是继承于 Sprite 可以被显示的 所以的话 你的nav_item 当成对象来看的话 你的 myshape 是加入到了 你的nav_item 这个类的显示列表中。 对nav_item而言 你的myshape 是在他里面了。 但在最后你这里也要加个addChild 因为你的 nav_item 实例 没有加入舞台的显示列表 所以对于nav_item 实例 而言 你这个实例看不到的
通俗的来说 就好比 你有一个影片剪辑MC 你把另外一个影片剪辑 拖入到这个MC来呢 那么 自然在MC里你是能看到这个被拖入来的影片剪辑。 但对于测试影片 对于舞台来说你的MC 并不存在于 舞台的显示列表中 所以你看不到 你得把MC 托到舞台你才能看到这个MC 所以addChild 就是添加到显示列表。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询