![]() |
|
|
#31
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:46. |
|
#32
|
|||
|
|||
|
Цитата:
Не в обиду сказано, но вы его пробовали в действии? Персонаж двигается с задержкой в 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;![]() |
|
#33
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:46. |
|
#34
|
|||
|
|||
|
Цитата:
![]() А вот новый проект, так годится? |
|
#35
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:46. |
|
#36
|
|||
|
|||
|
Цитата:
Естественно разбирать не прошу, за свой пример большое спасибо, думаю найду что подправить у себя. Но вот такое замедление в движении конечно пугает и вводит в заблуждение. Почему. Ну вот почему так. Хз. ![]() |
|
#37
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:47. |
|
#38
|
|||
|
|||
|
Цитата:
![]() |
|
#39
|
||||
|
||||
|
Ну-да, ну-да. 0.39 это очень большая загрузка процессора, но с вами всё ясно. Жаль только, что потратил время на бездарность.
![]() |
|
#40
|
|||
|
|||
|
Большая или малая (0.39), но как ни как приложение требует больше ресурсов системы и это минус. Понятное дело что сейчас системы достаточно мощные и все такое. Но суть остается сутью.
Чем меньше - тем лучше. Хоть в размере, хоть в использовании ресурсов. |