【问题标题】:Error #1034 with Childs错误 #1034 与 Childs
【发布时间】:2014-02-04 19:30:46
【问题描述】:

编辑: 哇,我没有意识到我做了这么多非常错误的事情。这是我自己编写的第一个代码,没有使用学校提供的东西。猜猜我在几节课后试图咬得比我能咀嚼的更多。

在谷歌搜索答案然后复制我认为需要的代码部分(强调“想法”)后,我得到了大部分内容。

还有办法“保存”代码吗?还是最好放弃它并重新开始?无论哪种方式,那么正确的方法是什么?

另外,如果可以的话,我会问我的老师。但是我们不再和他一起上课,因此这个人不再可用(或者至少不回复我的电子邮件。)我自己做这个是为了另一个学校作业。所以这就是我转向互联网的原因。

感谢您解释您所做的一切。我很感激你花时间这样做:)

现在,回答你的一些问题,并提出新的问题:

只有第一个符号称为符号 1,其他符号都有“真实”名称。当我开始这个项目并保持这种状态时,我忘记改变它,因为我确切地知道它是什么,因为它是唯一一个这样称呼的。

.. 你知道如果计数器等于 5 会产生什么样的名字吗? “HalfCircle15”。 是的,我意识到这一点。现在我看到它是这样的,同意这不是一个很好的写下来的方式。在命名我的 HalfCircirlce1-4 时考虑得不够充分。

你觉得它有什么作用? 好吧,让我尝试更清楚地解释它: 拖放副本后,您将无法再移动/选择它。我希望用户能够选择它,这样他就可以随意多次拖放它。所以,我认为这意味着我必须将 eventListeners 添加到我制作的所有副本中?这就是我在这里想要做的。 另外,感谢您的错误解释。 那么,这更像是它吗?:

function makeListeners(copy:DisplayObject):void
{
    var i = this.numChildren;
    i.addEventListener(MouseEvent.CLICK, moveCopy);
}

我还将 makeListeners 调用移到了我制作副本的地方。所以它应该只运行一次,当你制作副本时,对吧?

你为什么使用索引 3 作为“最新的孩子”索引?这没有任何意义。 我用谷歌搜索了如何做到这一点,我相信它告诉我“索引”是您想要添加孩子的“层”(因为没有更好的词)?我将它添加到 3,以便它们位于我的其他一些图像之上和其他一些图像之下。它似乎是这样工作的,尽管现在我也开始质疑这一点。

这是我现在所拥有的(删除了其他数字,以便更容易查看代码)。这给了我一个新的错误 TypeError:错误 #1006:值是 geen functie。 在 rondje1/makeListeners() 在 rondje1/dragRondje(): 所以我意识到这是不对的。但这至少比以前更正确吗?

import flash.display.*;
import flash.events.MouseEvent;
import flash.ui.Mouse;

var counter=1;
var copy;

//Copy dan drag and drop Rondje
buttonRondje.addEventListener(MouseEvent.CLICK, dragRondje);
function dragRondje(event:MouseEvent):void
{
    this["rondje"+ (counter)]=new block;
    this["rondje"+(counter)].x=mouseX-45;
    this["rondje"+ (counter)].y=mouseY-45;
    copy = addChildAt(this["rondje"+(counter)], 3);
    counter++;
    copy.startDrag();       
    makeListeners(copy);
}

//DROP
stage.addEventListener(MouseEvent.MOUSE_UP, dropEverything);
function dropEverything(event:MouseEvent):void
{
    stopDrag();
}

//Remove latest child
buttonRemoveChild.addEventListener(MouseEvent.CLICK, removeNewestChild);
function removeNewestChild(event:MouseEvent):void
{
    var i = 0;
    i = this.numChildren;
    if (i > 10 )
    {
        this.removeChildAt(3);
    }
}

function makeListeners(copy:DisplayObject):void
{
    var i = this.numChildren;
    i.addEventListener(MouseEvent.CLICK, moveCopy);
}

function moveCopy(event:MouseEvent):void
{
    trace('move copy!');
}

原帖 我正在为一个学校项目制作一些“拖放”的东西,但我遇到了一个问题。

现在我已经设置好了,当你点击一个按钮时,你开始从库中拖动一个符号的副本。当您单击应用程序中的某个位置时,您会再次将其放下。 我遇到的问题是允许用户选择此副本以再次拖动它的代码。

它给了我这个错误:

TypeError:错误 #1034:类型强制失败:无法将块 @2a308041 转换为 flash.events.Event。在 rondje1/dropEverything ()

这是我制作副本的代码:

//Copy dan drag and drop Rondje
buttonRondje.addEventListener(MouseEvent.CLICK, dragRondje);
function dragRondje(event:MouseEvent):void
{
    this["rondje"+ (counter)]=new block;
    this["rondje"+(counter)].x=mouseX-45;
    this["rondje"+ (counter)].y=mouseY-45;
    copy = addChildAt(this["rondje"+(counter)], 3);
    counter++;
    copy.startDrag();       
}

代码放置在哪里,并将事件监听器添加到副本中:

//DROP
stage.addEventListener(MouseEvent.MOUSE_UP, dropEverything);
function dropEverything(event:MouseEvent):void
{
    stopDrag();
    makeListeners(copy);
}

添加监听器的代码:

function makeListeners(e:Event):void
{
    var i = 0;
    i = this.numChildren;
    for (i = this.numChildren;i<10;i++)
    {
        this.addEventListener(MouseEvent.CLICK, moveCopy);
    }
}

function moveCopy(event:MouseEvent):void
{
    trace('move copy!');
}

符号是这样设置的:

  • 名称:符号 1
  • 类型:影片剪辑
  • 为 ActionScript 导出 -> 选中
  • 在第 1 帧中导出 -> 已选中
  • 类:块
  • 基类:flash.display.MovieClip

我真的不明白为什么我在这里收到错误:S 希望这里有人可以帮助我。我会永远感激不尽。 提前致谢, XX

ps:完整代码如下:

import flash.display.*;
import flash.events.MouseEvent;
import flash.ui.Mouse;

var counter=1;
var copy;

//Copy dan drag and drop Rondje
buttonRondje.addEventListener(MouseEvent.CLICK, dragRondje);
function dragRondje(event:MouseEvent):void
{
    this["rondje"+ (counter)]=new block;
    this["rondje"+(counter)].x=mouseX-45;
    this["rondje"+ (counter)].y=mouseY-45;
    copy = addChildAt(this["rondje"+(counter)], 3);
    counter++;
    copy.startDrag();       
}

//Copy dan drag and drop HalfCircle1
buttonHalfCircle1.addEventListener(MouseEvent.CLICK, dragHalfCircle1);
function dragHalfCircle1(event:MouseEvent):void
{
    this["HalfCircle1"+(counter)]=new HalfCircle1;
    this["HalfCircle1"+(counter)].x=mouseX - 45;
    this["HalfCircle1"+(counter)].y=mouseY - 55;
    copy = addChildAt(this["HalfCircle1"+(counter)], 3);
    counter++;
    copy.startDrag();   
}

//Copy dan drag and drop HalfCircle2
buttonHalfCircle2.addEventListener(MouseEvent.CLICK, dragHalfCircle2);
function dragHalfCircle2(event:MouseEvent):void
{
    this["HalfCircle2"+(counter)]=new HalfCircle2;
    this["HalfCircle2"+(counter)].x=mouseX - 45;
    this["HalfCircle2"+(counter)].y=mouseY - 55;
    copy = addChildAt(this["HalfCircle2"+(counter)], 3);
    counter++;
    copy.startDrag();   
}

//Copy dan drag and drop HalfCircle3
buttonHalfCircle3.addEventListener(MouseEvent.CLICK, dragHalfCircle3);
function dragHalfCircle3(event:MouseEvent):void
{
    this["HalfCircle3"+(counter)]=new HalfCircle3;
    this["HalfCircle3"+(counter)].x=mouseX - 45;
    this["HalfCircle3"+(counter)].y=mouseY - 5;
    copy = addChildAt(this["HalfCircle3"+(counter)], 3);
    counter++;
    copy.startDrag();   
}

//Copy dan drag and drop HalfCircle4
buttonHalfCircle4.addEventListener(MouseEvent.CLICK, dragHalfCircle4);
function dragHalfCircle4(event:MouseEvent):void
{
    this["HalfCircle4"+(counter)]=new HalfCircle4;
    this["HalfCircle4"+(counter)].x=mouseX - 45;
    this["HalfCircle4"+(counter)].y=mouseY - 5;
    copy = addChildAt(this["HalfCircle4"+(counter)], 3);
    counter++;
    copy.startDrag();   
}

//Copy dan drag and drop Streep
buttonStreep.addEventListener(MouseEvent.CLICK, dragStreep);
function dragStreep(event:MouseEvent):void
{
    this["streep"+(counter)]=new Streep;
    this["streep"+(counter)].x=mouseX - 2;
    this["streep"+(counter)].y=mouseY - 5;
    copy = addChildAt(this["streep"+(counter)], 3);
    counter++;
    copy.startDrag();   
}

//DROP
stage.addEventListener(MouseEvent.MOUSE_UP, dropEverything);
function dropEverything(event:MouseEvent):void
{
    stopDrag();
    makeListeners(copy);
}

//Remove latest child
buttonRemoveChild.addEventListener(MouseEvent.CLICK, removeNewestChild);
function removeNewestChild(event:MouseEvent):void
{
    var i = 0;
    i = this.numChildren;
    if (i > 10 )
    {
        this.removeChildAt(3);
    }
}

function makeListeners(e:Event):void
{
    var i = 0;
    i = this.numChildren;
    for (i = this.numChildren;i<10;i++)
    {
        this.addEventListener(MouseEvent.CLICK, moveCopy);
    }
}

function moveCopy(event:MouseEvent):void
{
    trace('move copy!');
}

【问题讨论】:

  • 为什么要在索引 3 处添加子项?应该是 xxx.addChild(child, xxx.numChildren);

标签: actionscript-3 function drag-and-drop addeventlistener addchild


【解决方案1】:

您的代码可以改进。如果学校学会了你这样编码和命名东西,你应该生气。名为“符号 1”的符号未完成,就像使用荷兰名称进行编码一样。我建议让代码更简洁。

 this["HalfCircle1"+(counter)]

.. 你知道如果计数器等于 5 会产生什么样的名字吗? “HalfCircle15”.

仔细看看这个函数:

function makeListeners(e:Event):void
{
    var i = 0;
    i = this.numChildren;
    for (i = this.numChildren;i<10;i++)
    {
        this.addEventListener(MouseEvent.CLICK, moveCopy);
    }
}

你认为它有什么作用?首先,将 i 设置为 0。然后将其设置为当前影片剪辑中的子项数。这可以是任何数字。所以首先将其设置为 0 是没有意义的。但是为什么你想从 3 循环到 10 并且不使用索引i?你只是多次做同样的事情。在听众的情况下,这是不好的做法。 您将相同的侦听器多次添加到同一个对象(?!) 1 个相同类型的侦听器应该足够了,否则它会矫枉过正并且会产生不需要的效果。

对我来说,不清楚您要做什么,但我猜您的意思是为特定对象添加侦听器,因为您使用的是 numChildren。

解决错误

makeListeners(copy);

函数makeListeners 需要Event 作为参数,您发送的是copy,即DisplayObject。这会导致错误。您可能应该将e:Event 更改为copy:DisplayObject,这将隐藏错误。

在您的代码中,您似乎会在每次拖动/单击时不断添加侦听器,但从未删除任何侦听器。这意味着如果您单击 10 次,则 moveCopy 可以称为 100 次(!)这将在单击时增加。您应该使用某种 call-once init-function 添加一次侦听器。

// add child at certain index
copy = addChildAt(this["HalfCircle4"+(counter)], 3);

// and..
this.removeChildAt(3);

我想知道您为什么将索引 3 用作“最新孩子”索引?

抱歉,也许这条评论不是很有帮助,也不是问题的答案,但您的代码可以在几个方面进行改进。如果它已经工作了,那是因为黑魔法,但它充满了漏洞和不那么干净的代码。

你应该去找你的老师,告诉他你需要帮助。你在学校。

更新:

我认为这足以创建一个复制和拖动剪辑应用程序:

import flash.display.*;
import flash.events.MouseEvent;

var _lastClip:MovieClip;

// add a listener to all buttons. 
buttonRondje.addEventListener(MouseEvent.CLICK, handleClick);
buttonHalfCircle1.addEventListener(MouseEvent.CLICK, handleClick);
buttonHalfCircle2.addEventListener(MouseEvent.CLICK, handleClick);
buttonHalfCircle3.addEventListener(MouseEvent.CLICK, handleClick);
buttonHalfCircle4.addEventListener(MouseEvent.CLICK, handleClick);
buttonStreep.addEventListener(MouseEvent.CLICK, handleClick);

function handleClick(event:Event):void
{
     var clip:MovieClip;
             trace("Clicked on: " + clip);
             // based on which clip is clicked, we deside which object should be created.
     switch(event.currentTarget)
     {
         case buttonRondje:
         {
             clip = new Circle();
             break;
         }
         case buttonHalfCircle1:
         {
             clip = new HalfCircle1();
             break;
         }
         case buttonHalfCircle2:
         {
             clip = new HalfCircle2();
             break;
         }
         case buttonHalfCircle3:
         {
             clip = new HalfCircle3();
             break;
         }
         case buttonHalfCircle4:
         {
             clip = new HalfCircle4();
             break;
         }
         case buttonStreep:
         {
             clip = new Streep();
             break;
         }
    }

    // Move to mouse. It would be better to move the center points inside the clips so we don't need custom offsets here
    clip.x = mouseX;
    clip.y = mouseY;
    clip.startDrag();

    this.addChildAt(clip, 3);

    // remember the latest added clip
    this._lastClip = clip;
}

stage.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp);

function handleMouseUp(event:MouseEvent):void
{
     // if you where dragging, stop it
     if(this._lastClip)
     {
         this._lastClip.stopDrag();
     }
}

【讨论】:

  • 虽然我同意你的观点 - 代码真的很糟糕,而且有很多很多的地方需要纠正 - 劝阻学生既不礼貌也无济于事说“没有公司会雇用你”之类的话。事实上,这真的是拖钓。我喜欢你花时间指出并解释一些错误的事实,所以我不会对你投反对票,但如果它是有帮助的,而不是有害的,它会是一个更好的答案。
  • 你说得对,那可能太粗鲁了,所以我删除了那行。
  • 感谢您的快速回复 :) 我编辑了我的问题以彻底回答您的所有问题(并提出新问题。)
  • 这绝对有帮助!谢谢:)
猜你喜欢
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
相关资源
最近更新 更多