2013-12-13 65 views
0

您好,編程大師的stackoverflow,我希望至少有一個人能夠幫助我解決我的編碼問題。這是我第一次在這個網站上發佈,所以如果我錯過了我的帖子結構或任何事情,請讓我知道(最好不要在一個居高臨下的問題),我會很樂意改變它。Actionscript 3,Flash CC:將庫中的對象放置在舞臺上的庫中

我實際上遇到了一個我要問的不同的問題,但是我最近意識到我的圖書館中的一些物品沒有出現在我的舞臺上。希望如果這個問題得到解決,我就不會有其他問題。

我正在創建一個使用Flash CC和Actionscript 3的學習模塊應用程序,我喜歡認爲我對Flash相當熟練,但現在我所有的代碼都在時間軸上,因爲當我開始時我並不知道包安裝。當我完成學習模塊時,我會嘗試將所有內容移至AS包,因此請耐心等待。

該模塊的當前框架是一個拖放遊戲,用戶將正確的食物拖動到中間的動物身上,這些食物是他們在前一幀中選擇的動物的正確食物。動物被動態地放置在舞臺上,以及六種可能的食物選擇,從圖書館中拉出所有的動畫片段。食物元素的陣列實際上並不是我遇到的問題,它們出現在我的舞臺上並沒有任何問題。我遇到的問題是,當用戶將正確的食物拖到動物身上時,滿足勝利條件,氣球元素陣列不會出現在舞臺上。我覺得這很奇怪,因爲我在食物和氣球陣列中使用幾乎相同的代碼。

這裏是我的全碼:

import flash.display.MovieClip; 
import flash.events.MouseEvent; 

foodPet(); 

function foodPet():void { 
    //all of my pet, food, and balloon library objects have been exported for AS 
    var theBird:pet_bird = new pet_bird; 
    var theCat:pet_cat = new pet_cat; 
    var theChicken:pet_chicken = new pet_chicken; 
    var theDog:pet_dog = new pet_dog; 
    var theDuck:pet_duck = new pet_duck; 
    var theGuinea:pet_guinea = new pet_guinea; 
    var theHamster:pet_hamster = new pet_hamster; 

    var birdSeed:food_bird_seed = new food_bird_seed; 
    var catFood:food_cat_food = new food_cat_food; 
    var chickenFeed:food_chicken_feed = new food_chicken_feed; 
    var chocolate:food_chocolate = new food_chocolate; 
    var dogFood:food_dog_food = new food_dog_food; 
    var duckFood:food_duck_food = new food_duck_food; 

    var animalList:Array = [theBird, theCat, theChicken, theDog, 
     theDuck, theGuinea, theHamster]; 
    var food1Array:Array = [birdSeed, catFood, chickenFeed, 
     chocolate, dogFood, duckFood, 4]; 
    var xPosFood:Array = new Array(); 
    var yPosFood:Array = new Array(); 
    xPosFood = [32, 71, 146, 363, 431, 512]; 
    yPosFood = [304, 222, 123, 123, 222, 304]; 
    var animalClip:MovieClip; 
    animalClip = animalList[chosenAnimal]; 
    addChild(animalClip); 
    animalClip.x = 256; 
    animalClip.y = 287; 
    animalClip.name = "selectedAnimal"; 

    for (var i:uint = 0; i < food1Array.length - 1; i++){ //Where the food gets added 
     var isItRight:Boolean = false; 
     var foodName:String = ("food" + i); 
     var foodClip:MovieClip; 
     foodClip = food1Array[i]; 
     foodClip.x = xPosFood[i]; 
     foodClip.y = yPosFood[i]; 
     foodClip.name = foodName; 
     addChild(foodClip); 
     trace(foodClip.parent); 
     foodDragSetup(foodClip, animalClip, food1Array[food1Array.length - 1], isItRight); 
    } 
} 

function foodDragSetup(clip:MovieClip, targ:MovieClip, correctNum:uint, isItRight:Boolean) { 
    var beingDragged:Boolean = false; 
    var xPos:Number = clip.x; 
    var yPos:Number = clip.y; 
    clip.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag); 

    function beginDrag(event:MouseEvent):void 
    { 
     clip.startDrag(); 
     if (int(clip.name.substr(4)) == correctNum){ 
      isItRight = true; 
     } 
     this.beingDragged = true; 
     setChildIndex(clip, numChildren - 1); 
     clip.addEventListener(MouseEvent.MOUSE_UP, endDrag); 
    } 

    function endDrag(event:MouseEvent):void 
    { 
     if (this.beingDragged) { 
      this.beingDragged = false; 
      clip.stopDrag(); 
      if ((isItRight) && (clip.hitTestPoint(targ.x, targ.y, true))){ 
       trace(targ.name + " has been hit."); 
       clip.x = targ.x; 
       clip.y = targ.y; 
       win_animal_food(); 
      } else { 
       isItRight = false; 
       clip.x = xPos; 
       clip.y = yPos; 
      } 
     } 
    } 
} 

function win_animal_food():void { 
    const BALLOON_ROW:int = 4; 
    var count:uint = 0; 
    var altX:uint = 0; 

    var bBalloon:blue_balloon = new blue_balloon; 
    var gBalloon:green_balloon = new green_balloon; 
    var oBalloon:orange_balloon = new orange_balloon; 
    var pBalloon:purple_balloon = new purple_balloon; 
    var rBalloon:red_balloon = new red_balloon; 
    var yBalloon:yellow_balloon = new yellow_balloon; 

    var balloonList:Array = [bBalloon, gBalloon, oBalloon, 
     pBalloon, rBalloon, yBalloon, bBalloon, gBalloon, 
     oBalloon, pBalloon, rBalloon, yBalloon, bBalloon, 
     gBalloon, oBalloon, pBalloon]; 
    var balloonY:Array = [144, -205, -265, -325]; 
    var balloonX:Array = [0, 140, 284, 428, 68, 212, 356, 500]; 

    for (var ballY:uint = 0; ballY < balloonY.length; ballY++){ //Where balloons 
     for (var ballX:uint = altX; ballX < altX + BALLOON_ROW; ballX++){ //get added 
      var balloonName:String = ("balloon" + count); 
      var balloonClip:MovieClip; 
      balloonClip = balloonList[count]; 
      balloonClip.x = balloonX[ballX]; 
      balloonClip.y = balloonY[ballY]; 
      balloonClip.name = balloonName; 
      addChild(balloonClip); 
      trace(balloonClip.parent); 
      trace(balloonClip + " has been added!"); 
      balloonClip.addEventListener(MouseEvent.CLICK, balloonPop); 
      count++; 
     } 

     if (altX == 0) { 
      altX = BALLOON_ROW; 
     } else { 
      altX = 0; 
     } 
    } 

    function balloonPop(event:MouseEvent):void { 
     event.target.play(); 
     event.target.removeEventListener(MouseEvent.CLICK, balloonPop); 
    } 
} 

我認爲有可能是與我的氣球影片剪輯的一個問題,所以我的埋入他們的食物數組中:

var birdSeed:blue_balloon = new blue_balloon; 
var catFood:green_balloon = new green_balloon; 
var chickenFeed:orange_balloon = new orange_balloon; 
var chocolate:purple_balloon = new purple_balloon; 
var dogFood:red_balloon = new red_balloon; 
var duckFood:yellow_balloon = new yellow_balloon; 

他們都出現了在舞臺上,所以影片剪輯沒有任何問題。

補充:第一的balloonXArray和值分別balloonYArray最初-4和-145,但是當我開始有問題,我想,以確保氣球顯示出來,所以我設置的第一個值設置爲0 144氣球的高度和寬度都是144,它們的十字(不知道它的名字)在左上角。

補充:爲什麼有在balloonList同一氣囊的多個實例的原因是因爲我需要四個氣球四大行,但只能有六個不同的氣球。

我知道氣球在舞臺上,因爲調試顯示器在可視舞臺上顯示了它們的xy值。使用trace(foodClip.parent)trace(balloonClip.parent)顯示氣球和食物都具有相同的父母MainTimeline,所以我知道氣球沒有被添加到一些不同的空間。

我已經在網上搜索過,但還沒有遇到任何有類似問題的人。因此,我在這個論壇上詢問是否有人能告訴我爲什麼我的氣球不會出現在舞臺上。

請謝謝。

+0

基本的東西,檢查馬上:你的選擇協調顯眼的位置?跟蹤氣球的寬度/高度,看看你是否期待這一點。檢查balloonClip.stage是否爲空(它將檢查顯示列表的所有內容)。爲什麼在氣球陣列中多次使用相同的氣球實例?這是做你認爲它做的? – AndySavage

+0

@AndySavage感謝您瀏覽和評論我的問題!氣球的高度和寬度都是144px,左上角有十字,我最初的'balloonYArray'以-145開始,我的原始'balloonXArray'開始於-4,但由於我開始有問題,我決定改變第一個'x'和'y'值,因此它會出現在屏幕上(144,0)。跟蹤balloonClip.stage給了我[對象舞臺]。至於氣球實例的倍數,我只有六個不同的氣球,但我需要做四排四個。我希望這有助於澄清一些事情。 – Felanrod

+0

我在baloonList中看到的一件事就是你有多次列出相同的對象實例。每個實例只能在舞臺上存在一次。如果addChild()是一個已經在舞臺上的實例,那麼該實例將首先被刪除,然後重新添加到顯示列表的頂部。 –

回答

0

我在baloonList中直接看到的一件事是,您有多次列出相同的對象實例。每個實例只能在舞臺上存在一次。如果addChild()是一個已經在舞臺上的實例,那麼該實例將首先被刪除,然後重新添加到顯示列表的頂部。

你應該改變:

var bBalloon:blue_balloon = new blue_balloon; 
var gBalloon:green_balloon = new green_balloon; 
var oBalloon:orange_balloon = new orange_balloon; 
var pBalloon:purple_balloon = new purple_balloon; 
var rBalloon:red_balloon = new red_balloon; 
var yBalloon:yellow_balloon = new yellow_balloon; 

var balloonList:Array = [bBalloon, gBalloon, oBalloon, 
    pBalloon, rBalloon, yBalloon, bBalloon, gBalloon, 
    oBalloon, pBalloon, rBalloon, yBalloon, bBalloon, 
    gBalloon, oBalloon, pBalloon]; 

到:

var balloonList:Array = [ 
    new blue_balloon, 
    new green_balloon, 
    new orange_balloon, 
    new purple_balloon, 
    new red_balloon, 
    new yellow_balloon, 
    new blue_balloon, 
    new green_balloon, 
    new orange_balloon, 
    new purple_balloon, 
    new red_balloon, 
    new yellow_balloon, 
    new blue_balloon, 
    new blue_balloon, 
    new green_balloon, 
    new orange_balloon, 
    new purple_balloon 
]; 
+1

這正是問題所在!我可能應該知道這一點。非常感謝@PatrickGunderson! – Felanrod

相關問題