Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/39: Рейтинг темы: голосов - 39, средняя оценка - 4.79
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
1

танчики

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

Author24 — интернет-сервис помощи студентам
здравствуйте, решил попробовать сделать подобие денди-танчиков. Ну и только начал - сразу грабли))
Вопрос: Как лучше оформить движение танка?
Мой не правильный подход такой: есть битмап (картинка танчика) 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 Кб, 248 просмотров)
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2011, 00:02
Ответы с готовыми решениями:

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

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

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

Танчики в graphics.h
Здравствуйте! Задали задания в устаревшей и совершенно мне неизвестной библиотеке graphics.h...

17
заставил Бендера
854 / 319 / 17
Регистрация: 05.12.2010
Сообщений: 1,708
Записей в блоге: 6
14.07.2011, 18:40 2
Цитата Сообщение от jonson Посмотреть сообщение
Грабли в том, что при перемещении картинка дергается, хоть и отрисовую с двойным буфером.
Кроме того, при перемещении, грузит проц на 30% ))
теже грабли были у всех пока дум первый не вышел, все офигели от графики которая стала, после применении какой то технологии прорисовки) в какой то книге читал. Помоему Михаили Фленова.
1
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 19:01 3
У меня ничего не дёргается.

Добавлено через 2 минуты
Как вариант, перекрой WM_ERASE (если правильно событие назвал).
1
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
14.07.2011, 19:04 4
Цитата Сообщение от Deviaphan Посмотреть сообщение
У меня ничего не дёргается.
У меня тоже. (Win 7)

Не по теме:

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

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

Не по теме:

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

1
Deviaphan
14.07.2011, 19:22
  #7

Не по теме:

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

1
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
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
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2011, 20:51 9
Цитата Сообщение от jonson Посмотреть сообщение
Не пойму, почему такие лаги на Win7
А ты не создавай контекст и битмап при каждой перерисовке.)
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.07.2011, 21:00 10
Почитай тут (много полезной теории) Создание игры(2d)
Дополнительно не стань заложником того, что случилось с автором по ссылке. Он очень много времени уделил графике, а на игру в итоге забил, потому что логику игры создать ему оказалось не по силам. Попробуй для начала всё-таки реализовать сам механизм игры, пуст танчики хотя бы через ж...у рисуются, но чтобы в это можно было играть. Если сможешь это реализовать - будешь с графикой разбираться
1
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
14.07.2011, 21:21  [ТС] 11
Evg, пасиб большое за ссылочку.

Цитата Сообщение от Evg Посмотреть сообщение
Попробуй для начала всё-таки реализовать сам механизм игры, пуст танчики хотя бы через ж...у рисуются
Боюсь, что этот первый блин таким выше подмеченным комом и получится.:cofee:
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.07.2011, 21:58 12
Цитата Сообщение от jonson Посмотреть сообщение
Боюсь, что этот первый блин таким выше подмеченным комом и получится.:cofee:
Можно сделать тупую скучную игру с меганавороченной супер-пупер графикой. А можно сделать очень интересную игру с примитивной кривой графикой. И второй вариант будет рулить. Основное - это логика игры. Если её нет, то браться за графику особого смысла нет. Вернее смысл есть - получение навыков и самообразование, но игры в этом случае не получится
1
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
19.08.2011, 20:58  [ТС] 13
Итак, после продолжительной мозгоизворотливости удалось слепить что-то хоть немного похожее на "танчики".
Теперь осталось немного дополнить окно и добавить объекты и припятствия (кирпичи,бронь,вода, ну и конечно-же свой штаб. короче чтобы сее было похожее на всем известную battle сity )
Следовательно возникает вопрос:
Если к примеру в игре будет 20 уровней, и в каждом уровне примерно, ну пусть 30 объектов. А для каждого уровня естесено над рисовать по разному расположение объектов.
Получаетси надо хранить координаты каждого объекта для каждого уровня? Дык эт аж 600!!!
Или всё-же есть изворотливость поумнее?
зы: выстрел - ноль цифр.
Вложения
Тип файла: rar танчики.rar (512.0 Кб, 136 просмотров)
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
19.08.2011, 21:17 14
Вообще-то в этом деле не силен, но как-то смотрел исходники одной игры, там расположение объектов было в виде символьного массива, т.е. например:
C++
1
2
3
4
char level1[]={"111@@@@@@111
                111@0000@111
                111@0000@111
                111@@@@@@111"};
и так на каждый левел. А потом все просто - считывается массив и строится изображение. Условными знаками обозначается например 1 -вода, @ - кирпич и т.д.
1
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
19.08.2011, 21:32  [ТС] 15
ага, ясно. Вариант мне нравится. Спасибо Kastaneda.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.08.2011, 08:31 16
Цитата Сообщение от jonson Посмотреть сообщение
Дык эт аж 600
Не "аж", а всего! 600*sizeof(int) = 2.3 КилоБайта
Для танчиков, действительно, самым простым вариантом будет хранить матрицу, как в примере из предыдущего поста.
А вот в играх с более сложным представлением уровней описание делается в XML, бинарном или ещё каком-то виде (как удобнее разработчику) и эти файлы могут десятки мегабайт занимать. Вот под рукой от Black&White сохранёнка, так там каждый юнит, каждый человечек, каждое дерево в текстовом виде описано; и название и положение и прочие свойства.
Т.е. делать нужно так, как того требуют обстоятельства. Для танчиков проще и удобнее всего будет именно матрица.
1
Lexa199378
23.12.2011, 21:28 17
jonson, очень бы хотелось посмотреть на полный исходник игры
дерево
24.10.2012, 10:08 18
jonson, можешь выложить исходники плиз
24.10.2012, 10:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.10.2012, 10:08
Помогаю со студенческими работами здесь

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

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

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

Танчики на С++
Загорелся идеей реализовать стандартные тетрисовские танчики на с++. Но так как я только начал...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru