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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 00:16   #11
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Отпишу по этой заготовке:
Что мне не понравилось в коде :
1.какие-то числа, много разных, лучше их вынести константы(например, 367и 220) или поля структур (например, 4 из расчета новых координат переменной cld , это , надеюсь не чистая копипаста из примера про облака ??), или рассчитывать (например, граничные 210 и 368 - основываются на 367 и 220, т.е. ширине и высоте)
2. куча ифов, где кейсы надо, хотя и тут можно логику пересмотреть и упростить так, чтобы Вам самому, в первую очередь, понятно было
3. прога неустанно жрет ресурсы - пули создают битмап но не уничтожают его, если пули ещё не уничтожены соответствующей процедурой, то они не освобождаются (пример - закрыли прогу быстрее чем пуля долетела до края), сам битмап игрока тоже не особождается; из этой же оперы - битмап игрока грузится постоянно из файла - Вы так и не сделали централизованное хранилище графики (да хотя бы переменные tbitmap для всех картинок, их загрузку на формкреэйт и освобождение на формдестрой), он позволит задавать графику простым копированием ссылки : igrok.bmp := graphicsarray[gigrok]; bullet.bmp := graphicsarray[gbullet];
4. три ненужных таймера - вполне можно обойтись и одним (совет - выкиньте таймеры, процедуры с которыми они были ассоциированы назовите как-нибудь понятно и в единственном таймере поставьте вызов их всех трех)
5. тут уже к логике вопрос - чувак бегает по 8 направлениям а стреляет только по 4 - нестыковочка ))

понравилось : сразу написана двойная буферизация (не свойство формы, а рисование в памяти и 1 раз вывод на канву)
не знаю насчет работы со списком пуль - если сработали хоть частично сами - то молодец ))
phomm вне форума Ответить с цитированием
Старый 29.09.2011, 07:51   #12
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Отпишу по этой заготовке:
Что мне не понравилось в коде :
1.какие-то числа, много разных, лучше их вынести константы(например, 367и 220) или поля структур (например, 4 из расчета новых координат переменной cld , это , надеюсь не чистая копипаста из примера про облака ??), или рассчитывать (например, граничные 210 и 368 - основываются на 367 и 220, т.е. ширине и высоте)
2. куча ифов, где кейсы надо, хотя и тут можно логику пересмотреть и упростить так, чтобы Вам самому, в первую очередь, понятно было
3. прога неустанно жрет ресурсы - пули создают битмап но не уничтожают его, если пули ещё не уничтожены соответствующей процедурой, то они не освобождаются (пример - закрыли прогу быстрее чем пуля долетела до края), сам битмап игрока тоже не особождается; из этой же оперы - битмап игрока грузится постоянно из файла - Вы так и не сделали централизованное хранилище графики (да хотя бы переменные tbitmap для всех картинок, их загрузку на формкреэйт и освобождение на формдестрой), он позволит задавать графику простым копированием ссылки : igrok.bmp := graphicsarray[gigrok]; bullet.bmp := graphicsarray[gbullet];
4. три ненужных таймера - вполне можно обойтись и одним (совет - выкиньте таймеры, процедуры с которыми они были ассоциированы назовите как-нибудь понятно и в единственном таймере поставьте вызов их всех трех)
5. тут уже к логике вопрос - чувак бегает по 8 направлениям а стреляет только по 4 - нестыковочка ))

понравилось : сразу написана двойная буферизация (не свойство формы, а рисование в памяти и 1 раз вывод на канву)
не знаю насчет работы со списком пуль - если сработали хоть частично сами - то молодец ))
Не копипастил, а сидел разбирался, правда Хоть и не все покачто понел (например значение функции dispose() ), но разберусь еще Что насчет беготни в 8 направлений а стрельба на 4, все очень просто, сейчас покачто игроку можно бегать в 8 направлений, но потом сделаю только 4 направления
Что насчет с битмапами и их выгрузкой, приму к сведению Таймеры тоже пересмотрю. Что насчет if'ов переделаю их на case (Или можно проще?), Вот только вопрос так и остался, как сделать чтобы через определенные обасти игрок пройти не мог, например произвольный Эллипс на image при этом он может двигаться куда ему захочется, и он может быть не один?
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 29.09.2011, 12:40   #13
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Поищи примеры выполнения коллизии - обычно геометрический способ для 2д игр применяется по прямоугольным областям, по треугольникам, по точкам и прямым и другим, можно ещё по цвету, но проблема будет задавать цвета в программе, а потом ведь ещё могут и картинки поменяться... ну а вообще самый прикольный на мой взгляд способ - с помощью масок, но он довольно сложный (там тоже по цветам, только для каждого изображения строится маска, которая рисуется на битмап в памяти, при перекрытии масок получается коллизия объектов)
phomm вне форума Ответить с цитированием
Старый 29.09.2011, 14:14   #14
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Так, исправил баг, который возникал при стрельбе в самом начале до нажатия стрелок. TbitMap теперь загружаются 1 раз в массив при инициализации формы, и дальше на них ссылается уже программа. Также реализовал очистку памяти от этих картинок. Сократил 3 таймера одним

Цитата:
Сообщение от phomm Посмотреть сообщение
Поищи примеры выполнения коллизии - обычно геометрический способ для 2д игр применяется по прямоугольным областям, по треугольникам, по точкам и прямым и другим, можно ещё по цвету, но проблема будет задавать цвета в программе, а потом ведь ещё могут и картинки поменяться... ну а вообще самый прикольный на мой взгляд способ - с помощью масок, но он довольно сложный (там тоже по цветам, только для каждого изображения строится маска, которая рисуется на битмап в памяти, при перекрытии масок получается коллизия объектов)
А вот про коллизии не могу ничего путного найти, может быть у тебя есть примерчик кода?
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 30.09.2011, 08:50   #15
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Поищи примеры коллизии = поиск по форуму по словам коллизия, столкновение:
http://programmersforum.ru/showthread.php?t=160866
http://programmersforum.ru/showthread.php?t=159219
http://programmersforum.ru/showthread.php?t=149414
http://programmersforum.ru/showthread.php?t=148637
http://programmersforum.ru/showthread.php?t=130409
и много других тем, большинство с примерами кода
phomm вне форума Ответить с цитированием
Старый 30.09.2011, 13:20   #16
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Phomm, спасибо.
Я вот посидел подумал, попробовал сделать Класс
Код:
  TPix=Class
  X,y:Real;
   move:Boolean;
  End;
Код:
var  Pixels:array[-30..600,-30..600] of TPix;
Form Create:
Код:
for i:=-30 to 599 do
for j:=-30 to 599 do
begin
Pixels[i,j]:=TPix.Create;
Pixels[i,j].move:=false;
end;
Если Pixels[i,j].move=true, то значит пройти нельзя, если false, то можно.
Попробую при перересовке image определять, проходимость точек.
Каждый день узнаю новое...

Последний раз редактировалось Anton911; 30.09.2011 в 13:52. Причина: Правка сообщения
Anton911 вне форума Ответить с цитированием
Старый 05.10.2011, 12:28   #17
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Что-то забыл отписать тут :
Если Вы делаете так , как написано в коде выше - то гораздо логичнее сделать не класс, а record - тогда не понадобится не создавать, не удалять объекты. Если не планируется на Tpix повешать ещё какую-то функциональность, конечно.

Ну а вообще, сей способ очень хитрый (знаю непонаслышке, сам пишу пиксельный движок) - буду надеяться, у Вас получится реализовать.
Хотел бы посоветовать опять же все числа постараться вынести в константы или ещё куда - гибче будет.
phomm вне форума Ответить с цитированием
Старый 06.10.2011, 16:12   #18
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Не пришлось мне даже создавать класс
просто сделал так Pixels:array[-30..641,-30..442] of integer;
и тут уже можно хранить любые числа
Кстате вот что у меня получилось (Залил архив).

Я там создавал процедуры работы с NPC, научил их стрелять, но много чего надо доделать, коллизии получилось сделать, но я сделал чтобы они работали если юниты враждебны друг к другу, если они союзники то могут и сквозь друг друга ходить И поэтому иногда возникает иллюзия, что в юнит стреляют а у него не отнимается хп. Короче если кому интересно могу исходник выложить.)
Вложения
Тип файла: rar Рисование на Image.rar (2.20 Мб, 48 просмотров)
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 14.10.2011, 15:49   #19
Demi
Пользователь Подтвердите свой е-майл
 
Аватар для Demi
 
Регистрация: 28.03.2007
Сообщений: 52
По умолчанию

Немного пиара и я думаю много пользы автору топика.
Я разрабатываю 2д движок и там есть пример игры, всё в исходниках, посмотри, многое уже реализовано.

http://sites.google.com/site/boxdemi/
GLEngine2D - сайт проекта
FreeRating Cайт нашей команды
Demi вне форума Ответить с цитированием
Старый 14.10.2011, 18:54   #20
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

ухтыблин! классная игруха! =)))
скачал, поиграл, понравилось!
главное - довели до играбельности! это важно.

мне понравился "режим бога" - я когда-нибудь сдохну? ))
и понравился "лазер" - зажать пробел ))

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

но можно сделать два режима - как сейчас или убивать с двух-трех попаданий.
вообщем вижу в этой игрухе потенциал =)
xrob вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игрушка madkot Помощь студентам 2 08.06.2011 19:05
Графика (стрельба из пушки по цели) перевести код с Турбопаскаля в Pascal ABC DANTES68 Помощь студентам 0 07.04.2011 22:27
Игрушка на С/С++ jewel Помощь студентам 2 28.11.2010 23:10
Игрушка Nester Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 15.01.2009 19:02