Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2009, 19:52   #31
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

У меня тоже сильно тормозит, да и памяти занимает 10мб. На какой стадии разработки игра стала так тормозить?

Сейчас посмотрю исходник.

------------------
Посмотрел....
Безжалостно удаляй этот код:
Код:
case map[m,n] of
'1': begin mp[m,n].Utexture.LoadFromFile('../Images/Land/Grass.bmp'); buf.Canvas.Draw(gx+m*50-50,gy+n*50-50,mp[m,n].Utexture); end;
'2': begin mp[m,n].Utexture.LoadFromFile('../Images/Land/Tree.bmp'); buf.Canvas.Draw(gx+m*50-50,gy+n*50-50,mp[m,n].Utexture); end;
'3': begin mp[m,n].Utexture.LoadFromFile('../Images/Land/Land.bmp'); buf.Canvas.Draw(gx+m*50-50,gy+n*50-50,mp[m,n].Utexture); end;
'6': begin mp[m,n].Utexture.LoadFromFile('../Images/Land/PROTIVOTANK.bmp'); buf.Canvas.Draw(gx+m*50-50,gy+n*50-50,mp[m,n].Utexture); end;
'7': begin mp[m,n].Utexture.LoadFromFile('../Images/Land/Grass.bmp'); buf.Canvas.Draw(gx+m*50-50,gy+n*50-50,mp[m,n].Utexture); mp[m,n].Utexture.LoadFromFile('../Images/Buildings/Russian/Shtab1.bmp'); mp[m,n].Utexture.Transparent:=true; buf.Canvas.Draw(gx+m*50-50,gy+n*50-50,mp[m,n].Utexture); end;
'8': begin mp[m,n].Utexture.LoadFromFile('../Images/Land/Grass.bmp'); buf.Canvas.Draw(gx+m*50-50,gy+n*50-50,mp[m,n].Utexture); mp[m,n].Utexture.LoadFromFile('../Images/Buildings/Russian/Shtab1.bmp'); mp[m,n].Utexture.Transparent:=true; buf.Canvas.Draw(gx+m*50-50,gy+n*50-50,mp[m,n].Utexture); end;
end;
Дело в том, что при рисовании карты все графические обьекты у тебя загружаются постоянно!!!!. Так делать ни в коем случае нельзя. В блоке FormCreate должна происходить загрузка всех изображений в буфферы, в FormDestroy должно быть уничтожение всех буфферов. А в таймере должен быть код рисования.

Последний раз редактировалось Вадим Буренков; 28.05.2009 в 20:03.
Вадим Буренков вне форума Ответить с цитированием
Старый 28.05.2009, 20:05   #32
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Сейчас попробую.
Shadow_1329 вне форума Ответить с цитированием
Старый 28.05.2009, 20:09   #33
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Все сделал как ты и сказал но как сделать чтобы таймер всю карту перерисовывал заново?
Shadow_1329 вне форума Ответить с цитированием
Старый 28.05.2009, 20:18   #34
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Если я напишу этот код только в FormCreate то он загрузится один раз и прорисуется один раз. Таймер при этом ничего не рисует получается.
Shadow_1329 вне форума Ответить с цитированием
Старый 28.05.2009, 21:41   #35
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Shadow_1329 Посмотреть сообщение
Если я напишу этот код только в FormCreate то он загрузится один раз и прорисуется один раз. Таймер при этом ничего не рисует получается.
Как же так, ...щас накажу, поставлю в угол ) ...ты же читал темы соответственные!

mp[m,n].Utexture - это массив карты, в ячейке будет некая текстура TBitmap, какая? ...та, что хранится в банке текстур!
Тебе нужно создать одномерный массив, в который один раз в FormCreate ты закидываешь все текстуры. В карте у тебя будут номера картинок, пробегая по файлу ты берешь значение и загружаешь картинку в банк, подряд, ячейка за ячейкой.
Когда ты прорисовываешь карту, ты используешь лишь индекс, номер ячейки в банке текстур (ячейка массива), и пишешь запись типа:
Код:
buf.Canvas.Draw(gx+m*50-50,gy+n*50-50,ImageBank[mp[m,n].UIndex]);
ImageBank[i] - массив типа TBitmap, mp[m,n].UIndex - ссылка.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.05.2009, 08:02   #36
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Это конечно полезная информация но я сделал чуточку проще. Во всяком случае для меня. В будущем пригодится. Спс.
Shadow_1329 вне форума Ответить с цитированием
Старый 29.05.2009, 08:50   #37
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

У меня в игре на данный момент будет происходить следующее. Ты тыкаешь на юнита и он выделяется(другог слова не нашел), затем когда ты тыкаешь куда нибудь правой кнопой мыши он будет ехать туда. У меня вопрос. По одному же ты передвигать юниты не будешь(нудно). А как сделать так чтобы они все выделялись специальными границами(ну это когда зажимаешь мышку на рабочем столе и водишь ею, такими границами)?
Shadow_1329 вне форума Ответить с цитированием
Старый 29.05.2009, 09:38   #38
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
Радость

Я не занимался разработкой стратегий, но я вижу код таким.
Делаешь процедуру, назовем ее MouseControl(Unit:TUnit), где Unit - переменная под юнит типа TUnit. В TUnit должна быть переменная
Код:
Selected:boolean;
В ее коде должно быть примерно следующее:
1)Проверка, находится ли юнит под мышью и нажата ли левая кнопка мыши. Если да, то Selected:=true;

2)Если юнит выделен,
Код:
if Selected=true then
то рисуем рамку вокруг юнита и ставим условие нажатия правой кнопки мыши. Если правая кнопка нажата, то двигаем юнит в точку нажатия.
Также нужно сделать условие снятия выделения с Unit'a.

Но как же найти координаты мыши и проверку нажата ли мышь?
Можно с помошью Event'ов OnMouseDown и OnMouseMove, но мне эти методы не нравятся из-за излишнего усложнения кода.
Поэтому я советую использовать
1)Для определения координат мыши:
Во всех программах сушествует переменная Mouse с различными данными.Нам потребуются свойства Mouse.CursorPos.X и Mouse.CursorPos.Y они и отвечают за координаты.
2)Проверить нажатия мыши можно с помощью написанной мной функции:

Код:
function MousePressed(Button:integer):boolean;
//VK_LBUTTON - левая кн. мыши
//VK_RBUTTON - правая кн. мыши
begin
if (GetKeyState(Button)=0) or  (GetKeyState(Button)=1) then result:=false;
if (GetKeyState(Button)=-127) or  (GetKeyState(Button)=-128) then result:=true;

end;

end.
Пример использования:
Код:
//При нажатии левой кнопки мыши форма закрывается
if MousePressed(VK_LBUTTON) then Form1.Close;
Вадим Буренков вне форума Ответить с цитированием
Старый 29.05.2009, 10:02   #39
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

А как нарисовать рамку выделения вогруг юнитов?
Shadow_1329 вне форума Ответить с цитированием
Старый 29.05.2009, 10:41   #40
Shadow_1329
Форумчанин
 
Аватар для Shadow_1329
 
Регистрация: 23.02.2009
Сообщений: 237
По умолчанию

Блин танк едет с такими тормозами... Вот исходник посмотри.
Вложения
Тип файла: rar WW II - Tanks.rar (271.3 Кб, 23 просмотров)
Shadow_1329 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создаю "тестирующую систему" для проверки задач. Программисты, нужна ваша помощь! alexfmf Помощь студентам 12 30.04.2009 20:19
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49