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

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

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

танчики - C++

14.07.2011, 00:02. Просмотров 3547. Ответов 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 Кб, 200 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2011, 00:02     танчики
Посмотрите здесь:

Delphi Игра Танчики
Танчики в Builder C++
C++ Танчики в graphics.h
Игрушка Танчики C++
Танчики на С++ C++/CLI WinForms
C++ Танчики C++
C++ Графическое задание на С++: танчики
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IIIa66uMEM6eP
заставил Бендера
433 / 289 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 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
Форумчанин
Эксперт С++
4470 / 2832 / 224
Регистрация: 12.12.2009
Сообщений: 7,202
Записей в блоге: 1
Завершенные тесты: 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
231 / 204 / 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
17415 / 5653 / 355
Регистрация: 30.03.2009
Сообщений: 15,478
Записей в блоге: 26
14.07.2011, 21:00     танчики #10
Почитай тут (много полезной теории) Создание игры(2d)
Дополнительно не стань заложником того, что случилось с автором по ссылке. Он очень много времени уделил графике, а на игру в итоге забил, потому что логику игры создать ему оказалось не по силам. Попробуй для начала всё-таки реализовать сам механизм игры, пуст танчики хотя бы через ж...у рисуются, но чтобы в это можно было играть. Если сможешь это реализовать - будешь с графикой разбираться
jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
14.07.2011, 21:21  [ТС]     танчики #11
Evg, пасиб большое за ссылочку.

Цитата Сообщение от Evg Посмотреть сообщение
Попробуй для начала всё-таки реализовать сам механизм игры, пуст танчики хотя бы через ж...у рисуются
Боюсь, что этот первый блин таким выше подмеченным комом и получится.:cofee:
Evg
Эксперт CАвтор FAQ
17415 / 5653 / 355
Регистрация: 30.03.2009
Сообщений: 15,478
Записей в блоге: 26
14.07.2011, 21:58     танчики #12
Цитата Сообщение от jonson Посмотреть сообщение
Боюсь, что этот первый блин таким выше подмеченным комом и получится.:cofee:
Можно сделать тупую скучную игру с меганавороченной супер-пупер графикой. А можно сделать очень интересную игру с примитивной кривой графикой. И второй вариант будет рулить. Основное - это логика игры. Если её нет, то браться за графику особого смысла нет. Вернее смысл есть - получение навыков и самообразование, но игры в этом случае не получится
jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
19.08.2011, 20:58  [ТС]     танчики #13
Итак, после продолжительной мозгоизворотливости удалось слепить что-то хоть немного похожее на "танчики".
Теперь осталось немного дополнить окно и добавить объекты и припятствия (кирпичи,бронь,вода, ну и конечно-же свой штаб. короче чтобы сее было похожее на всем известную battle сity )
Следовательно возникает вопрос:
Если к примеру в игре будет 20 уровней, и в каждом уровне примерно, ну пусть 30 объектов. А для каждого уровня естесено над рисовать по разному расположение объектов.
Получаетси надо хранить координаты каждого объекта для каждого уровня? Дык эт аж 600!!!
Или всё-же есть изворотливость поумнее?
зы: выстрел - ноль цифр.
Вложения
Тип файла: rar танчики.rar (512.0 Кб, 97 просмотров)
Kastaneda
Форумчанин
Эксперт С++
4470 / 2832 / 224
Регистрация: 12.12.2009
Сообщений: 7,202
Записей в блоге: 1
Завершенные тесты: 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
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
19.08.2011, 21:32  [ТС]     танчики #15
ага, ясно. Вариант мне нравится. Спасибо Kastaneda.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.08.2011, 08:31     танчики #16
Цитата Сообщение от jonson Посмотреть сообщение
Дык эт аж 600
Не "аж", а всего! 600*sizeof(int) = 2.3 КилоБайта
Для танчиков, действительно, самым простым вариантом будет хранить матрицу, как в примере из предыдущего поста.
А вот в играх с более сложным представлением уровней описание делается в XML, бинарном или ещё каком-то виде (как удобнее разработчику) и эти файлы могут десятки мегабайт занимать. Вот под рукой от Black&White сохранёнка, так там каждый юнит, каждый человечек, каждое дерево в текстовом виде описано; и название и положение и прочие свойства.
Т.е. делать нужно так, как того требуют обстоятельства. Для танчиков проще и удобнее всего будет именно матрица.
Lexa199378
Сообщений: n/a
23.12.2011, 21:28     танчики #17
jonson, очень бы хотелось посмотреть на полный исходник игры
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 10:08     танчики
Еще ссылки по теме:

Игра танчики Lazarus
C++ Танчики
C++ Реализовать функцию стрельбы для танка (игра "Танчики")

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

Или воспользуйтесь поиском по форуму:
дерево
Сообщений: n/a
24.10.2012, 10:08     танчики #18
jonson, можешь выложить исходники плиз
Yandex
Объявления
24.10.2012, 10:08     танчики
Ответ Создать тему
Опции темы

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