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

Похоже, держа пистолет связанных функций внутри класса пушки это лучший способ организовать все, но я не знаю, как это сделать.

Также в зависимости от того, какая кнопка кто-то щелкнет в начале, у человека будет либо корзина с барабаном, либо ружье в руке. Ive добавил swf онлайн по адресу Here, чтобы вы могли видеть, как это работает. я просто хочу изменить, как его организовано, потому что основной файл очень заполнен, и хотя я должен научиться лучше организовывать вещи. Есть много другой части программы, которая будет организована лучше, если бы я знал, как заставить объект взаимодействовать или как лучше всего это сделать. Начиная думать о передаче координат x, y функции moveGun внутри класса gun, это лучший способ. Если так, просто скажите мне, пожалуйста, и больно.

ответ

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; 
} 

выше, очевидно, псевдо-код, так как у меня нет возможности узнать, как ваш список дисплей настроен. Кроме того, я использовал простые типы строковых литералов - лучшей практикой было бы, вероятно, использование пользовательских классов событий с типами событий, определяемыми как статические константы.

Смежные вопросы