Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Одновременное выполнение нескольких функций. Как?


Автор: Spirit87 4.5.2006, 08:39
Вем привет.
Я должен написать игру типа "сквош".  Это такая игра, где вы видите две ракетки в виде прямоугольников (одна ваша, другая CPU) и шарик в виде маленького квадратика, который вы должны отбивать своей ракеткой, а CPU -- своей. Напоминает настольный теннис.
И в ходе написания программы возник следующий вопрос. Насколько я понял, программа должна состоять, как минимум, из двух частей. Одна из них должна осуществлять движение мяча и соответствующее передвижение ракетки CPU. Вторая должна реагировать на сообщения о передвижении мыши пользователем и изменять координаты соответствующей ракетки.
Вопрос: как сдлеать, чтобы выше упомянутые части программы выполнялись одновременно? Мне посоветовали использовать потоки. Действительно ли потоки могут здесь помочь?

Автор: Fazil6 4.5.2006, 09:09
Цитата

Действительно ли потоки могут здесь помочь?

действительно. Тебя не обманули. 

Автор: likehood 4.5.2006, 09:24
А ты начни писать, многие вопросы отпадут сами собой smile  

Автор: Heremum 4.5.2006, 10:58
Spirit87
Видно вы только только начали заниматься разработкой игровых движков, хотябы самых примитвных. Это хорошо, я всегда так радуюсь, когда нахожу новичка, которому могу рассказать что-дибо! smile
Во-первых: разработку любой игры не делят на части по функциями: ракетка, мяч и т.п. Их делят по принципиально разным аспектам программирования: графика, звук, алгоритмические расчёты. Обработак движения мыши, полёта мячика и движение ракетки - это всё аналитика и не надо помещать обработку их в разные потоки, потому это не требуется, да и так твоя игра не будет правильно работать.
Для начала о "многопоточности" или так называемой мульти-задачности windows: программы запущенные в windows не выполняются одновременно никогда. Это невозможно впринципе, потому что процессор у тебя один(или у тебя их больше? smile Тогда конечно разговор другой) В Windows 18 раз за секунду происходит переключение между всеми запущенными программами, и выполняется какая-то их маленькая часть(например один полный машинный код). Так как переключение идёт быстро, то нам кажется, что программы работают параллельно. На самом деле это называется псевдо-мультизадачность системы.
Смотри: ты сначала обсчитываешь то, где находится ракетка, где находится мяч, отражается ли мячик от ракетки или пролетает мимо, забивая гол, исходя из этого ты знаешь координаты ракеток, мячика и вообще положение дел, и только лишь когда ты их будешь знать, ты сможешь нарисовать текущий кадр сцену игры. Поэтому если ты юудешь выполнять просчёты параллельно, то расчёты будут не верны, будут ошибки и соответственно игры не получится. Сначала просчёт всей аналитики, а потом вывод на экран. Запомни. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)