2010-12-05 91 views
0

在我的主要Actionscript文件中,我有一個移動人體胳膊腿等的身體類的實例,以及具有與人槍相關的方法和屬性的槍類。類之間的相互作用

現在我在Main類中有一個叫做移動槍的功能,看起來像這樣,並且被稱爲everyframe來將槍移動到bodys手臂。我希望把這個功能移到槍類,所以我可以稱它爲gun.moveGun();但身體劑量存在於槍變量內部。所以我想知道我是否可以調用body.getArm();從槍內部起作用。我知道我可以調用該函數,並將主體文件中的bodys手臂位置傳遞給它。但不知道這是否是最好的方式。

private function moveGun():void 
    { 
     gun.x = body.getArm('left').x; 
     gun.y = body.getArm('left').y; 
    } 

好像保持槍類中槍有關的職能是組織一切的最好方式,但我不知道如何做到這一點。

還取決於有人在開始時點擊了什麼按鈕,該人將有一個籃子或槍在那裏。我在 Here在線添加了瑞士法郎,所以你可以看到它是如何工作的。我只是想改變它的組織方式,因爲主文件非常豐滿,儘管我應該學習如何更好地組織事情。如果我知道如何讓對象進行交互,或者最好的方式是什麼,那麼該程序的其他部分會更好地組織。開始考慮將x,y座標傳遞給gun類內的moveGun函數是最好的方法。如果是這樣,請告訴我,生病了。

回答

0

從你發佈的代碼中,我認爲你需要移動槍的每一幀粘到玩家的手臂上。

你正在尋找的答案是成分,因爲每個人都只有一把槍,我認爲你最好在槍類的人類中加入一個參考(變量)。

,這裏是您的播放器(人)類:

class Person 
{ 
    private var m_gun:Gun; 

    public function Person() 
    { 
     this.m_gun = new Gun(); 
    } 

    // a function which is called each frame 
    private function updateFrame() 
    { 
     // Here you can provide your own logic in Gun class 
     this.m_gun.doSomething(); 
    } 
} 
+0

由於這似乎是要走的路。但是,對於我的程序,取決於用戶在開始時點擊的按鈕,人員要麼在每個框架上都有一個球類的球,要麼在槍上移動,所以如果我在身體類中有槍的變量,我不會能夠去做這個。但是,謝謝你的回答,我從來沒有這樣做過,並認爲這將有助於瞭解未來。 – user531186 2010-12-05 13:16:00

0

一般來說,您希望使用內置事件偵聽器和調度程序系統在類之間進行通信。如果發生「某些事情」 - 無論發生在哪裏 - 派遣一個事件。無論什麼時候應該反應,它應該有一個聽衆。

例如,你所提到的主類,你可能要調度的事件:(?身體 - 不知道你是如何設置的東西了)

private function moveGun():void 
{ 
var e:Event = new Event('moveGun', true); 
dispatchEvent(e); 
} 

那麼相應的實例偵聽該:

body.addEventListener('moveGun', moveGunHandler, false, 0, true); 
function moveGunHandler(event:Event):void{ 
    gun.x = body.getArm('left').x; 
    gun.y = body.getArm('left').y; 
} 

上面顯然是僞代碼,因爲我無法知道你的顯示列表是如何設置的。另外,我使用了簡單的字符串文字事件類型 - 最佳做法可能是使用定義爲靜態常量的事件類型的自定義事件類。