|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.05.2010, 19:35 | #471 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
M0rf, внимательно читайте тему, ...несколько раз упоминался собственный тип массива юнитов. У юнита есть запись, отвечающая за состояние, т.е. тип анимации, которую он выполняет, ...есть запись, отвечающая за номер текущего кадра. Существует цикл по числу юнитов в игре, внутри цикла Case на состояние (тип анимации), в каждом пункте которого прописаны все состояния, и в каждом количество кадров, ...условия на конец анимации и переход на другое состояние.
В любой момент времени будут обрабатываться все юниты по одному и тому же таймеру, но каждый будет выполнять свои действия и анимацию, исходя из своих записей. Вот упрощенная модель: Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
02.06.2010, 03:16 | #472 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 21
|
Ура! Теперь у меня один таймер. Все неплохо работает, анимации корректно воспризводятся, но сложно регулировать скорость воспроизведения. при некоторых ударах получается, что анимация получения удара выполняется быстрее, чем нанесение. Пытался вручную менять интервалы у таймера, но это влияет на все скорости воспроизведения анимаций, что не решает проблемму. Возможно нужно использовать sleep() ?
З. Ы. Не подскажите ли мне аналог команды With на С++. Как я понял в данном примере, эта команда позволяет не писать каждый раз Units[i] при обращении к элементам. В helpe по С++ ее нет. Последний раз редактировалось M0rf; 02.06.2010 в 03:20. |
02.06.2010, 08:57 | #473 | ||
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Цитата:
Цитата:
Говоря кратко - нет такого аналога в C++, только в функциях-членах вы не пишете, к какому объекту обращаетесь. И еще добавлю, что при написании игры (и вообще любой нетривиальной программы) на C++ часто стоит активно использовать ООП. Если Pascal и Delphi несмотря на поддержку этой парадигмы часто оказываются склонны к функциональному программированию, что выражается хотя бы в разнице между записями и классами (отсутствие функций-членов и наследования в записях), то C++ является в противовес Си ориентированным именно на ООП и принципиальной разницы между структурами и классами там нет вообще никакой. Поэтому я советую использовать те средства, которые ближе выбранному вами языку (C++ в данном случае) - в частности, активно использовать функции-члены, например, таким образом: Код:
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
||
02.06.2010, 12:52 | #474 | |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Цитата:
http://www.programmersforum.ru/showthread.php?t=70140 Почитай там мои посты, посмотри мою демку (правда она на Delphi, но как я понял ты его понимаешь). Смысл в том, что есть переменная, она каждый цикл таймера возрастает на 1. Как она становится равной, например 10 происходит ее сброс на 1 и выполняется код анимации. В итоге анимация работает в 10 раз медленнее таймера. Ту же систему можно использовать при других задержках чтобы не захламлять игру лишними таймерами. |
|
02.06.2010, 16:30 | #475 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
03.06.2010, 01:46 | #476 | ||
Пользователь
Регистрация: 12.03.2010
Сообщений: 21
|
Цитата:
Цитата:
|
||
13.06.2010, 01:42 | #477 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 21
|
Сессия закончилась, можно иделом заняться.
Решил переделать вывод графики через Canvas в один Image. нашел пару примеров (в С++ синтаксис не такой как в Delphi), но возникли трудности: TPicture *fon=new TPicture; - задаю указатель на фон игры fon->Bitmap->Width=1280; fon->Bitmap->Height=800; - указываю ширину и высоту fon->Bitmap->LoadFromFile("Арена1.bmp"); - загружаю Image1->Canvas->Draw(0,0,fon->Bitmap); - рисую. Выскакивает ошибка при запуске программы: "Stream read error". Все сделано в соответсвии с примером. Есть ли ошибка в коде, и как правильно сделать вывод? И еще, про классы. В начале планировалось использовать один класс - Fighter, который будет хранить все переменные, функции ударов, движения, получение урона. В общем все функции. Но один товарищ посоветовал мне писать несколько классов: описание бойца, описание анимаций и др. Никак не могу понять преимуществ такого способа. Как, на ваш взгляд, лучше писать классы? |
13.06.2010, 07:58 | #478 | |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
Не надо рисовать все в один Image. Рисуйте сразу на форму. В реализации разницы никакой - т.к. вывод происходит через канву, которая у Form и Image одна и та же, а результат уже ближе к идеалу.
Также вместо TPicture советую TBitmap (уже хотя бы потому, что TBitmap является членом TPicture и это именно через него вы работаете). Ошибка, возможно, из-за использования русских букв (вообще у Билдера с русскими символами и взаимодействием их с внешним миром все очень плохо). Цитата:
Вообще - почитайте Страуструпа, он много про ООП писал.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
|
18.06.2010, 10:59 | #479 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 21
|
Блин, столько времени и все зря. Уже по-всякому перепробывал. Или я что-то недопонял или чего-то не хватает Builder'у. Смотрим сами:
Graphics::TBitmap *tmpBitmap = new Graphics::TBitmap(); //создаем битмап tmpBitmap->LoadFromFile("1.bmp");// загружаем изоьражение (специально переименовал, чтобы русских букв не было) Form1->Canvas->Draw(0,0,tmpBitmap);//отображаем рисунок на форме, начиная с координаты (0,0) По идее, все должно отображаться. Но при запуске вылетает ошибка Stram read error. При загрузке этой же картинки в Image (Image1->Picture->LoadFromFile("1.bmp")) все грузится нормально. Может быть кто-нибудь выложит пример (самый простой), чтобы я мог проверить - будет ли он у меня работать или нет? |
18.06.2010, 20:56 | #480 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
С проблемами в коде в свою созданную тему, здесь только фундаментальное, на словах или в коде.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хорошие уроки | Render | Общие вопросы Delphi | 9 | 15.09.2012 07:13 |
Акцесс вопросы новичков | Yaga | Помощь студентам | 4 | 02.06.2008 00:16 |
Учебники для новичков в програмировании | Рар | Общие вопросы Delphi | 6 | 08.01.2007 08:07 |