我無法找到解決我的問題的具體解決方案。我開始我的文檔類「Main.as」。從那我玩框架1,這是我的GUI。在我的GUI上按下「開始」按鈕之後,我想讓它在我的Main.as中調用「Start()」函數。從階段訪問文檔類
但它只是不會工作。我發現我無法從文檔類創建對象,也不能有超過1個文檔類。那麼我能做什麼?
Main.as
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.events.Event;
import flash.ui.Keyboard;
public class Main extends MovieClip
{
trace("Im the Main Class");
public var BG:MovieClip;
public var char:Char_Control;
public var enemy:Enemy;
var blockSlide:Boolean = true;
var coin_array:Array = new Array();
var char_array:Array = new Array();
var coin:item_collider;
var posx;
var posy;
var oCollider;
var main:Main = new Main();
//Konstruktor
public function Main()
{
trace("Im the Main Class(Constructor)");
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
this.stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
this.addEventListener(Event.ENTER_FRAME, Gravity);
this.addEventListener(Event.ENTER_FRAME,update);
gotoAndPlay(1); // Starts GUI
Start(); // Starts Everything else => The Game itself
}
public function update(_event:Event)
{
//Execute Base_Class
//char.Move();
//Execute Base_Class+Sub_Class
enemy.Chase(char,enemy);
//enemy.Move(true, "walk");
}
public function Start()
{
// Adds Character to Stage
char = new Char_Control(875,350);
stage.addChild(char);
enemy = new Enemy(500,450);
stage.addChild(enemy);
char_array[1]=char;
char_array[0]=enemy;
// Adds Objects to Stage
for (var i2:int=1; i2<30; i2++)
{
posx = Math.round(Math.random()*(1400)+1);
posy = Math.round(Math.random()*(800)+1);
coin = new item_collider(posx,posy);// Öffnet Konstruktor
stage.addChild(coin);
trace("Add Coin (foreach)");
coin_array.push(coin);
}
}
階段:
button.addEventListener(MouseEvent.CLICK,buttonClick);
var tform:TextFormat = new TextFormat();
tform.size = 20;
tform.font = "Arial";
tform.align = TextFormatAlign.CENTER;
tform.color = 0x000000;
tform.bold = true;
var tfield:TextField = new TextField();
tfield.width = checkbox.width;
tfield.width = button.width;
tfield.width = coin_number.width;
tfield.width = stepper_label.width;
tfield.x = 0;
tfield.y = 30;
var coin_amount:int = 0;
var create_enemy:Boolean = false;
tfield.setTextFormat(tform);
addChild(tfield);
checkbox.setStyle("textFormat",tform);
button.setStyle("textFormat",tform);
coin_number.setStyle("textFormat",tform);
stepper_label.setStyle("textFormat",tform);
stop();
function buttonClick(e:MouseEvent)
{
coin_amount = coin_number.value;
create_enemy = checkbox.selected;
nextFrame(); //Next Frame => the Level itself
}
雖然確實只能有一個文檔類,但您絕對應該能夠實例化該類中的對象。你有什麼具體問題/錯誤?它看起來像直接在構造函數中調用'Start',而不是通過開始按鈕上的事件偵聽器。 – Marcela
我想在我的舞臺的第一幀中從非extern腳本調用start()。我沒有收到錯誤,但在「gotoAndPlay(1)」之後,它會在我的舞臺上執行腳本。然後它跳到下一個Frame,我有我的背景(之前我有我的主要課程,但現在我希望它是extern)。這是我的問題。我怎麼能從我的舞臺的第二幀調用我的文檔類「Main.as」? – Fuby
你真的不應該混用時間軸代碼和外部類代碼。您可以將您的任何時間軸代碼放入文檔類中。話雖如此,您的文檔類實際上是您的整個應用程序的代碼。因此,您放入文檔類的任何內容都應該可以通過時間表訪問。我認爲你的'gotoAndPlay(1)'是不必要的,你可能只想在你的第一幀的某處放置一個stop()。 – Marcela