Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.96
jonson
232 / 205 / 61
Регистрация: 18.03.2010
Сообщений: 749
#1

танчики - C++

14.07.2011, 00:02. Просмотров 3688. Ответов 17
Метки нет (Все метки)

здравствуйте, решил попробовать сделать подобие денди-танчиков. Ну и только начал - сразу грабли))
Вопрос: Как лучше оформить движение танка?
Мой не правильный подход такой: есть битмап (картинка танчика) 50х50, и координаты относительно его положения в окне. При управлении стрелками, координаты смещаются соответственно направлению на 2 точки, потом картинка перерисовывается, всё это дело работает в интервале 10 м-сек.
Грабли в том, что при перемещении картинка дергается, хоть и отрисовую с двойным буфером.
Кроме того, при перемещении, грузит проц на 30% ))
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
case WM_PAINT:
        hDC = BeginPaint(hWnd, &ps);
        GetWindowRect(hWnd,&rect);
        memDC = CreateCompatibleDC(hDC);
        memDC2= CreateCompatibleDC(hDC);
        com_bmp = CreateCompatibleBitmap(hDC, //com_bmp - совместимый битмап
            GetDeviceCaps(hDC, HORZRES), 
            GetDeviceCaps(hDC, VERTRES));
        
        SelectObject(memDC2,com_bmp);
    
        SelectObject(memDC,Ctank.tank_bmp); // Ctank.tank_bmp - картинка танка 50х50
        
        // Ctank.tank_rect - новые координаты танка относительно окна
        ::BitBlt(memDC2,Ctank.tank_rect.left,Ctank.tank_rect.top,rect.right,
                        rect.bottom, memDC,0,0,SRCCOPY);
        
        // теперь всё на экран
        ::BitBlt(hDC,0,0,rect.right,rect.bottom, memDC2,0,0,SRCCOPY);
 
        DeleteObject(com_bmp);
        DeleteDC(memDC);
        DeleteDC(memDC2);
        EndPaint(hWnd,&ps);
        break;
Любая критика, советы и пропозиции приветствуются с благодарностью ))
Вложения
Тип файла: rar танчики.rar (35.6 Кб, 205 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2011, 00:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос танчики (C++):

Танчики C++ - C++
Здравствуйте! Пишу курсовую. Сроки уже горят. Нужно завтра сдать, а я так и не успел ничего. :cry:Поделитесь, пожалуйста, исходным кодом...

Танчики - C++
Здравствуйте помогите сделать программу типа игры танчики только еще проще чтобы танк тупо катался ко карте без стрельбы и врагов буду...

Танчики в graphics.h - C++
Здравствуйте! Задали задания в устаревшей и совершенно мне неизвестной библиотеке graphics.h создать игру танки. Я уже прописал движение...

Игрушка Танчики - C++
у меня есть 1 свой танк, 2 вражеских. и сейчас если один вражеский попадет в другого вражеского, то подстреленный исчезает и выходит конец...

Графическое задание на С++: танчики - C++
Здравствуйте форумчане, сегодня на практике в универе дали задание, написать программу на С++, в которой должно быть поле, на котором ездят...

Реализовать функцию стрельбы для танка (игра "Танчики") - C++
пожалуйста помогите!! я создал бот танков и танк! я все сделал ддвижение карту. кроме выстрела((( помогите

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IIIa66uMEM6eP
заставил Бендера
435 / 291 / 10
Регистрация: 05.12.2010
Сообщений: 1,645
Записей в блоге: 6
14.07.2011, 18:40 #2
Цитата Сообщение от jonson Посмотреть сообщение
Грабли в том, что при перемещении картинка дергается, хоть и отрисовую с двойным буфером.
Кроме того, при перемещении, грузит проц на 30% ))
теже грабли были у всех пока дум первый не вышел, все офигели от графики которая стала, после применении какой то технологии прорисовки) в какой то книге читал. Помоему Михаили Фленова.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 19:01 #3
У меня ничего не дёргается.

Добавлено через 2 минуты
Как вариант, перекрой WM_ERASE (если правильно событие назвал).
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
14.07.2011, 19:04 #4
Цитата Сообщение от Deviaphan Посмотреть сообщение
У меня ничего не дёргается.
У меня тоже. (Win 7)

Не по теме:

Как-то написал одну программу, там тоже было рисование через двойную буферизацию. Так получилось, что она пошла в люди (соц. сети блинн...), так вот мне потом писали, что у некоторых вообще ни чего не показывало, у кого-то жутко тормозило, а у кого-то все было отлично. Писал тоже на Win API, но проблему так и не решил (я вообще с графикой на "извините, я тут в сторонке постою" ))

Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 19:13 #5
У меня тоже Вин7-х64.
Я тут подумал, там же очень сильно переделан механизм отрисовки. По идее, он более тормознутый. Может потому и не дёргается.)
Kastaneda
14.07.2011, 19:17
  #6

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
У меня тоже Вин7-х64.
Я тут подумал, там же очень сильно переделан механизм отрисовки. По идее, он более тормознутый
Очень сильно тормазнутый!!! GetPixel() с хенделом рабочего стола в качестве аргумента работает нереально медленно. ~1000 вызовов занимает ~20 секунд. Я аж офигел!

Deviaphan
14.07.2011, 19:22
  #7

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
Очень сильно тормазнутый!!! GetPixel() с хенделом рабочего стола в качестве аргумента работает нереально медленно. ~1000 вызовов занимает ~20 секунд. Я аж офигел!
Get/SetPixel и в WinXP тормознутый. Был. Хорошо, что можно с буфером напрямую работать.)
И вообще, для кого DirectX изобретали?

jonson
232 / 205 / 61
Регистрация: 18.03.2010
Сообщений: 749
14.07.2011, 20:45  [ТС] #8
Цитата Сообщение от Deviaphan Посмотреть сообщение
У меня ничего не дёргается.
Как вариант, перекрой WM_ERASE (если правильно событие назвал).
когда вызываю InvalidateRect, последний параметр 0, кроме того есть в оконной процедуре обработчик
C++
1
case WM_ERASEBACKGROUND: return true;
Кстати, я как-то и не подумал попробовать это в ХР(писал в Win7-x32 ), и честно говоря офигел, в семёрке перемещение дёрганное, плюс грузит проц 30-35%, в ХР плавное перемещение картинки, а загрузка CPU 1-2%
Не пойму, почему такие лаги на Win7.О_о

Цитата Сообщение от Deviaphan Посмотреть сообщение
И вообще, для кого DirectX изобретали?
пока с DirectX я на - Вы, да и хочетси повозиться с API и GDI
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 20:51 #9
Цитата Сообщение от jonson Посмотреть сообщение
Не пойму, почему такие лаги на Win7
А ты не создавай контекст и битмап при каждой перерисовке.)
Evg
Эксперт CАвтор FAQ
17627 / 5851 / 376
Регистрация: 30.03.2009
Сообщений: 16,133
Записей в блоге: 26
14.07.2011, 21:00 #10
Почитай тут (много полезной теории) Создание игры(2d)
Дополнительно не стань заложником того, что случилось с автором по ссылке. Он очень много времени уделил графике, а на игру в итоге забил, потому что логику игры создать ему оказалось не по силам. Попробуй для начала всё-таки реализовать сам механизм игры, пуст танчики хотя бы через ж...у рисуются, но чтобы в это можно было играть. Если сможешь это реализовать - будешь с графикой разбираться
jonson
232 / 205 / 61
Регистрация: 18.03.2010
Сообщений: 749
14.07.2011, 21:21  [ТС] #11
Evg, пасиб большое за ссылочку.

Цитата Сообщение от Evg Посмотреть сообщение
Попробуй для начала всё-таки реализовать сам механизм игры, пуст танчики хотя бы через ж...у рисуются
Боюсь, что этот первый блин таким выше подмеченным комом и получится.:cofee:
Evg
Эксперт CАвтор FAQ
17627 / 5851 / 376
Регистрация: 30.03.2009
Сообщений: 16,133
Записей в блоге: 26
14.07.2011, 21:58 #12
Цитата Сообщение от jonson Посмотреть сообщение
Боюсь, что этот первый блин таким выше подмеченным комом и получится.:cofee:
Можно сделать тупую скучную игру с меганавороченной супер-пупер графикой. А можно сделать очень интересную игру с примитивной кривой графикой. И второй вариант будет рулить. Основное - это логика игры. Если её нет, то браться за графику особого смысла нет. Вернее смысл есть - получение навыков и самообразование, но игры в этом случае не получится
jonson
232 / 205 / 61
Регистрация: 18.03.2010
Сообщений: 749
19.08.2011, 20:58  [ТС] #13
Итак, после продолжительной мозгоизворотливости удалось слепить что-то хоть немного похожее на "танчики".
Теперь осталось немного дополнить окно и добавить объекты и припятствия (кирпичи,бронь,вода, ну и конечно-же свой штаб. короче чтобы сее было похожее на всем известную battle сity )
Следовательно возникает вопрос:
Если к примеру в игре будет 20 уровней, и в каждом уровне примерно, ну пусть 30 объектов. А для каждого уровня естесено над рисовать по разному расположение объектов.
Получаетси надо хранить координаты каждого объекта для каждого уровня? Дык эт аж 600!!!
Или всё-же есть изворотливость поумнее?
зы: выстрел - ноль цифр.
Вложения
Тип файла: rar танчики.rar (512.0 Кб, 101 просмотров)
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
19.08.2011, 21:17 #14
Вообще-то в этом деле не силен, но как-то смотрел исходники одной игры, там расположение объектов было в виде символьного массива, т.е. например:
C++
1
2
3
4
char level1[]={"111@@@@@@111
                111@0000@111
                111@0000@111
                111@@@@@@111"};
и так на каждый левел. А потом все просто - считывается массив и строится изображение. Условными знаками обозначается например 1 -вода, @ - кирпич и т.д.
jonson
232 / 205 / 61
Регистрация: 18.03.2010
Сообщений: 749
19.08.2011, 21:32  [ТС] #15
ага, ясно. Вариант мне нравится. Спасибо Kastaneda.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2011, 21:32
Привет! Вот еще темы с ответами:

Игра Танчики - C++
всем доброго дня суток)не могли бы кто подсказать может кто сталкивался уже надо исходник игры танчики на плюсах чёт порылся в нете не...

Танчики на С++ - C++/CLI WinForms
Загорелся идеей реализовать стандартные тетрисовские танчики на с++. Но так как я только начал самообучение с++, то решил обратится за...

Игра Танчики - Delphi
Есть у кого исходник программы Танчики подобно на денди? У меня есть программа, но я кажись по случайки какую-то служебную строчку...

Игра танчики - Lazarus
Нужно приложение танчики в программном продукте Lazarus... Задали курсовую на эту тему, а я пропустил весь курс ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.08.2011, 21:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru