Взаимодействие между классами - PullRequest
0 голосов
/ 05 декабря 2010

В моем главном файле Actionscript у меня есть экземпляр класса тела, который перемещает руки рук человека и т. Д., И класс оружия, который имеет методы и свойства, связанные с оружием человека.

Прямо сейчас у меня есть функция в главном классе, которая называется Move gun и выглядит так, и называется каждым кадром, чтобы переместить пистолет к руке тела.Я надеялся переместить эту функцию в класс guns, чтобы я мог назвать ее как gun.moveGun ();но тело не существует внутри переменной оружия.так что мне интересно, могу ли я вызвать body.getArm ();Функция изнутри пистолета.Я знаю, что могу вызвать функцию и передать ей местоположение плеча тела из основного файла.Но не знаю, является ли это лучшим способом сделать это.

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

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

Кроме того, в зависимости от того, на какую кнопку кто-то нажимает в начале, у него будет баскетбольный мяч или пистолет.Я добавил SWF онлайн на Здесь , чтобы вы могли увидеть, как это работает.я просто хочу изменить его организацию, потому что основной файл очень полон, и хотя я должен научиться организовывать вещи лучше.Есть много другой части программы, которая была бы лучше организована, если бы я знал, как заставить объект взаимодействовать или как это лучше всего сделать.Лучше всего начать думать о передаче координат x, y в функцию moveGun внутри класса оружия.Если это так, просто скажите мне, пожалуйста, и я сделаю это.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2010

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

Ответ, который вы ищете, - «Композиция», поскольку каждый человек получает один и только один пистолет, я думаю, вам лучше указать ссылку (переменную) в классе персонажа для этого оружия.

и вот ваш класс игрока (человека):

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 голосов
/ 05 декабря 2010

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

Например, из основного класса, который вы упомянули, вы можете отправить событие:

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

затем соответствующий экземпляр (body? - не знаете, как у вас все настроено) послушайте:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...