2013-08-26 58 views
0

我試圖使用thisthis來弄清楚如何設置一些數學類(我用於任何自上而下的正弦/餘弦函數),但我已將它設置爲導入package.class(當然的名字。)但是它說「defintion包:Class not found」。這使我困惑,我將假設我必須對文件夾做些什麼。然而,我不確定將文件夾放入/如何在文件夾中輸入文件。定製導入/ as3中的非本地類

//import sthreets.CustomFuncs; 

private function Movement() 
     { 
      if(LEFT==true) 
      { 
       rotation=rotation-6; 
      } 
      if(RIGHT==true) 
      { 
       rotation=rotation+6; 
      } 
      if(UP==true) 
      { 
       //x=x+CustomFuncs.TopDownMove("x", rotation, 0); 
       //y=y+CustomFuncs.TopDownMove("y", rotation, 0); 
      } 
      if(DOWN==true) 
      { 
       //x=x-CustomFuncs.TopDownMove("x", rotation, 0); 
       //y=y-CustomFuncs.TopDownMove("y", rotation, 0); 
      } 
     } 

註釋掉東西給我錯誤,這裏是CustomFuncs代碼。

package sthreets 
{ 

    public class CustomFuncs 
    { 

     public function CustomFuncs() 
     { 

     } 

     public function TopDownMove(xy:String, rot:Number, offSet:Number):Number 
     { 
      if(xy=="x") 
      { 
       return cos(DegreesToRadions(rot)+offSet) 
      } 
      if(xy=="y") 
      { 
       return sin(DegreesToRadions(rot)+offSet) 
      } 
     } 

     public function DegreesToRadions(rot:Number):Number 
     { 
      return rot*Math.PI/180; 
     } 
    } 

} 
+1

您是否善意向我們展示您的代碼? – Cherniv

+0

編輯它,在第一個註釋掉的位是什麼給了我錯誤,第二個是CustomFuncs as文件,在名爲「sthreets」的文件夾內。 – theHeretic

回答

1

軟件包名稱由src的位置決定。 src/my/package/namemy.package.name。您在任何類頂部導入的包必須與實際包匹配,否則編譯器將無法找到該類。

所以...說你有這樣的結構在您的文件夾:

src 
->my 
    ->package 
    ->name 
     ->ClassName 

類將被設置爲這樣:

package my.package.name { 
    public class ClassName { 
     public function ClassName(){ 
      //construct 
     } 
    } 
} 

而且你會使用導入:

import my.package.name.ClassName; 

import my.package.name.*; //only use the wildcard if every class in that package is being used, otherwise you will include code you may or may not need to in your project 

希望這有助於解釋軟件包並導入一點。

我還注意到,您正在使用CustomFuncs類中的函數,就好像它們是靜態的(就像使用Math.cos()或類似的函數一樣)。你的班級沒有按照這種方式工作。要做到這一點,你需要使用這個訪問修飾符。

package sthreets 
{ 
    public class CustomFuncs 
    { 
     public static function TopDownMove(xy:String, rot:Number, offSet:Number):Number 
     { 
      if(xy=="x") 
      { 
       return cos(DegreesToRadions(rot)+offSet) 
      } 
      if(xy=="y") 
      { 
       return sin(DegreesToRadions(rot)+offSet) 
      } 
     } 

     public static function DegreesToRadions(rot:Number):Number 
     { 
      return rot*Math.PI/180; 
     } 
    } 
} 

靜態訪問修飾符意味着該對象(在這種情況下,函數)僅在該應用程序的任何實例中存在一次,而標準訪問修飾符(publicprivateprotectedinternalmx_internalfinal )爲的每個單個實例創建一個對象。使用static訪問修飾符允許您通過ClassName.objectName訪問對象,因爲對象屬於類,而不是父對象。要獲得這些對象,你從來沒有實例化(你會在我刪除你的構造上面的代碼中發現,因爲沒有必要在這種情況下)。

注:下面你不一定直接,但我包括它誰可能會訪問這個問題

blog post給出了標準訪問修飾符的一個相當不錯的破敗任何未來的讀者。這使得相對於啤酒的比較是令人難以置信的好,令人難以置信的方便與人有關的修飾語瞭解有限的知識。

我還建議您閱讀本Wikipedia article的「靜態變量」,以幫助您瞭解什麼是靜態對象是在哪裏以及如何使用它。

AS3嚴格遵循OOP(面向對象編程)和ECMAScript策略,其語法嚴重依賴於Java。由於這些原因,其他OOP或ECMA語言使用的幾乎所有原則也適用於AS3。這意味着你可以通過閱讀這些原則來提高你的AS3技能,即使它們不是專門針對AS3的(AS3 OOP教程在數量和質量方面都相當有限,所以對於學習AS3的人來說很難OOP語言來學習這些原則)。

+0

謝謝,但如果我的fla/as文件位於桌面上的文件夾中,但我如何設置它,但我的自定義類也位於桌面上的文件夾中? Math I的sin/cos函數也計劃在後期進行調試,但我打算使用Math.sin和Math.cos。 – theHeretic

+1

如果它們位於src文件夾中(在本例中爲桌面上的文件夾),則該包與您的文檔類相同。所以不需要導入它,並且該類應該被創建爲'package {public class {'沒有任何包名稱。 (但是,不是100%肯定的,因爲我從來沒有使用Flash Pro構建過基於類的項目,只有Flash Builder和Flash Develop,但Pro只是一個更加功能豐富的IDE,所以它應該可以工作) –

+0

它們是在不同的文件夾中,但我無法弄清楚所有要做的事情,我嘗試了Users._sthreet.Desktop和所有這些,嘗試了幾件事情,但我無法弄清楚文件路徑是什麼。 – theHeretic