Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2009, 22:43   #11
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

У меня не запускался ни один вариант, но я уже понял почему: в пути к игре не должно быть пробелов...
Переместил папку "tank" в корневой каталог "C:\" и всё работает...

Только у трёхколёсных противников ракеты не срабатывают... Просто пролетают мимо, поверх всего... И надо бы как-то "победу" внедрить...

Цитата:
Сообщение от Ulex Посмотреть сообщение
Если кому будет интересно, могу выложить исходники.
Мне интересно...
Я правда ещё тока учусь и могу многого не понять, но когда-нибудь надеюсь достигнуть такого уровня...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 07.04.2009, 06:26   #12
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Вообще хорошо. Многое предусмотрел. А можно сделать так чтобы и там где враги ты мог менять танк? Если сделаешь то будет просто офигенно!
Shadow_1329 вне форума Ответить с цитированием
Старый 08.04.2009, 18:54   #13
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
А можно сделать так чтобы и там где враги ты мог менять танк?
А это я планировал сделать по бонусу специальному. Всего бонусов восемь штук (их картинки уже зашиты в exe-шник, осталось только код в танк дописать):
1. звёзды - повышение уровня танка (новый уровень даёт увеличение брони на 1 и новый корпус танку, начиная со второго уровня, танк стреляет мощными снарядами с силой==2)
2. лодка - позволяет перемещаться по воде
3. бронебойность - снаряд пробивает стальную стену
4. каска - на время даёт танку неуязвимость
5. бомба - взрывает всех врагов, находящихся на поле
6. заморозка - на время обездвиживает вражеские танки
7. броня для штаба - строит вокруг штаба кирпичную стену
8. жизнь - ну просто +1 к жизням танка

Цитата:
У меня не запускался ни один вариант, но я уже понял почему: в пути к игре не должно быть пробелов...
Переместил папку "tank" в корневой каталог "C:\" и всё работает
Да, действительно. Неправильно командную строку разбираю. Дело в том, что у меня там доморощенная функция разбора командной строки. И, очевидно, она и глючит как раз. Она за разделители параметров принимает символ пробела, а как по другому сделать я не знаю.

Ну и исходники, пока сырые, так как программка в процессе ещё:
Вложения
Тип файла: rar tank.rar (64.3 Кб, 31 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 19.04.2009, 22:46   #14
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию Контроль столкновений ???

Я застрял. Нужна консультация или парочка свежих мыслей.
Казалось бы куда уж проще, проверить столкновение объектов. Не тут то было.
В общем - суть проблемы:

Контроль столкновений на уровне точек. Специально для этого написана функция
MainIntersect (X1_EXT, Y1_EXT, W1_EXT, H1_EXT, KEY1_EXT, OFFBM1_EXT, X2_EXT, Y2_EXT, W2_EXT, H2_EXT, KEY2_EXT, OFFBM2_EXT)
X1_EXT, Y1_EXT - абсолютные координаты первого объекта
W1_EXT, H1_EXT - размеры первого объекта
KEY1_EXT - ключ (в общем неважно пока)
OFFBM1_EXT - адрес битовой маски. Битовая маска - ч/б картинка (чёрный-точка проходимая, белый-точка непроходимая)
Остальные параметры - всё то же самое для второго.
Функция возвращает 1, если произошло пересечение белых точек в битовых масках объектов и 0 в любом другом случае.

При прямолинейном движении объекта всё нормально, проблемы начинаются, когда объект разворачивается и при этом он несимметричный, а вокруг него находятся препятствия сложной формы.
На картинке слева танчик едет вверх, пока не упрётся в стену. На этом этапе метод контроля работает замечательно. Но на картинке справа танчик разворачивается налево и при этом залазит частью гусеницы в стену, и по моему методу больше двигаться налево не может, хотя впереди у него путь чист...???
Изображения
Тип файла: bmp forhelp.bmp (15.6 Кб, 167 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 20.04.2009, 05:49   #15
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Я конечно не знаю ассемблер, но мож при повороте тебе уменьшать координату по вертикали у танка? Или попросту уменьшить боковые стороны танка.
Shadow_1329 вне форума Ответить с цитированием
Старый 20.04.2009, 20:24   #16
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

На мой взгляд коллизию можно не усложнять. Просто представить танк в виде простой формы (прямоугольник, квадрат) и обрабатывать столкновение с ней
Сейчас я занимаюсь разработкой движка для своей будующей игры, и недавно сделал в ней коллизию по координатам.Вот функция определения столкновения по координатам (это Delphi(я в ассемблере ничего не понимаю))
Код:
Function CoordsCollision(X1,X2,Xpix:integer;Y1,Y2,Xpix2:integer):integer;
{Параметры:
X1,Y1 - координаты квадрата 1
X2,Y2 - координаты квадрата 2
Xpix - ширина квадрата 1
Xpix2 - ширина квадрата 2


Возвращаемые значения:
1 - пересечение по оси X
2 - пересечение по оси Y
3 - пересечения по X и Y (столкновение)
0 - нет пересечкний и столкновений
}
begin
Result:=0;
if (X1+Xpix>X2) and (X1<X2+Xpix) then Result:=2;
if (Y1+Xpix2>Y2) and (Y1<Y2+Xpix2) then Result:=1;
if (X1+Xpix>X2) and (X1<X2+Xpix) and (Y1+Xpix2>Y2) and (Y1<Y2+Xpix2)  then Result:=3;
end;
Вот использование в игре(Управление клавишами 8,4,5,6(те клавиши, которые рядом со стрелками))

Код:
if CoordsCollision(Player.Xpos,Player2.Xpos,50,Player.Ypos,Player2.Ypos,50)=3 then Player.DestroyChar;
В примере целью является убегание от человечка. Если он добежит до тебя, то сработает коллизия, и ты исчезнешь(чтоб заново появиться нажми p)
Вложения
Тип файла: rar Пример.rar (222.9 Кб, 26 просмотров)

Последний раз редактировалось Вадим Буренков; 20.04.2009 в 21:02.
Вадим Буренков вне форума Ответить с цитированием
Старый 21.04.2009, 04:00   #17
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

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

Цитата:
Или попросту уменьшить боковые стороны танка.
А это неправильно. Получается что я подгоняю свойства объекта под свой метод

Цитата:
Просто представить танк в виде простой формы (прямоугольник, квадрат) и обрабатывать столкновение с ней
Слишком жёстко. В общем-то моя функция умеет контролировать столкновения по прямоугольникам. Если ей вместо указателей на битовые маски (или вместо одного из указателей) передать ноль, то проверка будет произведена на предмет пересечения прямоугольников (или одного прямоугольника с битовой маской). Но я хочу чтобы и на уровне точек метод контроля работал адекватно.
Вот к примеру если проверять только по прямоугольникам, то тут вас уже убили бы:
Изображения
Тип файла: bmp forhelp2.bmp (5.2 Кб, 160 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 21.04.2009, 04:32   #18
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Я так понимаю, проблема возникает только при повороте танка..?

Может проверять столкновение до поворота, и если сталкиваются - просто запрещать поворот?
Хотя тогда при сильно сложных формах можно будет напрочь застрять (как во многих старых "плоских" играх - например Jazz Jackrabbit 2)...

Цитата:
Проблема ещё усложняется тем, что я не знаю где именно произошло столкновение, а от этого как раз и зависит куда бы мне толкнуть объект.
Может попробовать смещать танк в сторону обратную его движению?
По одному пикселю до тех пор пока он не перестанет сталкиваться.....
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 21.04.2009, 13:45   #19
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Вот к примеру если проверять только по прямоугольникам, то тут вас уже убили бы:
В таких случаях я использую специальную программу, написанную мной.
В ней я как-бы разбиваю сложное изображение на несколько простых(прямоугольник, квадрат), и обрабатываю их совместно.
Изображения
Тип файла: bmp Пример.bmp (5.2 Кб, 158 просмотров)
Вадим Буренков вне форума Ответить с цитированием
Старый 21.04.2009, 21:33   #20
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Может попробовать смещать танк в сторону обратную его движению?
По одному пикселю до тех пор пока он не перестанет сталкиваться.....
В том то и дело, что просто в сторону обратную движению - нельзя, т.е. это не всегда правильное направление корректировки позиции объекта.
Опять таки на примере. Танк едет вверх по над стеночкой. И если он повернётся направо, то толкать его надо в сторону обратную его новому напрвлению. Если же он повернётся налево, то толкать надо в направлении нового его курса.
Изображения
Тип файла: bmp forhelp3.bmp (17.7 Кб, 153 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах mihali4 Свободное общение 1 17.01.2009 01:43
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49