Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/516: Рейтинг темы: голосов - 516, средняя оценка - 5.00
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168

Создание игры(2d)

12.05.2009, 21:08. Показов 102418. Ответов 423
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно идея такого создать нечто на подобиe ->
http://www.newgrounds.com/portal/view/494301

Буду сюда задвать свои вопросы,думаю всем кто будет увлечён создание игры тоже будет интресно)

Otaka,этот задний буфер замещает собой background плюс курсор оставляет на неём свои артефакты,как его очищать,да так чтоб ещё и background у нас был.

________________________________________ ________________________________________ _________________________
Основные моменты
Вычисление угла поворота персонажа в зависимости от положения курсора мыши
То же
Поворот изображения(тут еще как смещать точку поворота)
Делаем пули
Все еще непонятки с пулями
Начинаем вычисление коллизий
Идея про то, как это должно быть
Как это должно быть реализовано
Как повернуть массив точек(регион)?
А тут код(в нем есть глюк. Потом есть исправленная версия)
Находим столкновение региона и линии. Исправленная версия столкновения регионов
Как это должно выглядеть в принципе?
Начинается долгое обсуждение того как делать редактор уровней
...
...
Первый вариант редактора
Снова эти пули
Функция которая бьет изображения на мелкие куски(тайлы)
Версия редактора
Загрузка сохранение
Еще версия
4
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2009, 21:08
Ответы с готовыми решениями:

Создание игры
Извините за очередную тему подобного рода, но все же не могу не спросить: Мечтаю о создании игры, пусть и очень простой.. Сейчас для меня...

Создание игры
Доброго времени суток! Лабораторная работа - сделать игру. Есть идея. Нужны любые советы, коментарии, пожелания и критика. Спасибо! ...

Создание игры
Люди есть у кого нибудь исходники игры на подобие игр от ALAWAR, что бы разобрать и поучиться на этом примере? Или подскажите где можно...

423
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
26.05.2009, 17:39
Студворк — интернет-сервис помощи студентам
а ты написал
C++
1
TTList<TBullet*>*bullets;
как член данных формы? или как глобальную переменную на худой конец?

C++
1
2
3
4
5
6
7
class TTList;
class TForm1 : public TForm
{
...
public:
TTList<TBullet*>*bullets;
}
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
26.05.2009, 17:43  [ТС]
Ясен,всё заработало.

C++
1
bullets->Get
Что Get делает?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
26.05.2009, 17:49
Берем элемент по индексу i, и возвращаем его указатель.
C++
1
2
3
4
if(bullets->Get(0)->X>Form1->Width)
{
//удалить пулю 0, так как она вылезла за экран.
}
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
26.05.2009, 18:54  [ТС]
XDDD Когда больной,совсем туплю.
Как движение организовать через X,Y,dX,dY
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
26.05.2009, 20:43
Очень просто.
Создаешь пулю так
C++
1
2
3
4
5
6
TBullet*bul=new TBullet();
bul->X=Позиция Х нашего персонажа.
bul->Y=Позиция Y нашего персонажа.
 
bul->dx=cos(angle)*HodbaSpeed;
bul->dy=sin(angle)*HodbaSpeed;
а движение так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(int i=0;i<bullets->Count;i++)
{
//Перемещаем пули
bullets->Get(i)->X+=bullets->Get(i)->dX;
bullets->Get(i)->Y+=bullets->Get(i)->dY;
 
//Смотрим не вылезли ли они за экран
if((bullets->Get(i)->X>PoleWidth)||(bullets->Get(i)->X<0)||
(bullets->Get(i)->Y>PoleHeight)||(bullets->Get(i)->Y<0)||)//Например мы вылезли за экран
     {
     delete bullets->Get(i);//Очищаем память
     bullets->Delete(i);//Удаляем указатель из списка
     i--;
     }
}
Вот и все.

Добавлено через 34 секунды
Не забудь, что угол должен быть в радианах
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
26.05.2009, 21:17  [ТС]
Слушай вообе мега вопрос

Вот допустим если мы пишем
C++
1
2
3
4
5
6
[+]void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Блаблабла....
....
........
};
И вот слева от Void стоит [+] И если на него нажать,то весь код скрываеться,а как жтот плюс где угодно создавать,а то просто в таймере код громадный и ореинтироваться неудобно)))))))
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
26.05.2009, 21:49
В 6 такого нету. Поэтому не знаю. В Вижуале можно выделить кусок и нажать некую хитрую кнопочку, и создается такая же скрываемая область.

Добавлено через 24 минуты 37 секунд
Чтобы в одной функции код не разростался очень сильно, подели его на отдельные функции. Найди повторяющиеся куски, или куски которые делают приблизительно одинаковые операции, или например обработку пуль вынеси в ProcessBullet, обработку свалкера в ProcessSvalker, и тд. Тогда ничего разростаться не будет. И все сразу станет понятнее. В твоем распоряжении вся мощь ООП - классы. Хорошо бы разбить(произвести декомпозицию) задачи на подзадачи, и устроить управляющие классы. Правда если ты так сходу сядешь без опыта проэктирования, то ничего путнего не выйдет, тут нужен опыт( мне его тоже ооооочень недостает в таких делах).
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
11.06.2009, 00:08  [ТС]
Вопрос назрел. Вот смотри, мы с тобой умеем поворачивать, перемещать картинку,а как насчёт её маштаба?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
11.06.2009, 16:57
StretchBlt рисует в любом масштабе.
В myclasses.cpp там в классе ExtImage есть StretchDrawTo().
Так вот, берешь создаешь TRect r(0,0,картинка->Width*МАСШТАБ,картинка->Height*МАСШТАБ).
А потом
картинка->StretchDrawTo(BG->Canvas->Handle,&r,угол). и таким образом все будет нарисовано под углом.
Наверное, надо бы в реализацию функции внести SetViewportOrg, для того, чтобы поворачивать относительно центра.
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
15.06.2009, 23:44  [ТС]
Как делать сглаживание через GDI+?(после того как я его #Include gdiplus.dll)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
16.06.2009, 15:23
Вот так написано в MSDN:
C++
1
2
3
4
5
6
7
8
9
10
11
12
VOID Example_SetSetSmoothingMode(HDC hdc)
{
   Graphics graphics(hdc);
 
   // Set the smoothing mode to SmoothingModeHighSpeed, and fill an ellipse.
   graphics.SetSmoothingMode(SmoothingModeHighSpeed);
   graphics.FillEllipse(&SolidBrush(Color(255, 0, 0, 0)), 0, 0, 200, 100);
 
   // Set the smoothing mode to SmoothingModeHighQuality, and fill an ellipse.
   graphics.SetSmoothingMode(SmoothingModeHighQuality);
   graphics.FillEllipse(&SolidBrush(Color(255, 0, 0, 0)), 200, 0, 200, 100);
}
Ты это хотел узнать?
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
16.06.2009, 20:02  [ТС]
А чтоб GDI+ можно?) И как твой способ использовать?)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
16.06.2009, 20:45
Чет не понял. Graphics graphics(hdc) - это же из Gdi+, разве нет? Какой способ?
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
16.06.2009, 22:22  [ТС]
Как это код использовать для отдельны компонентов,допустим я хочу ,чтоб у меня гг был сглаженый мне сделать так?
C++
1
Example_SetSetSmoothingMode(ГГ)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
16.06.2009, 22:29
Даже и не знаю. Готовый компонент может и нельзя заставить сглаживаться, а может и можно. хз.
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
17.06.2009, 19:34  [ТС]
Я тут написал проверку его местоположения,чтоб он с объектами сталкивался.
А вот что делать если, он повернут я не знаю?(просто мой код подходит, если он имеет градус 0,90,180,270)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void Move()
{
//Обозначим переменные ближайшего объекта
int Xd = 170;
int Yd = 180;
int Xm = 356;
int Ym = 375;
int Xsmesh = Stalker->Width/2;
//Проверяем не сталкнёться ли ГГ с объектом
if (IsRightDown == true){
if (StPosX+speed>Xd && StPosX<Xm && StPosY>Yd && StPosY<Ym){}
else{
//если нет двигаем его
   StPosX += speed;
   StPosMinusX+= speed;
    }
}
if (IsLeftDown == true){
   if (StPosX-speed<Xm && StPosX>Xd && StPosY>Yd && StPosY<Ym){}
   else{
   StPosX -= speed;
   StPosMinusX -= speed;
  }
}
if (IsDownDown == true){
   if (StPosX>Xd && StPosX<Xm && StPosY+speed>Yd && StPosY<Ym){}
   else{
   StPosY += speed;
   StPosMinusY   += speed;
   }
}
if (IsUpDown == true) {
   if (StPosX>Xd && StPosX<Xm && StPosY-speed<Ym && StPosY>Yd){}
   else{
   StPosY -= speed;
   StPosMinusY  -= speed;
   }
}
}
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
17.06.2009, 19:46
А ты делай не так.
Предположим, что у тебя есть Rect(прямоугольник) твоего перса и все Rectы препятствий. Берешь, на основе поворота вычисляешь будущее положение персонажа и создаешь новый TRect tempPos. Потом в цикле смотришь, не сталкивается ли этот tempRect с различными объектами, если сталкивается, значит никуда не идем, а стоим на месте. Если ни одного столкновения не обнаружено, то позиция нашего персонажа становится такой же как и в tempPos. Пересечение Ректов - Апи функция IntersectRect. Способ универсальный, должен работать.
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
17.06.2009, 20:01  [ТС]
А как это в коде выглядит написать можешь,если влом не пиши сам попробую)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
17.06.2009, 20:20
Создаешь рект
C++
1
TRect tp(StalkerPosX-10,StalkerPosY-10,StalkerPosX+10,StalkerPosY+10);//Предполагаю, что перс - квадратик 20*20
Определяем координаты нового положения.
C++
1
2
int ndx=cos(StalkerAngle)*Stalker_Speed;
int ndy=sin(StalkerAngle)*Stalker_Speed;
Смещаем наш прямоугольник с персонажем в его типа будущую позицию:
C++
1
2
3
4
tp.Left+=dx;
tp.Right+=dx;
tp.Top+=dy;
tp.Bottom+=dy;
Все, желаемые координаты получены. Вычисляем коллизии:
Я предполагаю, что препятствия находятся в массиве TRect Prep[PrepCol];
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TRect intRect;//Никому не надо, но функция пересечения требует.
bool Finded=false;//Мі еще ни с чем не столкнулись
for(int i=0;i<PrepCol;i++)
     {
     if(IntersectRect(&intRect,&tp,&Prep[i]))
            {
            Finded=true;//Нашли столкновение
            break;
            }
     }
if(Finded==false)
     {
     stalkerPosX=tp.Left+10;
     stalkerPosY=tp.Top+10;
     }
Вроде бы ничего не забыл.

Добавлено через 1 минуту 15 секунд
Враги, кстати, это тоже препятствия, поэтому ты их тоже обрабатывай.

Добавлено через 4 минуты 40 секунд
Враги тоже должны делать такие же обработки. Поэтому лучше всего, если ты сделаеш,к примеру, класс CPeople в нем реализуешь такие вот функции как хождение, рисование себя на экране и тд, а потом наследуй от него несколько классов CHunter(это типа игрок), CZombie1, CZombie2, CSupperZombie(это если ты хочешь, чтобы были немного разные враги: обычные, главари...) и тд.
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
17.06.2009, 21:30  [ТС]
А каким образом это будет работать в таком случае?
Изображения
 
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2009, 21:30

Создание игры
Здравствуйте форумчане, мой вопрос состоит в том. Я молодой парень, который знает языки C++, C# и т.д. Ести небольшой интерес к созданию...

Создание игры
Добрый вечер. Начал работу над собственным проектом, и задался вопросом. (gamedev и прочие сайты перечитывал, но так ответа и не нашел....

Создание игры
Посмотрел как сейчас на коленке люди клепают инди игры под андроид\иос e.t.c. Созрел вопрос - куда двинуть, что использовать чтобы написать...

Создание игры на C++
Скажите , а можно ли создавать игры на С++? Если да , то буду рад увидеть примеры как это все реализовать и где можно. Возможно это С++...

Создание 3д игры
Извиняюсь, если такая тема уже была, не нашел. Хочу написать свою игрушку. Игрушка по типу что то gta sa. Но со своим смыслом и тп. Я готов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru