2010-12-05 73 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; 
} 

上面显然是伪代码,因为我无法知道你的显示列表是如何设置的。另外,我使用了简单的字符串文字事件类型 - 最佳做法可能是使用定义为静态常量的事件类型的自定义事件类。