AS3的Sprite传入属性的问题

wxcyz 2011-11-26 08:01:36
生成一些圆圈,鼠标经过的时候会把对应的文字传进去,鼠标离开的时候关闭mc,效果实现了,但是文字怎么传进去?,请高手指教,还有有没有更好的方法?
代码如下:
var Circle:Object = new Object();
var RectMc:Sprite = new Sprite();
var Mc1:Sprite = new Sprite();
private function display():void
{
var x2 = _config['stageHeight'] - _config['plotArea_margins_bottom'];
var y2 = _config['stageWidth'] - _config['plotArea_margins_right'];

var iY:int,iX:int,i:int=1;
var numY:int = 9,numX:int = 6;//Y个数
var leftY:int = _config['plotArea_margins_left'];
var bottomX:int = x2;
var foo:publicFunction = new publicFunction();
Mc1 = new Sprite();
addChild(Mc1);
for (iX=1; iX <= numX; iX++)
{
for (iY=1; iY <= numY; iY++)
{
var Circle = new drawCircle(20,"008800")
Circle.x=leftY+40,Circle.y=bottomX-40;
addChild(Circle);
leftY = leftY + 85;
Circle['name'] = "Rect"+i;
Circle.addEventListener(MouseEvent.MOUSE_MOVE,onMouseOver);
Circle.addEventListener(MouseEvent.MOUSE_OUT,onMouseOut);
i++;
}
leftY = _config['plotArea_margins_left'];
bottomX = bottomX-80;
}
RectMc = new RectSprite(0xCDE855);
}

private function onMouseOver(e:MouseEvent):void {
var TG:Sprite=e.target as Sprite;
trace(e.currentTarget);
var dataName:String = TG.name;
RectMc.x = 0,RectMc.y=0;
RectMc.labelName = dataName;
Mc1.addChild(RectMc);
}
private function onMouseOut(e:MouseEvent):void {
Mc1.removeChild(RectMc);
removeEventListener(MouseEvent.MOUSE_MOVE,onMouseOver);
}
包:
package org.sys
{
import flash.display.Sprite;
import flash.text.TextField;

public class RectSprite extends Sprite
{
private var _label:TextField;
public static var labelName:String = "";
public function RectSprite(color:uint) {
//以下四行使用Sprite内的graphics对象画一个圆角矩形背景
this.graphics.lineStyle(2, 0x85DB18);
this.graphics.beginFill(color);
this.graphics.drawRoundRect(0,0,100,50,10,10);
this.graphics.endFill();
//生成文本框,并将labelName用html设成24号粗体
_label = new TextField();
_label.htmlText = "<font size='24'><b>"+RectSprite.labelName+"</b></font>";
_label.selectable = false;
_label.autoSize = "left";
//将文本框加入RectSprite对象的显示列表
addChild(_label);
}

}
}
...全文
183 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxcyz 2011-11-27
  • 打赏
  • 举报
回复
调试了下,感觉比我的那个思路好些,谢谢了
xinje 2011-11-26
  • 打赏
  • 举报
回复
楼主写的代码有点乱,但是我还是觉得思路上也不是很清晰。
充分利用面向对象,你可以用更少的代码做更多的事。而且更清晰。
我看到楼主给的分不少。于是写了个类。不知道是否符合你的要求。
我也比较懒,没加注解。不过总共才90多行,看看吧。
----------调用方法---------------
var tempname:int;
for (var w:int=0; w<4; w++)
{
for (var i:int =0; i<5; i++)
{
tempname++;
var temp:mys = new mys();
temp.x = i * 80 + 100;
temp.y = w * 70 + 100;
addChild(temp);
temp.text = "<font size='18'>Hello" + tempname.toString() + "</font>";
}
}

----------类---------------------
package 
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.geom.ColorTransform;

public class mys extends Sprite
{
private var str:String;
private var txt:TextField;
private var moviePlay:Boolean;
private var BG:Sprite = new Sprite();
private var color:uint = 0xff0000;
private var color2:uint = 0xff9900;
private var colorT:ColorTransform = new ColorTransform();

public function mys()
{

addEventListener(MouseEvent.MOUSE_OVER,mEvt);
addEventListener(MouseEvent.MOUSE_OUT,mEvt);
addEventListener(Event.ENTER_FRAME,entEvt);
BG.graphics.beginFill(0xff0000);
BG.graphics.drawCircle(0,0,50);
BG.graphics.endFill();
BG.alpha = 0.5;
addChild(BG);
txt = new TextField();
txt.autoSize = TextFieldAutoSize.LEFT;
txt.selectable = false;
txt.mouseEnabled = false;
txt.visible = false;
buttonMode = true;
addChild(txt);
}
private function entEvt(e:Event):void
{
if (moviePlay)
{
if (BG.scaleX < 1.2)
{
BG.scaleX = BG.scaleY += 0.02;
}
}
else
{
BG.scaleX = BG.scaleY = 1;
}
}
private function mEvt(e:MouseEvent):void
{
var temp:Number
if (e.type == MouseEvent.MOUSE_OVER)
{
setIndex()
moviePlay = txt.visible = true;
colorT.color = color2;
temp = 0.9;
}
else
{
moviePlay = txt.visible = false;
colorT.color = color;
temp = 0.5;
}

BG.transform.colorTransform = colorT;
BG.alpha = temp;
}
public function set text(value:String):void
{
txt.htmlText = value;
txt.x = - txt.width / 2;
txt.y = - txt.height / 2;
str = value;
}
public function get text():String
{
return str;
}
private function setIndex():void
{
parent.addChild(this);
}

}

}
diffmaker 2011-11-26
  • 打赏
  • 举报
回复
你的方法不是可以吗?

2,275

社区成员

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

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