2013-05-05 106 views
0

我將一個大文件分隔成多個文件以清除它,現在我遇到了問題。使用另一個類的變量as3

我有我的main.as,character.as,camera.as。

我想要做的是從另一個類中訪問一個變量,然後在該類上設置一個變量。我會告訴你我的意思。

從我的main.as im加載每個類,並將它們添加爲孩子,以便它顯示在屏幕上。

public function buildGame() 
    { 
     var loadMap:Sprite = new nf_MapBuilder(); 
     var xChar:Sprite = new nf_Character(); 
     var xCam:Sprite = new nf_Camera(); 
     var UserControl:nf_UserControl = new nf_UserControl(); 

     addChild(loadMap); 
     addChild(xChar); 
     addChild(xCam); 
     addChild(UserControl); 
    } 

一切都顯示在屏幕上,就像它需要的一樣。然後它轉到我的角色上。:

package as3 
{ 
import flash.display.Sprite; 
import flash.events.Event; 

public class nf_Character extends Sprite 
{ 
    public var character_pos:Array = new Array(); 
    public var character_is_moving:Boolean = false; 
    public var character_x_dir:int = 0; 
    public var character_y_dir:int = 0; 
    public var character:hero = new hero(); 

    public function nf_Character() 
    { 
     addEventListener(Event.ADDED_TO_STAGE,xCharLoad); 
    } 

    public function xCharLoad(e:Event) 
    { 
     character_pos = [2,2]; 
     character.x=64*(character_pos[1]); 
     character.y=64*(character_pos[0]); 
     addChild(character); 
    } 
} 
} 

存在問題。我需要使用這些變量i設置有在我的character.as在我camera.as使用它:

package as3 
{ 
import flash.display.Sprite; 
import flash.events.Event; 
import flash.geom.Rectangle; 
import flash.display.StageScaleMode; 

import as3.nf_Character; 

public class nf_Camera extends Sprite 
{ 
    private var xChar:nf_Character = new nf_Character(); 

    //Camera variables 
    var stageW2:Number; 
    var stageH2:Number; 
    var view:Rectangle; 

    public function nf_Camera() 
    { 
     addEventListener(Event.ADDED_TO_STAGE,xCamGo); 
    } 

    public function xCamGo(e:Event):void 
    { 
     trace("Camera pos - " + xChar.x + " " + xChar.character.y); 

     view = new Rectangle(0,0,stage.stageWidth,stage.stageHeight) 
     stageW2 = stage.stageWidth/2 - 32; 
     stageH2 = stage.stageHeight/2 - 32; 

     addEventListener(Event.ENTER_FRAME,CamView); 
    } 
    public function CamView(e:Event):void 
    { 
     view.x = xChar.character.x - stageW2; 
     view.y = xChar.character.y - stageH2; 
     scrollRect = view; 
    } 
} 
} 

當這一切都在一個大文件也沒關係,我只是必須設置在變並通過每個功能來處理它,但現在我有點困惑。任何人都看到我可以做到這一點?

回答

0

您可以將您的角色類實例作爲構造函數的參數傳遞給您的相機類實例。然後,您將有相機類中的字符的引用,你可以訪問它的變量

// Inside buildGame() in main. 
var xChar:nf_Character = new nf_Character(); 
var xCam:nf_Camera = new nf_Camera(xChar); 

// Inside nf_Camera 
public function nf_Camera(char:nf_Character) { 
    xChar = char; 
} 
+0

哇,工作!我現在可以移動,所有的東西都會從我的main中調用,比如net.uk建議的。我也用你的方法bwroga來傳遞我的變量。這是我認爲看起來更清晰的好方法。我仍然不能移動相機,但生病讓它現在工作,現在我可以走動:P – Aenil 2013-05-05 01:40:37

+0

它也修復了很多事實上,我有一個跟蹤在我的相機發生,並看到跟蹤4時間行走可能導致它是用所有這種意大利麪實例化了許多時間。有了這個,我只能看到它一次,就像它被認爲是一樣!無論如何,我很開心! :P – Aenil 2013-05-05 01:45:20

1

總之,我想你應該訂閱事件從你的性格你的主類,這是發射時的字符移動。在該事件的處理程序中,您可以調用攝像頭上的方法根據角色的當前位置設置其位置。

main.as

private var xChar:Sprite = new nf_Character(); 
private var xCam:Sprite = new nf_Camera(); 

public function buildGame() 
{ 
    var loadMap:Sprite = new nf_MapBuilder(); 
    var UserControl:nf_UserControl = new nf_UserControl(); 

    // listen for when the character has moved 
    xChar.addEventListener(MoveEvent.MOVED, characterMovedHandler); 

    addChild(loadMap); 
    addChild(xChar); 
    addChild(xCam); 
    addChild(UserControl); 
} 

private function characterMovedHandler(event:MoveEvent):void 
{ 
    xCam.setPosition(xChar.x, xChar.y); 
} 

nf_Character.as

public class nf_Character extends Sprite 
{ 
    public var character_pos:Array = new Array(); 
    public var character_is_moving:Boolean = false; 
    public var character_x_dir:int = 0; 
    public var character_y_dir:int = 0; 
    public var character:hero = new hero(); 

    public function nf_Character() 
    { 
     addEventListener(Event.ADDED_TO_STAGE,xCharLoad); 
    } 

    public function xCharLoad(e:Event) 
    { 
     character_pos = [2,2]; 
     character.x=64*(character_pos[1]); 
     character.y=64*(character_pos[0]); 
     addChild(character); 
    } 

    public function xCharMoved() 
    { 
     // Dispatch a custom event when the character moves 
     dispatchEvent(new MovedEvent(MovedEvent.MOVED)); 
    } 
} 

nf_Camera.as

public class nf_Camera extends Sprite 
{ 
    private var xChar:nf_Character = new nf_Character(); 

    //Camera variables 
    var stageW2:Number; 
    var stageH2:Number; 
    var view:Rectangle; 

    public function nf_Camera() 
    { 
     addEventListener(Event.ADDED_TO_STAGE,xCamGo); 
    } 

    public function xCamGo(e:Event):void 
    { 
     trace("Camera pos - " + xChar.x + " " + xChar.character.y); 

     view = new Rectangle(0,0,stage.stageWidth,stage.stageHeight) 
     stageW2 = stage.stageWidth/2 - 32; 
     stageH2 = stage.stageHeight/2 - 32; 

     // Probably only need one enterframe either in your character class or main 
     //addEventListener(Event.ENTER_FRAME,CamView); 
    } 
    public function setPosition(x:Number, y:Number):void 
    { 
     view.x = xChar.character.x - stageW2; 
     view.y = xChar.character.y - stageH2; 
     scrollRect = view; 
    } 
} 

出於興趣,如何你是否移動角色?

+0

以及即時通訊與我的角色運動有同樣的問題,除非我直接在我的「用戶控件」addChild。奇怪的原因是因爲我可以檢索我的MapBuilder.as,它可以構建地圖並使用一些也可以從usercontrol和這些工作中使用的變量。只是不是字符 – Aenil 2013-05-05 01:04:22

+0

無論如何生病檢查這個明天我太困惑了去大聲笑,但謝謝你的東西生病了看看它。 – Aenil 2013-05-05 01:06:28

+0

這聽起來像你真的需要分離所有這些實體(即。他們不應該需要引用其他實體的實例),並讓他們通過事件與某些控制器類(可能是主)通信。 – 2013-05-05 01:15:20