![]() |
|
|
#16
|
|||
|
|||
|
Разобрался я с этим, но это не то. Совсем не то и оно ни как не влияет на работу.
|
|
#17
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:44. |
|
#18
|
|||
|
|||
|
Самым обычным и примитивным методом. Грузим с буфера нужную часть изображения и получается что-то вроде анимации.
Image1.Left := Image1.Left - 8; Image1.Pictures.Canvas.CopyRec(..что-то там..); |
|
#19
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:44. |
|
#20
|
|||
|
|||
|
Попробуй, может разберешься
![]() |
|
#21
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:45. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Kaktuz (21.01.2012)
| ||
|
#22
|
|||
|
|||
|
Неплохо. Полоски пропали.
А вообще как сам код подобного движения? Примитивно или нормально? Он просто получился довольно таки объемным. |
|
#23
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:45. |
|
#24
|
|||
|
|||
|
За этот Sleep(100); я уже понял что он фиговый когда пытался добавить новый движущийся объект. Надо все в таймер пихать. Но он же зараза такая работает так как ему нравится. Если стоит диапазон 100 мс. то даже если код не завершился, он запустит его заново.
![]() |
|
#25
|
|||
|
|||
|
Ну так таймер может себя остановить. Пусть останавливает себя, делает все что нужно сделать при событии и опять запускает
|
|
#26
|
|||
|
|||
|
Вот набросок обычного движения через таймер.
Код:
procedure TForm1.TimerUpTimer(Sender: TObject);
begin
if TUp = 1 then
begin
Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(16, 16, 32, 32));
Player.Top:=Player.Top-8;
TUp := 2;
Exit;
end;
if TUp = 2 then
begin
Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(0, 16, 16, 32));
Player.Top:=Player.Top-8;
TUp := 3;
Exit;
end;
if TUp = 3 then
begin
Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(32, 16, 48, 32));
Player.Top:=Player.Top-8;
TUp := 4;
Exit;
end;
if TUp = 4 then
begin
Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(0, 16, 16, 32));
Player.Top:=Player.Top-8;
TimerUp.Enabled := False;
Up.Enabled := True;
Exit;
end;
end;
procedure TForm1.UpExecute(Sender: TObject);
var u: integer;
begin
Up.Enabled := False;
if PU = 1 then
begin
u := StrToInt(Map.Strings[StrToInt(PlayerY)-1][StrToInt(PlayerX)]);
if (u = 0) or (u = 2) or (u = 3) or (u = 5) then
begin
TUp := 1;
PlayerY := IntToStr(StrToInt(PlayerY)-1);
TimerUp.Enabled := True;
end;
end
else
begin
Player.Canvas.CopyRect(Rect(0, 0, 32, 32), PlayerBit.Canvas, Rect(0, 16, 16, 32));
PL:=0; PR:=0; PU:=1; PD:=0;
Up.Enabled := True;
end;
end; |
|
#27
|
|||
|
|||
|
Цитата:
|
|
#28
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:45. |
|
#29
|
|||
|
|||
|
Правильно оформил?
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ActnList;
type
TForm1 = class(TForm)
Label1: TLabel;
ActionList1: TActionList;
Up: TAction;
Down: TAction;
procedure UpExecute(Sender: TObject);
procedure DownExecute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TPlayerDirection = (pdLeft, pdRight, pdUp, pdDown);
var
Form1: TForm1;
LRUD: TPlayerDirection;
implementation
{$R *.dfm}
procedure TForm1.UpExecute(Sender: TObject);
begin
if LRUD = pdUp then
Label1.Caption := 'Up >>>'
else
begin
Label1.Caption := 'Up';
LRUD := pdUp;
end;
end;
procedure TForm1.DownExecute(Sender: TObject);
begin
if LRUD = pdDown then
Label1.Caption := 'Down >>>'
else
begin
Label1.Caption := 'Down';
LRUD := pdDown;
end;
end;
end.Последний раз редактировалось Kaktuz, 21.01.2012 в 22:55. |
|
#30
|
||||
|
||||
|
Удалено...
Последний раз редактировалось angvelem, 23.01.2012 в 23:45. |