Actionscript 3 对象相交时意外修改类属性

Posted

技术标签:

【中文标题】Actionscript 3 对象相交时意外修改类属性【英文标题】:Actionscript 3 Unexpected modification of Class properties when objects intersect 【发布时间】:2014-07-22 19:05:32 【问题描述】:

在我的actionscript 3 类中,我放置了一个名为oldX 的私有属性来保存MovieClip 的初始位置。 当一个实例拖到另一个实例上时,这些属性会意外更改。

public class Piece extends MovieClip 
    private var oldX:Number;
    private var oldY:Number;

    public function Piece() 
        //...
        oldX = this.x;
        oldY = this.y;
        //action listeners
    


    public function startDragging(evt:MouseEvent)  evt.startDrag(true);     

    public function stopDragging(evt:MouseEvent)  
        evt.stopDrag(); 
        //when one Piece instance drags on another instance
        trace(oldX); //these are not the original values at this moment
        trace(oldY); //these are not the original values at this moment
      

请您解释一下为什么会这样。

【问题讨论】:

【参考方案1】:

这里唯一正确的答案是痕迹必须来自其他对象。如果这是您的全部代码,则没有任何东西可以重置这些变量。所以跟踪不是来自您期望的对象。

使用调试器获取对象的id(应该类似于Object@1241),匹配数字,看看发生了什么。

【讨论】:

当一个实例拖到另一个实例上时,就会发生这种情况。鼠标拖放监听器有问题吗? 你是对的。其拖动对象的实例名称和拖放对象的实例名称不同。这是因为在拖动对象之后添加了另一个对象。请在您的答案中添加解决方案。 哈,我不能像魔术师一样解决你的问题,尤其是当你没有提供完整的代码时。努力,调试,得到错误..我已经回答了你的问题,这是你的另一个问题。

以上是关于Actionscript 3 对象相交时意外修改类属性的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript 3:将类作为参数传递

ActionScript 3.0 当你单击一个对象时,我如何使它进入下一个场景?

ActionScript 3 - 在外部类中使用 MovieClip

《Flash ActionScript 3 殿堂之路》一,二章 语言基础

Actionscript 3:预渲染类实例以提高性能

Actionscript 3 错误 1009:无法访问空对象引用的属性或方法