Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 22.01.2012, 21:06
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Удалено...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 23.01.2012 в 23:46.
Ответить с цитированием
  #32  
Старый 23.01.2012, 22:26
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Подправил как обещал, с учётом использования таймера.
"Подправил" - хм. Как по мне так там большая часть переделанная.
Не в обиду сказано, но вы его пробовали в действии? Персонаж двигается с задержкой в 1000 мс. (хотя в таймере указанно 100 мс. мистика однако), один шаг занимает 4 сек в место 400 мс. Явно где-то скрытый баг висит.
Код я не разбирал, как-то мне он замудреным кажется, но это наверно потому что я еще плохо знаюсь в Delphi.
Вот мой вариант движения через таймер. Работает отлично!
Код:
// ---------- Движение персонажа ---------- //
procedure TForm1.TimerUpP(Sender: TObject);
begin
if TimerN = 1 then
  begin
  Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(16, 16, 32, 32));
  Player.Top:=Player.Top-8;
  TimerN := 2;
  Exit;
  end;
if TimerN = 2 then
  begin
  Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(0, 16, 16, 32));
  Player.Top:=Player.Top-8;
  TimerN := 3;
  Exit;
  end;
if TimerN = 3 then
  begin
  Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(32, 16, 48, 32));
  Player.Top:=Player.Top-8;
  TimerN := 4;
  Exit;
  end;
if TimerN = 4 then
  begin
  Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(0, 16, 16, 32));
  Player.Top:=Player.Top-8;
  TimerMove.Enabled := False;
  Up.Enabled := True;
  Down.Enabled := True;
  Left.Enabled := True;
  Right.Enabled := True;
  Exit;
  end;
end;
// ---------- Движение персонажа и карты ---------- //
procedure TForm1.TimerUpPM(Sender: TObject);
begin
if TimerN = 1 then
  begin
  Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(16, 16, 32, 32));
  Player.Top := Player.Top - 8;
  Panel_Game.Top := Panel_Game.Top + 8;
  TimerN := 2;
  Exit;
  end;
if TimerN = 2 then
  begin
  Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(0, 16, 16, 32));
  Player.Top := Player.Top - 8;
  Panel_Game.Top := Panel_Game.Top + 8;
  TimerN := 3;
  Exit;
  end;
if TimerN = 3 then
  begin
  Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(32, 16, 48, 32));
  Player.Top := Player.Top - 8;
  Panel_Game.Top := Panel_Game.Top + 8;
  TimerN := 4;
  Exit;
  end;
if TimerN = 4 then
  begin
  Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(0, 16, 16, 32));
  Player.Top := Player.Top - 8;
  Panel_Game.Top := Panel_Game.Top + 8;
  TimerMove.Enabled := False;
  Up.Enabled := True;
  Down.Enabled := True;
  Left.Enabled := True;
  Right.Enabled := True;
  Exit;
  end;
end;
// ---------- Процедура запуска движения ---------- //
procedure TForm1.UpExecute(Sender: TObject);
var u: string;
begin
Up.Enabled := False;
Down.Enabled := False;
Left.Enabled := False;
Right.Enabled := False;
if PD = pdUp then
  begin
  u := Map.Strings[StrToInt(PlayerY)-1][StrToInt(PlayerX)];
  if (u = '0') or (u = '2') or (u = '3') or (u = '5') then
    begin
    if (Player.Top < 244) or (Player.Top >= 544) then
      begin
      PlayerY := IntToStr(StrToInt(PlayerY)-1);
      TimerN := 1;
      TimerMove.OnTimer := TimerUpP;
      TimerMove.Enabled := True;
      end
    else
      begin
      PlayerY := IntToStr(StrToInt(PlayerY)-1);
      TimerN := 1;
      TimerMove.OnTimer := TimerUpPM;
      TimerMove.Enabled := True;
      end;
    end
  else
    begin
    Up.Enabled := True;
    Down.Enabled := True;
    Left.Enabled := True;
    Right.Enabled := True;
    end;
  end
else
  begin
  Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(0, 16, 16, 32));
  PD := pdUp;
  Up.Enabled := True;
  Down.Enabled := True;
  Left.Enabled := True;
  Right.Enabled := True;
  end;
end;
Вот попробуй как у меня получилось. Правда вкинул в оригинальный проект, ну да ладно, просто жми New Game и тестируй
Вложения
Тип файла: rar Upload.rar (196.5 Кбайт, 5 просмотров)
Ответить с цитированием
  #33  
Старый 23.01.2012, 22:35
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Удалено...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 23.01.2012 в 23:46.
Ответить с цитированием
  #34  
Старый 23.01.2012, 22:39
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Пробовал, ещё как пробовал , косяков, как ты выразился, там нет.
Ещё раз повторюсь, твой проект - это как не нужно делать.
Ну не знаю. Но у меня персонаж медленно перемещается, очень медленно.
А вот новый проект, так годится?
Ответить с цитированием
  #35  
Старый 23.01.2012, 22:42
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Удалено...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 23.01.2012 в 23:46.
Ответить с цитированием
  #36  
Старый 23.01.2012, 22:45
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
А зачем мне его смотреть в действии, достаточно было глянуть на выложенный кусок кода. Один бардак разобрал, зачем ковыряться в подобном?
Ну этот уже работает, движется от таймера.
Естественно разбирать не прошу, за свой пример большое спасибо, думаю найду что подправить у себя. Но вот такое замедление в движении конечно пугает и вводит в заблуждение. Почему. Ну вот почему так. Хз.
Ответить с цитированием
  #37  
Старый 23.01.2012, 22:52
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Удалено...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 23.01.2012 в 23:47.
Ответить с цитированием
  #38  
Старый 23.01.2012, 23:32
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
у меня сделано так:
одной строкой, для одного направления.
Возможно и одной строкой, проще, но в работе это заметно хуже. Смотрим видео, наблюдаем за нагрузкой на ЦП. И дело не в том что у меня система слабовата, а в том что такое приложение (с таким кодом) жрет гораздо больше ресурсов системы в отличии от моего.
Вложения
Тип файла: rar Move1.rar (191.3 Кбайт, 5 просмотров)
Ответить с цитированием
  #39  
Старый 23.01.2012, 23:42
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну-да, ну-да. 0.39 это очень большая загрузка процессора, но с вами всё ясно. Жаль только, что потратил время на бездарность.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #40  
Старый 24.01.2012, 00:09
Kaktuz Kaktuz вне форума
Начинающий
 
Регистрация: 30.10.2011
Сообщения: 149
Репутация: 10
По умолчанию

Большая или малая (0.39), но как ни как приложение требует больше ресурсов системы и это минус. Понятное дело что сейчас системы достаточно мощные и все такое. Но суть остается сутью.
Чем меньше - тем лучше. Хоть в размере, хоть в использовании ресурсов.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter