Суббота, 23 Ноября 2024, 13:03

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Арканоид. Проблема с уничтожением блоков
JerichoДата: Вторник, 12 Января 2016, 17:54 | Сообщение # 1
Ubuntu 11.10 user
Сейчас нет на сайте
Привет работяги. Сел я значит делать простой арканоид. В наличии 4 разных объекта: игрок, шар, блок и стена которая ограничивает уровень. Шар нормально отталкивается от всех поверхностей, Для уничтожения блока нужно 2 столкновения, при первом отталкивание происходит, а втором при втором нет. Собственно вопрос в том как это реализовать или что поправить в скриптах. Ниже привожу код скрипта шара и блока + на всякий случай код платформы игрока. Больше каких либо скриптов в игру нету.

Шар:


Блок:


Игрок:


Уютненькая страничка Ерихона

xxx: Так вы представляете, у него там фрагмент кода в 15 строк повторяется 37 раз. Если вынести в функцию можно сэкономить полтыщи строк!
yyy: это припев.
© Антон Антоненко


Сообщение отредактировал Jericho - Вторник, 12 Января 2016, 17:55
KamiRoninДата: Вторник, 12 Января 2016, 19:27 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Код

void OnCollisionEnter2D(Collision2D collision){
   if (collision.gameObject.tag == "Ball")  // если удар прошел - превращаем в триггер
       gameObject.GetComponent<BoxCollider2D>().isTrigger = true;
  
}

void OnTriggerEnter2D(Collision2D who){
        if(who.gameObject.tag == "Ball")
             // сюда попадем, только когда коллайдер стал триггером, т.е. после ВТОРОГО удара
             Destroy(gameObject);
}


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
JerichoДата: Вторник, 12 Января 2016, 20:03 | Сообщение # 3
Ubuntu 11.10 user
Сейчас нет на сайте
KamiRonin, Увы но после таких изменений столкновение шара с блоком вообще перестало происходить, так же появилась ошибка:

Script error: OnTriggerEnter2D
This message parameter has to be of type: Collider2D


Уютненькая страничка Ерихона

xxx: Так вы представляете, у него там фрагмент кода в 15 строк повторяется 37 раз. Если вынести в функцию можно сэкономить полтыщи строк!
yyy: это припев.
© Антон Антоненко
robertonoДата: Вторник, 12 Января 2016, 20:11 | Сообщение # 4
Чокнутый Кот
Сейчас нет на сайте
Jericho, ну понятно же всё, не на китайском же написано!
наверное тут должно быть Collider2D а не Collision2D
void OnTriggerEnter2D(Collision2D who)
попробуй изменить
JerichoДата: Вторник, 12 Января 2016, 20:19 | Сообщение # 5
Ubuntu 11.10 user
Сейчас нет на сайте
robertono, ошибка пропадает, но столкновения так и не происходят, после 2 прохождений шара блок уничтожается, но как я говорил столкновения так и не появились

Уютненькая страничка Ерихона

xxx: Так вы представляете, у него там фрагмент кода в 15 строк повторяется 37 раз. Если вынести в функцию можно сэкономить полтыщи строк!
yyy: это припев.
© Антон Антоненко
BUFFOMETZДата: Вторник, 12 Января 2016, 21:37 | Сообщение # 6
почетный гость
Сейчас нет на сайте
А, дошло. У тебя блок уничтожается быстрее чем шарик отскакивает.
Может уничтожать не при в ходе, а при выходе тогда?
Код
        void OnTriggerExit2D (Collision2D who) {
                if(who.gameObject.tag == "Ball")
                        Destroy(gameObject);
        }


Сообщение отредактировал BUFFOMETZ - Среда, 13 Января 2016, 12:39
KamiRoninДата: Среда, 13 Января 2016, 00:09 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
мдаа, очепятался я.. ) там действительно void OnTriggerEnter2D(Collider2D who) {...} должен быть..

Цитата Jericho ()
robertono, ошибка пропадает, но столкновения так и не происходят, после 2 прохождений шара блок уничтожается, но как я говорил столкновения так и не появились

Цитата Jericho ()
Для уничтожения блока нужно 2 столкновения, при первом отталкивание происходит, а втором при втором нет.


первый удар шара по блоку = отскок шара
второй (и т.п.) удар по блоку = шар пролетел насквозь блока + блок уничтожился по пути (1) ИЛИ шар отскочил + блок уничтожился (2) ?!??!?

в версии (1) - делаем, как я написал, но с исправлением на Collider2D.. ну и там внутри ОнТриггерЕнтер2Д можно добавить начисление очков и прочее.
в (2) - тогда вообще isTrigger не ставим! просто считаем удары в ОнКоллизионЕнтер2Д и на 2ой удар, уничтожаем с задержкой -- Destroy(gameObject, 0.05f); - тогда физика отработает, шар отскочит, а блок уничтожится после отскока. Наверное в этом был весь вопрос темы smile


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


Сообщение отредактировал KamiRonin - Среда, 13 Января 2016, 00:18
error111Дата: Среда, 13 Января 2016, 09:21 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Господи, да сделай просто дестрой с задержкой в 0.01 секунду. Отскочить шарик успеет, а потом и блок умрет.

[Shmup/RPG] Fantasy Shmup!
JerichoДата: Среда, 13 Января 2016, 17:36 | Сообщение # 9
Ubuntu 11.10 user
Сейчас нет на сайте
KamiRonin, error111, Спасибо, теперь разобрался.

Уютненькая страничка Ерихона

xxx: Так вы представляете, у него там фрагмент кода в 15 строк повторяется 37 раз. Если вынести в функцию можно сэкономить полтыщи строк!
yyy: это припев.
© Антон Антоненко
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг