0

編輯: 哇,我沒有意識到我做了這麼多事情如此可怕的錯誤。這是我自己寫的第一個代碼,沒有使用學校提供的東西。猜猜在經過這麼幾次課後,我試圖咬掉更多的東西。錯誤#1034與孩子

我在Google搜索答案之後得到了大部分內容,然後複製了我認爲需要的部分代碼(強調'想法')。

還有一種方法可以「保存」代碼嗎?或者最好是放棄它並重新開始?無論哪種方式,那麼做正確的方法是什麼?

此外,我會問我的老師,如果我可以。但是我們再也沒有和他一起上課,所以這個人已經不在了(或者至少沒有迴應我的電子郵件)。我正在爲自己的另一個學校任務做這件事。所以這就是我轉向互聯網的原因。

感謝您解釋所有你做的。我很感激你花時間這樣做:)現在

,在回答大家的一些問題,並提出新的:

只有第一個符號被稱爲符號1,其他的都'真實'的名字。當我開始這個項目並保持這種方式時,我忘了改變它,因爲我確切知道它是什麼,因爲它是唯一一個這樣叫的。

..你知道什麼樣的名字出來,如果櫃檯等於5? 「HalfCircle15」。 是的,我意識到這一點。現在我明白這一點,同意這不是一個很好的方法來寫下來。在命名我的HalfCirlce1-4時沒有充分考慮它。

你認爲它有什麼作用? 好的,讓我試着更加清楚地解釋它: 當您拖放副本時,您不能再移動/選擇它。我希望用戶能夠選擇它,以便他可以再次拖放多次,如他所願。那麼,我認爲這意味着我必須將eventListeners添加到所有我製作的副本中?這是我在這裏想要做的。 另外,感謝您的錯誤解釋。 所以,這是更喜歡它?:

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

我也感動了makeListeners打電話到我做副本的地方。所以它應該只運行一次,當你製作副本時,對吧?

爲什麼你使用索引3作爲'最新的孩子'索引?這沒有什麼意義。 我搜索瞭如何做到這一點,我相信它告訴我'索引'是你想添加孩子的'層'(缺乏更好的詞)?我將它添加到3,以便它們超過了我的其他一些圖像以及其他一些圖像。它似乎是這樣工作的,儘管現在我也開始質疑這一點。

下面是我現在的(刪除其他數字,以便更容易查看代碼)。這給了我一個新的錯誤 TypeError:錯誤#1006:值是geen functie。 at rondje1/makeListeners() at 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!'); 
} 

ORINIAL POST 我做了一個學校項目有點「拖放」的事情,但我已經遇到了一個問題。

現在我已經設置,當你點擊一個按鈕,你開始從庫中拖動一個符號的副本。當你點擊應用程序中的某個地方時,你會再次丟棄它。 我遇到的問題是允許用戶選擇此副本再次拖動它的代碼。

它給我這個錯誤:

TypeError: Error # 1034: Type Coercion failed: can not convert block @2a308041 to flash.events.Event. at 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 希望這裏有人能幫助我。我會永遠gratefull。 由於提前, 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!'); 
} 
+0

你爲什麼在指數3添加子?應該是xxx.addChild(child,xxx.numChildren); –

回答

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次(!)這將在點擊時增加。您應該使用某種調用一次的init函數來添加偵聽器一次。

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

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

我想知道你爲什麼使用索引3作爲'最新的孩子'索引?

對不起,也許這個評論是不是很有幫助,並不是一個問題的答案,但你的代碼可以在幾個點上改進。如果由於黑魔法而已經有效,但它充滿了泄漏和不太乾淨的代碼。

你應該去找你的老師,告訴他你需要幫助。你在學校。

UPDATE:

我認爲這將是足以創造一個拷貝和拖即夾的應用程序:

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(); 
    } 
} 
+0

雖然我同意你的觀點 - 代碼非常糟糕,還有許多事情需要改正 - 通過說「沒有公司會聘用你」這樣的話來勸阻學生既不禮貌也不有助益。事實上,這實際上是拖釣。我喜歡這樣一個事實,即你花時間指出並解釋了一些錯誤,所以我不會投你一票,但如果這樣做的目的是爲了幫助,而不是傷害,它會更好的回答。 – weltraumpirat

+0

你說得對,那可能太粗魯了,所以我刪除了那一行。 –

+0

感謝您的快速回復:) 我編輯了我的問題,以徹底回答您的所有問題(並詢問新問題)。 – Chantal