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

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

12.05.2009, 21:08. Показов 100317. Ответов 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
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
14.05.2009, 23:23  [ТС]
Студворк — интернет-сервис помощи студентам
А детально можешь объяснить что происходит при твоём GPoint а то я понять не могу )

Добавлено через 12 минут 26 секунд
Точнее как мне из неё угол извлечеть,вот чего я так и не понял)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
14.05.2009, 23:34
Цитата Сообщение от Otaka Посмотреть сообщение
Вот теперь я понял, что ты хочешь сделать.
Лови проект. Курсор не оставляет следа. Я проверил.
Но прорисовка заднего фона должна идти не так. Потом обьясню.
А махинация с задним фоном оно для чего? Для того, чтобы не заморачиваться с тем, чтобы сохранять позицию под курсором и потом восстанавливать при уходе мыши на другую позицию?

А вообще, все игры делают так, что текущее состояние с нуля перерисовывают? А то мне почему-то казалось, что перерисовывают только изменённые участки, хотя если вот так подумать, то перерисовывать с нуля проще
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
15.05.2009, 08:09
Да рисовать с нуля гораааааааздо проще. Да и мышь ничем не отличается от персонажа, или объекта фона. Вся картинка доллжна перерисовываться раз 30-60 в секунду, в задний буффер, а потом на экран, ничего тогда не будет моргать, и все будет рисоваться как надо без того, чтобы задумываться о перерисовке изменившихся частей.
KTYJIX, ты еще забыл о том, что твой сталкер будет двигать весь фон. Надо еще организовать смещение фона. Хотя если предположить, что персонаж будет всегда в центре экрана, то StPosX и StPosY и будут смещение фона, но тогданадо немного иенять процедуры отрисовки персонажа и отсчета мыши.


GPoint stalk(StPosX+63,StPosY+57);
GPoint Mouse(MouseX,MouseY);
float angle=stlak.Polar(Mouse)/M_RAD_CONV;
0
 Аватар для KoFeMaH
38 / 24 / 4
Регистрация: 21.02.2009
Сообщений: 249
15.05.2009, 08:29
Ребят насколько я помню при работе с изображением чтобы ничего не моргало при там увеличении или других работах с ним нужно прописать в с создании формы DoubleBuffered=true;
1
Программист TH
 Аватар для DanUnited
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
15.05.2009, 13:03
Ребят насколько я помню при работе с изображением чтобы ничего не моргало при там увеличении или других работах с ним нужно прописать в с создании формы DoubleBuffered=true;
<...>...прописываемого в onCreateForm-ы...и всё будет ок.
1
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
15.05.2009, 19:08
Так это ведь для работы с компонентами, или при перерисовке по OnPaint. А при рисованию по таймеру, мне кажется, это дело не поможет. А даже если и поможет, не так уж сложно смастерить свой буффер. Если надо, его и анализировать проще ScanLine ом, и например если делать самому вывод с альфамаской, то самое оно. А VCL doublebuffer, мне не нравится. Всегда без него обходился.
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
15.05.2009, 21:13  [ТС]
C++
1
float angle=stalk.Polar(Mouse)/M_RAD_CONV;
[BCC32 Error] Unit1.cpp(156): E2034 Cannot convert 'GPoint' to 'GPoint *'
[BCC32 Error] Unit1.cpp(156): E2342 Type mismatch in parameter 'p' (wanted 'GPoint *', got 'GPoint')
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
15.05.2009, 21:20

:'(
C++
1
float angle=stalk.Polar(&Mouse)/M_RAD_CONV;
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
15.05.2009, 22:23  [ТС]
Я тебя понял XD

Учу матчасть (:
0
 Аватар для KoFeMaH
38 / 24 / 4
Регистрация: 21.02.2009
Сообщений: 249
15.05.2009, 22:52
кстати ребят у вас там адрес картинок прописан так что он будет читать только из папки по этому адресу.если перенесешь игру в другое место будет долго ругаться нехорошими словами) поэтому лучше адрес написать такой
C++
1
2
3
".\\pointer.bmp"
".\\BG.bmp"
".\\Stalker.bmp"
Тогда он будет их читать из папки с exe программы
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
15.05.2009, 23:10  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
GPoint stalk(StPosX+63,StPosY+57);
GPoint Mouse(MouseX,MouseY);
float angle=stalk.Polar(&Mouse)/M_RAD_CONV;
 
RotateDC(BG->Canvas->Handle,angle);
SetViewportOrgEx(BG->Canvas->Handle,StPosX+63,StPosY+57,NULL);
RotateDC(BG->Canvas->Handle,angle);
BG->Canvas->Draw(StPosX,StPosY,Stalker);
SetViewportOrgEx(BG->Canvas->Handle,0,0,NULL);
RotateDC(BG->Canvas->Handle,0);
 
Form1->Canvas->Draw(0,0,BG);   //И рисуем все на экран
Всёравно по своей оси он вращаться не хочет,врощаеться вообще не пойми по какой, и деление на 2 тож не помогает
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
15.05.2009, 23:39
Цитата Сообщение от KoFeMaH Посмотреть сообщение
кстати ребят у вас там адрес картинок прописан так что он будет читать только из папки по этому адресу.если перенесешь игру в другое место будет долго ругаться нехорошими словами) поэтому лучше адрес написать такой
C++
1
2
3
".\\pointer.bmp"
".\\BG.bmp"
".\\Stalker.bmp"
Тогда он будет их читать из папки с exe программы
И сделать контроль того, что файл открылся. В противном случае всё очень сильно и фатально порастает
0
 Аватар для KoFeMaH
38 / 24 / 4
Регистрация: 21.02.2009
Сообщений: 249
16.05.2009, 11:52
Сижу долбаю код игры.Ктулх ты исправил то что он у тебя крутится как сумашедший?И кстати если он у тебяповарачивается с помощью мышки то зачем на нажатие клавиш A D события?Кстати изменил в коде

SetViewportOrgEx(BG->Canvas->Handle,StPosX,StPosY,NULL);
RotateDC(BG->Canvas->Handle,angle);
вот эту строку BG->Canvas->Draw(40-StPosX,40-StPosY,Stalker);
и он перестал двигаться а стоит на месте и крутится
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
16.05.2009, 13:24  [ТС]
Так парни поздравляю,у нас почти получилось крутить его вокруг своей оси,вот проэкт он сдесь нормально крутиться за мышкой(ток с небольшим отклонением почему то).

Следующая цель завставить его нормально двигаться,просто если во время вращения начать движение опять какаято фигня происходит.

И кстати если он у тебя поварачивается с помощью мышки то зачем на нажатие клавиш A D события?
Re:посмотри как это реализованно в флеш игре (ссылка в шапке).
Вложения
Тип файла: rar Svalker.rar (201.8 Кб, 197 просмотров)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
16.05.2009, 14:20
Я плачу. Я же столько раз это повтрял. После смещения стартовой точки, больше не нужно рисовать объект по его истинному положению. Надо рисовать по 0,0(а если исходная точка = центру рисунка, то -PicWidth/2 -PicHeight/2);
Я тебе все исправил.

Но для начала в качестве рисунка персонажа ведь у тебя какое-то непонятное создание, так ты его поверни под 90 градусов, чтобы он смотрел влево. В архиве бери.

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
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TPoint mp=Form1->ScreenToClient(Mouse->CursorPos);
int MouseX=mp.x;
int MouseY=mp.y;
BG->Canvas->Draw(0,0,CH);
//BG->Canvas->Draw(500,0,CH);
/*Canvas->Pen->Width = 1;
Canvas->Pen->Color = clBlack;  */
if (IsRightDown == true) {
   StPosX = StPosX+speed;
}
if (IsLeftDown == true) {
   StPosX = StPosX-speed;
}
if (IsDownDown == true) {
   StPosY = StPosY+speed;
}
if (IsUpDown == true) {
   StPosY = StPosY-speed;
}
GPoint stalk(StPosX,StPosY); //И тут смещения никакие не нужны, а просто координаты
GPoint Mouse(MouseX,MouseY);
float angle=stalk.Polar(&Mouse)/M_RAD_CONV;
 
RotateDC(BG->Canvas->Handle,angle);
SetViewportOrgEx(BG->Canvas->Handle,StPosX,StPosY,NULL);
BG->Canvas->Draw(-1*Stalker->Width/2,-1*Stalker->Height/2,Stalker);
SetViewportOrgEx(BG->Canvas->Handle,0,0,NULL);
RotateDC(BG->Canvas->Handle,0);
 
BG->Canvas->Draw(MouseX-15,MouseY-15,cross);//Курсор рисуем в конце
Form1->Canvas->Draw(0,0,BG);   //И рисуем все на экран
}
Вложения
Тип файла: rar Stalker.rar (4.7 Кб, 144 просмотров)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
16.05.2009, 14:24
КОгда оно наконец заработает как надо - покажи хотя бы что получилось
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
16.05.2009, 16:07
А отклонения у тебя были,потому что ты неправильно брал точку отсчета
Ты брал вот такую:
C++
1
GPoint stalk(StPosX+63,StPosY+57);
Что в результате выходит как самая правая нижняя точка. А надо брать:
C++
1
GPoint stalk(StPosX,StPosY);
Добавлено через 1 час 42 минуты 2 секунды
Цитата Сообщение от Otaka Посмотреть сообщение
Но для начала в качестве рисунка персонажа ведь у тебя какое-то непонятное создание, так ты его поверни под 90 градусов, чтобы он смотрел влево. В архиве бери.
Я имел ввиду вправо.
0
Программист TH
 Аватар для DanUnited
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
16.05.2009, 18:50
А откомпилированная версия вашей 2D-зверя есть? Посмотреть хочется, а чёт не компилится...
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
16.05.2009, 19:00
Так это ж пока KTYJIX просто тренируется делать куски из игры. Там пока ничего нету.
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
17.05.2009, 22:33  [ТС]
Otaka,а не будет ли проще организовать поворот за мышкой по векторам?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2009, 22:33
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru