在我的主要Actionscript文件中,我有一个身体类的实例,可以移动人体手臂腿等,还有一个枪类,它具有与人枪相关的方法和属性。
现在我在Main类中有一个叫做移动枪的功能,看起来像这样,并被称为每帧将枪移动到人体手臂。我希望将此函数移动到枪类,所以我可以将其称为gun.moveGun();但身体剂量存在于枪的变量内。所以我想知道我是否可以调用body.getArm();从枪内部起作用。我知道我可以调用该函数并从主文件中将bodys arm位置传递给它。但不知道这是否是最好的方法。
private function moveGun():void
{
gun.x = body.getArm('left').x;
gun.y = body.getArm('left').y;
}
似乎将枪支相关功能保留在枪类中是组织一切的最佳方式,但我不知道如何做到这一点。
另外,根据某人在开始时点击的按钮,该人将手持篮球或枪。我已经在 Here在线添加了swf,因此您可以看到它是如何工作的。我只是想改变它的组织方式,因为主文件非常丰富,虽然我应该学习如何更好地组织事情。如果我知道如何让对象进行交互或者最好的方法是什么,那么程序中还有很多其他部分可以更好地组织。开始认为将x,y坐标传递给枪类中的moveGun函数是最好的方法。如果是这样,请告诉我,不要这样做。
答案 0 :(得分: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;
}
上面显然是伪代码,因为我无法知道你的显示列表是如何设置的。另外,我使用了简单的字符串文字事件类型 - 最佳做法可能是使用定义为静态常量的事件类型的自定义事件类。
答案 1 :(得分: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();
}
}