2013-08-05 41 views
0

我正在創建一個拖放遊戲,我通過一個Lynda tut進行了跟蹤。我一直在爲我創建的遊戲收到一個錯誤,因爲我注意到(經過數週的代碼審查並讓其他人看着它來弄清楚什麼是錯誤的),我遵循的教程在第一幀上做了所有的事情,但我正在製作我的遊戲開始於第3幀。所以如果我在第1幀開始我的遊戲,它完美的工作,我不會得到這些錯誤:如何延遲當我的動作3代碼運行?

這發生在我測試電影時,一旦我點擊繼續我能夠看到電影 -

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at simpleSpring()[simpleSpring.as:21] 

當我拖我的對象發生這種情況 -

TypeError: Error #2007: Parameter hitTestObject must be non-null. 
    at flash.display::DisplayObject/_hitTest() 
    at flash.display::DisplayObject/hitTestObject() 
    at DragDrop/drop()[DragDrop.as:33] 

因爲我知道這些錯誤不會出現,除非我在第一幀開始遊戲,我想知道我可以放置什麼代碼,以便我可以在第一幀之後的幀開始遊戲。

以下是DragDrop.as

package 
{ 
    import flash.display.*; 
    import flash.events.*; 

    public class DragDrop extends Sprite 
    { 
     var origX:Number; 
     var origY:Number; 
     var target:DisplayObject; 

     public function DragDrop() 
     { 
      // constructor code 
      origX = x; 
      origY = y; 
      addEventListener(MouseEvent.MOUSE_DOWN, drag); 
      buttonMode = true; 
     } 

     function drag(evt:MouseEvent):void 
     { 
      stage.addEventListener(MouseEvent.MOUSE_UP, drop); 
      startDrag(); 
      parent.addChild(this); 
     } 

     function drop(evt:MouseEvent):void 
     { 
      stage.removeEventListener(MouseEvent.MOUSE_UP, drop); 
      stopDrag(); 

      if(hitTestObject(target)) 
      { 
       visible = false; 
       target.alpha = 1; 
       Object(parent).match(); 
      } 

      x = origX; 
      y = origY; 
     } 

    } 

} 

代碼這裏是simpleSpring.as

package 
{ 

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


    public class simpleSpring extends MovieClip 
    { 
     var dragdrops:Array; 


     public function simpleSpring() 
     { 
      // constructor code 
      dragdrops = [ladyone,ladytwo,ladythree,ladyfour,ladyfive,ladysix]; 
      var currentObject:DragDrop; 
      for(var i:uint = 0; i < dragdrops.length; i++) 
      { 
       currentObject = dragdrops[i]; 
       currentObject.target = getChildByName(currentObject.name + "_target"); 


      } 
     } 

     public function match():void 
     { 

     } 
    } 

} 

我嘗試了遊戲文件中添加代碼的動作層,但這也似乎不能正常工作。

+0

此問題對於StackOverflow太寬泛。嘗試縮小問題範圍,並針對每個問題發佈一個問題。請記住,StackOverflow不是一個論壇。 – Pier

+0

你能不能在你的'DragDrop'函數中說'if(currentFrame!= 3)gotoAndStop(3);' – putvande

+0

要學習一些* real * ActionScript,請查看Colin Moock丟失的ActionScript Weekend。 –

回答

0

我是這樣一個新手,當涉及到發佈的東西。我注意到當我爲android發佈時,我可以添加多個swf文件。這解決了我無法在開始幀編碼的問題。如果我有一個單獨的Flash文件保存在同一個文件夾中,並且使用actionscript調用它,那麼代碼將起作用,並且我可以將整個文件發佈爲一個文件。再次感謝那些試圖幫助我解決這個問題的人!