Как сделать набор пользовательских функций доступным для многих других классов? - PullRequest
1 голос
/ 29 июня 2011

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

Я делаю 2D-перспективную платформерную игру на Java, поэтому у меня есть набор функций, которые создают пули.Пример:

public void CreateShot01(x, y, angle, velocity, bulletID, delay){
/*...will do a bunch of stuff ultimately creating a object in the Projectiles[]    
array, which will be drawn on screen from the Board Object/Class*/
}

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

Но как мне ссылаться на эти функции из всех классов, которые в них нуждаются? Я не уверен, что нужно использовать:

-импорт?Похоже, самое логичное решение, но как вы импортируете свои собственные вещи?

- расширяет?AFAIK, это включает в себя суперкласс и перезаписывающие функции, а не то, что мне нужно

Как лучше всего это сделать?

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

Ответы [ 3 ]

4 голосов
/ 29 июня 2011

Попробуйте сопоставить ваши объекты с физической реальностью. Все, что стреляет, возможно, должно наследоваться от абстрактного класса, скажем, AbstractGun, который должен заключать в себе основную идею прицеливания, стрельбы, загрузки и т. Д. Таким образом, эта часть разрешима наследованием. Тогда, если персонажу нужно что-то выстрелить, ему нужно получить объект, похожий на пистолет. Таким образом, эта часть проблемы решается композицией - стрелок не является производным от AbstractGun (он не выполняет отношения «есть»), но должен иметь в своем распоряжении объект, который наследуется от AbstractGun и, таким образом, выполняет «имеет» -a "отношения с оружием.

1 голос
/ 29 июня 2011

Вы путаете термины.

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

Пока вы говорите, это классический пример подклассов ('extends'). Создайте класс "папа", который реализует Shoe (); все ваши объекты, которые стреляют, простираются от этого. Им просто нужно вызвать метод shoot (), чтобы использовать его, не предоставляя другую реализацию (если вы этого не хотите).

Конечно, могут быть проблемы (что произойдет, если есть два метода, и классы, использующие любой из них, не перекрываются?), Но помимо этого вам следует пойти и на расширение основного класса.

Кстати, добавьте тег "домашнее задание"


Добавлено в ответ на комментарии с постера:

Проверка абстрактных классов. Они означают, что они не могут быть созданы (вы не можете сделать их «новыми») и что они могут иметь некоторые абстрактные методы, сигнатуру которых вы знаете (параметры, тип возвращаемого значения), но не обеспечивающие реализацию. У вас могут быть полностью реализованы другие методы.

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

0 голосов
/ 29 июня 2011

Вы ищете абстрактные классы или интерфейсы (инструменты).

Другая вещь, которую вы могли бы сделать вместо «CreateShot01», «CreateShot02» и т. Д., Это:

public void globalShoot (int limit, type? x, type? y, type? angle, type? velocity, type? bulletID, type? delay) {
    for (int i = 0; i < limit; i++) {
        this.wait(delay);
        doShooting(x, y, angle, velocity, bulletID);
    }
}

или что-то в этом роде. :)

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