![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
аккаунт недоступен
Форумчанин
Регистрация: 23.01.2007
Сообщений: 107
|
![]()
Здраствуйте всем! Я сейчас пишу код для арканоида и столкнулся с некоторыми проблемами(я конечно еще достаточно плохо знаком с Делфи, но по моему это все-таки достаточно сложно)
![]() Механизм такой:на форме находятся Shape`ы ((т.е. это и мячик, и планка,и блоки) прим: из соображений того, что если я захочу в последствии сделать красивую графику, то PaintBox приведет в тупик) и взаимодействуют между собой. Но в результате того что пиксел неделим обработка отскоков превращается в сущий кашмар(мяч постоянно куда-нить заежает и т.д. ) Если кто-нибудь уже занимался подобным, или-же знает где найти исходник, может поможете решить некоторые проблемы??? к примеру Как можно более подробно описать перемещение мячика и его отскок ( в основном отскок) не через стандартные Left,Top&Width (т.к. мячик должен характеризоваться не ''квадратом''со сторонами Width и Height, а окружностью) или же Во что объединить блоки(ну там список мало подходит, можно ли созать какой нибудь там динамический массив?) что бы легче было ими управлять?
ввел пароль, который мне не известен
|
![]() |
![]() |
![]() |
#2 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
![]()
Сначало надо решить как мячик будет отскакивать от платформы. В играх которые я видел есть 2 способа:
1) Угол падения равен углу отражения ВСЕГДА. 2) Угол отражения не зависит от угла падения, а зависит от места падения на платформе (чем ближе к краю, тем больше угол отражения(горизонтальнее полетит)). От стенок как правило отскакивает Падение=Отражению. Как вообще мяч передвигаем? Просто приращиваем его координаты: X:=X+kx; Y:=Y+ky; После столкновения со стеной (допустим правой стеной) будет так: X:=X-kx; Y:=Y+ky; Момент столкновения: после каждого перемещения проверяем If X>200 then kx:=-kx; X:=X+k; ... Какие блоки? "Карта" что ли? Можно просто массив задать (обычный) mas: array [1..15,1..20]of byte; Т.к. размер карты в арканоидах как правило фиксированный. Массив можно забивать так: если 0 - пустая клетка, т.е. свободное пространство если 1 - обычный блок если 3 - там бонус какой-то и т.д. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 22.01.2007
Сообщений: 25
|
![]()
Я думаю надо описывать движение мячика прежде всего с математической точки зрения, а потом привязать графическое изображение к математической модели. Таким образом мы, зная скорости мяча (по x и y координатам), положение платформы (или любого другого объекта), можем предсказать все скорости после соударения. Если платформа не будет крутиться, то это всё сведется к простой задаче, которую каждый способен решить.
|
![]() |
![]() |
![]() |
#4 | ||
аккаунт недоступен
Форумчанин
Регистрация: 23.01.2007
Сообщений: 107
|
![]()
Блоками я назвал те самые ''кирпичики'', которые разбивает мячик.
Все формулы типа -- X:=X-kx; Y:=Y+ky -- у меня уже описаны Мяч отскакивает от платформы под разными углами т.к. так интереснее играть. Цитата:
И можно по-подробнее про массив??(как Shape` в массив организовать?) Цитата:
ToYogurt ты там в другой теме спрашивал как сделать движение объекта боллее плавным - так вот у меня в цикле While перемещается платформа за один шаг цикла на 5 пикселей , задана задержка Sleep(8) и в конце изображение объектов на форме обновляется командой Application.ProcesMessages. Вроде перемещается плавно... ![]() p.s. могу попозже выложить код, только там сейчас черт ногу сломит...
ввел пароль, который мне не известен
|
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Арканойд! | MAKEDON | Общие вопросы Delphi | 0 | 05.01.2008 19:10 |