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