Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание игры "Шариковый обстрел" (http://www.flasher.ru/forum/showthread.php?t=165597)

Art_133 24.08.2011 20:26

Создание игры "Шариковый обстрел"
 
Необходимо создать игру на подобие этой.
Т.к. играми, до этого, не занимался возникло несколько вопросов:

1. Как рассчитать движение шарика, отпрыгивание от стены и самое главное размещение его в нужную позицию среди остальных шаров?
2. Как отследить момент, когда рядом 3 шара одинакового цвета?

Спасибо.

П.С. Буду рад любой информации, касательно создания данной игры.

gloomyBrain 24.08.2011 20:44

1. создать таблицу. То есть ячейками таблицы будут спрайты, в которые/из которых можно добавлять/удалять шарики.
2. у ячеек таблицы должны быть ссылки на соседей. Когда мы выбрали место (ячейку) в которое попадает наш шарик (то есть уже стрельнули и шарик закончил свое движение), помещаем шарик в нужную ячейку и проверяем ее соседей на предмет:
- наличия шарика
- совпадения цвета шарика в нашей ячейке (куда мы стрельнули) и шарика в соседней ячейке.
Далее, если шарики одного цвета, записываем их в массив. помечаем ячейку-соседа как проверенную. Далее проверяем всех соседей ячейки-соседа. Все шарики, которые находим - заносим в массив. Когда проверка закончена смотрим - если длина массива болше либо равна трем - то лопаем все шарики в массиве. Если меньше - просто чистим массив.

PS
Я такую проверку делал рекурсией.

Art_133 24.08.2011 20:59

Картина прорисовывается.
Интересует след. моменты:
1. Создать таблицу. Что значит создать таблицу? Класс, который будет размещать элементы в нужном порядке? Я так понимаю, это массив спрайтов с пустыми элементами, верно?
2. У ячеек должны быть ссылки на соседей. Как проверить, какая из ячеек является соседней?
3. Помещаем шарик в нужную ячейку. Как выбрать эту нужную ячейку? Как понять, в какую ячейку летит шарик?

dimarik 24.08.2011 21:07

Не совсем массив, скорее связанный список. Модель. Элементарным объектом-ячейкой может быть класс c акцессорами left, right, top, bottom указывающими на соседние ячейки. Он может содержать цвет шарика, бонус, пр. Этим списком кормите визуальный класс Поле, который создает визуальные шарики и кормит их, в свою очередь, каждой конкретной ячейкой.

Art_133 25.08.2011 11:06

Понял, спасибо. Со связным списком разберусь.
Мне не понятно, как определить, в какую ячейку добавлять новый шарик?

gloomyBrain 25.08.2011 11:33

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

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

dimarik 25.08.2011 11:37

Цитата:

Сообщение от Art_133 (Сообщение 1025283)
Понял, спасибо. Со связным списком разберусь.
Мне не понятно, как определить, в какую ячейку добавлять новый шарик?

Чистая математика. Знаем размер ячейки (диаметр шариков), знаем координаты точки и угол запуска шарика-торпеды и находим точку его приземления. Отскоки от стен тоже просчитываются.


Часовой пояс GMT +4, время: 18:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.