Delphiでアクションゲームが作りたい!!
■ このスレッドは過去ログ倉庫に格納されています
0071無責任だが
NGNGuses Windows, Messages, SysUtils,Classes, Graphics, Controls, Forms, StdCtrls;
type TMoveItem= record
x,y,vx,vy,ax,ay:double;
obj:TObject;
end;
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
oldTime:DWORD;
items:array [0..0] of TMoveItem;
procedure Idle(Sender: TObject; var Done: Boolean);
public
end;
var Form1: TForm1;
implementation
{$R *.dfm}
var Clip:TRect;
procedure ExecMoveItem(var items:TMoveItem;dt:double);
begin
with items do begin
x:=x+vx*dt; y:=y+vy*dt;
vx:=vx+ax*dt; vy:=vy+ay*dt;
if (round(x)<Clip.Left ) and (vx<0) then vx:=-vx;
if (round(x)>Clip.Right ) and (vx>0) then vx:=-vx;
if (round(y)<Clip.Top ) and (vy<0) then vy:=-vy;
if (round(y)>Clip.Bottom) and (vy>0) then vy:=-vy;
if obj is TControl then
with obj as TControl do begin Top:=Round(y);Left:=Round(x);end
else //ここに他のアイテムの動きを増やしてゆく
;
end;
end;
procedure TForm1.Idle(Sender: TObject; var Done: Boolean);
var t:DWORD; dt:Double; i:Integer;
begin
t:=GetTickCount; dt:=(t-oldTime)/1000.0;oldTime:=t;
if dt>0 then begin
for i:=0 to High(items) do ExecMoveItem(Items[i],dt);
end else Sleep(33);
Done:= False;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin Application.OnIdle:=Idle;
oldTime:=GetTickCount;
Clip:=ClientRect;
with items[0] do begin
obj:=Label1;
x:=Label1.Left;
y:=Label1.Top;
vx:=20; vy:=-13;
ay:=9.8; ax:=0.001;
end;
// ちらつきを減らすなら DoubleBuffered:=True;
end;
end.
■ このスレッドは過去ログ倉庫に格納されています