Войти
ПрограммированиеФорумОбщее

Вопрос по void [Java, android]

Страницы: 1 2 Следующая »
#0
12:23, 17 дек. 2013

Всем привет!
Хочу задать вопрос по Яве...написал такой вот код для шарика арканоида

public void lineCollision(int t, Ball ball, float x1, float y1, float x2, float y2) {
    float cx = ball.getPosX() + 4;
    float cy = ball.getPosY() + 4;
    int rad = 4;
    if(FrameMath.CircleIntersect(cx, cy, rad, x1, y1, x2, y2)) {
      ball.setReflect(t);
      crossx = FrameMath.CircleIntersectX(cx, cy, 4, x1, y1, x2, y2);
      crossy = FrameMath.CircleIntersectY(cx, cy, 4, x1, y1, x2, y2);
    }
  }
Код возвращает координаты проекции центра шарика для дальнейшей обработки столкновения.

Чтобы не вникать в подробности, упрощу его до сути вопроса:

public void lineCollision(int t, Ball ball) {
ball.setReflect(t);
}

Теперь мне нужно использовать точно такой же код для другого объекта:

public void lineCollision(int t, Class obj) {
obj.setReflect(t);
}

Т.е. в коде меняется лишь переменная, можно ли написать void таким образом, чтобы можно было бы использовать его как ball, так и с obj, а может быть и с другими объектами?


#1
15:48, 17 дек. 2013

Что значит void написать?

#2
16:03, 17 дек. 2013

Автор мне кажется из С++ void* имел ввиду.
Ну мне кажется можно сделать базовый класс с этим методом а затем наследовать от него другие  объекты.И в методе сделать прием базового класса, тогда ты сможешь туда подавать все произвольные классы и вызывать этот метод.Второй вариант, я точно не знаю сработает ли, но можно в методе который принимает объект написать базовый Object, а в методе уже определять что за тип, делать приведение типа, и вызывать метод. 

PS.Если не понял приведу пример.

#3
16:10, 17 дек. 2013

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

В jave тоже есть void методы, это не с++ :)) Но и кстати языки похожи.

PS.Если не понял приведу пример.

Приведите пожалуйста пример с базовым объектом...думал в эту сторону, но реализовать не смог. А еще процитирую свои слова из другого форума, по-моему хорошо отражает суть моей проблемы
например есть у меня класс World - уровень
На уровне есть кирпич, игроки и монстры (используются разные классы без унаследований)

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

Я так понимаю что в классе каждого объекта нужно создать переменную isCollision и присваивать в эту переменную true.
А дальше у объектов, в которые переменная isCollision = true производить действие.

Но как мне менять значение переменной, если используются разные класс? Писать отдельные методы для каждого класса?
Разъясните этот момент, уже 2й день голову ломаю из-за этих классов...
Пока у меня был только игрок с кирпичами, все было хорошо...был один метод, куда я передавал игрока и там проверял наличие пересечения с кирпичом....а теперь мне нужно написать точно такой же метод, только вместо игрока указывать монстров....но так будет как то не эстетично и больше похоже на быдло-код.

#4
18:33, 17 дек. 2013

Вот пример :
Базовый класс

public class BasicClass {
    int i;
    public BasicClass() {

    }
    void setI(int i) {
        this.i = i;
    }
}

Произвольный класс 1

public class Class1 extends BasicClass {
    public Class1() {

    }
    public void someMethod() {
        System.out.println(this.i);
    }
}

Произвольный класс 2

public class Class2 extends BasicClass {
    public Class2() {

    }
    public void anotherMethod() {
        System.out.println(this.i);
    }

}
Main
public class Main {
        public static void main(String[] argv) {
             Class1 class1 = new Class1();
             Class2 class2 = new Class2();
             setObjectValue(class1,1);
             setObjectValue(class2,2);
            class1.someMethod();
            class2.anotherMethod();
        }
    public static void setObjectValue(BasicClass object,int value) {
          object.setI(value);
    }
}
#5
18:36, 17 дек. 2013

m210
> В jave тоже есть void методы, это не с++ :)) Но и кстати языки похожи
Я знаю про void методы,я имел ввиду что можно любой объект сложить в void*;

SomeClass class;
SomeClass2 class2;
Можно в него положить указатель на тот и на тот.
void* asd;

asd = &class; или
asd = &class2;

#6
19:17, 17 дек. 2013

Спасибо, буду изучать, разбираться :)

#7
19:38, 17 дек. 2013

Дам классический совет: почитай книгу по программированию, любую.

#8
20:55, 17 дек. 2013

ну как минимум полторы книги по программированию я прочитал, но Java...а также как и с++ я знаю плохо...про наследования как то много я понять не смог.
Но с другой стороны, посмотрите, каких успехов я добился при программировании в скриптах: http://m210.duke4.net/ - проект BloodCM

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

Конкретно унаследование, абстрактные методы и интерфейсы мне менее понятны, но до этого момента я обходился и без них.

#9
1:40, 18 дек. 2013

m210
> перебираюсь на языки более высокого уровня.
Это какие? Haskell/Ruby/Clojure/OCaml?  :)

#10
9:01, 18 дек. 2013

Ну а что, по сравнению со скриптами яву нельзя назвать более высоким уровнем? :)

Кстати применил пример кода Edisoni Какраз то что нужно было, еще раз спасибо)) теперь помимо шара, с кирпичами могут сталкиваться и осколки от кирпичей :))

#11
10:19, 18 дек. 2013

m210
> Edisoni Какраз то что нужно было, еще раз спасибо))
Рад был помочь

#12
13:03, 18 дек. 2013

Edisoni
Только в этом случае лучше использовать интерфейс.

#13
17:26, 18 дек. 2013

m210
> Ну а что, по сравнению со скриптами яву нельзя назвать более высоким уровнем? :)
Неа. Жаба - более низкий уровень, С++ - ещё ниже.
Тут "выше" - не значит круче. Наоборот.

#14
0:51, 19 дек. 2013

А как в C++ нельзя...? Generic Methods... обобщенное программирование.

public <T> void lineCollision(int t, T obj)
{
    obj.setReflect(t);
}

Mephistopheles
> Только в этом случае лучше использовать интерфейс.
В C++ не лучше, виртуальное наследование замедляет код :) Думаю в Java тоже такое есть.

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.