【问题标题】:AS3 Instance Name of a custom class自定义类的 AS3 实例名称
【发布时间】:2014-09-28 00:45:58
【问题描述】:

我正在尝试从对象的 dropTarget 中获取实例名称。

import flash.display.Sprite;
import flash.events.MouseEvent;
import com.components.DragDropBucket;

var circle:Sprite = new Sprite();
circle.graphics.beginFill(0xFFCC00);
circle.graphics.drawCircle(0, 0, 40);
var target:Array = new Array();

target[0] = new Sprite();
target[0].graphics.beginFill(0xCCFF00);
target[0].graphics.drawRect(0, 0, 100, 100);
target[0].name = "target1";

target[1] = new Sprite();
target[1].graphics.beginFill(0xCCFF00);
target[1].graphics.drawRect(0, 200, 100, 100);
target[1].name = "target2";

var testv:DragDropBucket = new DragDropBucket("test", 500, 500, 175, 40,false);
testv.name ="test2";
var test:DragDropBucket = new DragDropBucket("test", 0, 0, 175, 40,true);

addChild(target[0]);
addChild(target[1]);
addChild(circle);

addChild(testv);
addChild(test);


circle.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown) 

function mouseDown(event:MouseEvent):void {
    circle.startDrag();
}
circle.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);

function mouseReleased(event:MouseEvent):void {
    circle.stopDrag();
    trace(circle.dropTarget.name);
}

DragDropBucket 是扩展 Sprite 类的自定义类。

所以当我执行这段代码时,当我将圆圈放到target[0]target[0] 时,它会成功输出“target1”和“target2”。

同时当我将圆圈放到testv对象上时,程序将其名称输出为instance#

当我执行这段代码时

trace(testv.name);

它很好地打印“test2”,没有实例#或任何东西。

我不明白这里发生了什么,因为 DragDropBucket 类只扩展了 Sprite 类并且没有什么花哨的。也许这里有人可以启发我,谢谢。

【问题讨论】:

  • 你确定 circle.dropTarget 完全是 testv 吗?检查一些关键属性以确保。也许它真的掉到了另一个对象上:例如测试。

标签: actionscript-3 flash


【解决方案1】:

您的 DragDropBucket 类与库类没有什么不同。这是相同的逻辑。 'testv' 中包含一个对象,即 DragDropBucket 类的实例,它被检测为dropTarget

function mouseReleased(event:MouseEvent):void {
    circle.stopDrag();
    trace(circle.dropTarget.name, circle.dropTarget.parent.name);
    // output : instance1, test2
}

如果 'test2' 不是 'instance1' 的父级,那就是它的 parent.parent,或者更多。

【讨论】:

  • 真棒的helloflash,我欠你一个,从今天早上我就一直在修补这个东西。在我将代码编辑到这个function mouseReleased(event:MouseEvent):void { circle.stopDrag(); trace("circle.dropTarget.name : "+circle.dropTarget.name); trace("circle.dropTarget.parent.name : "+circle.dropTarget.parent.name); trace("testv : "+testv.name); } 之后,它向我展示了一个奇迹输出:circle.dropTarget.name:instance171 circle.dropTarget.parent.name:test2 testv:test2
猜你喜欢
  • 2012-05-26
  • 2021-04-26
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2015-01-30
  • 1970-01-01
相关资源
最近更新 更多