?? scenemainunit.pas
字號:
With TGameUnit.Create(MainForm.SpriteEngine.Engine) do
begin
UnitName:='Player2Spr';
Direction:=Random(8);
FChipH:=ChipH;
FChipW:=ChipW;
X:=50 + 120*i;
Y:=400;
Z := Trunc(Y);
Life := 20;
FLifeMax := 20;
FDamage := 1;
FAttackRange := 200;
FSight := 200;
FSpeed := 75/1000;
FAllyID := 2;
FUnitColor :=DXBlue;
end;
end;
Navigator:=TDXWNavigator.Create;
Navigator.InitLeft:=468;
Navigator.InitTop:=22;
Navigator.InitWidth:=150;
Navigator.InitHeight:=150;
Navigator.MapW:=MapW;
Navigator.MapH:=MapH;
Navigator.SpriteEngine:=MainForm.SpriteEngine;
ScrollBackground.MakeMiniMap;
FBtnList.Add(TDXImageButton.Create);
With TDXImageButton(FBtnList[FBtnList.Count-1]) do
begin
Image := MainForm.TmpImageList2.Items.Find('BtnGameMenu');
Width := Image.Width;
Height := Image.Height;
X := 468;
Y := 3;
Surface:=MainForm.DXDraw.Surface;
end;
end;
procedure SceneMainMouseDown(Shift: TShiftState; X, Y: Integer);
Var
i,n : integer;
r : TRect;
ClickedSprite : TSprite;
SelSprites : TList;
BaseX,BaseY : Double;
dX,dY : Double;
MapX,MapY : Double;
DestX,DestY : Double;
dL,dLmin : Double;
DownPoint : TPoint;
begin
DownPoint:=Point(X,Y);
MapX:=(-MainForm.SpriteEngine.Engine.X)+X;
MapY:=(-MainForm.SpriteEngine.Engine.Y)+Y;
MapDownPointX:=MapX;
MapDownPointY:=MapY;
if SubSceneMainMenuEnabled
then SubSceneMainMenuMouseDown(Shift,X,Y)
else
begin
r:= MainForm.SpriteEngine.Engine.SurfaceRect;
if PtInRect(r,DownPoint)then
begin
if (ssLeft in Shift) then StartSelection := True;
ClickedSprite:=MainForm.SpriteEngine.Engine.GetSpriteAt(DownPoint.X,DownPoint.Y);
if (ClickedSprite is TWImageSprite)and(ssLeft in Shift) then
begin
For i:=0 to MainForm.SpriteEngine.Engine.AllCount-1 do
if MainForm.SpriteEngine.Engine.Items[i] is TWImageSprite
then TWImageSprite(MainForm.SpriteEngine.Engine.Items[i]).Selected:=false;
With TWImageSprite(ClickedSprite) do
begin
Selected:=true;
CanMove:=false;
end;
end;
if (ClickedSprite=nil) and (ssRight in Shift) then
begin
DestX:=MapX;
DestY:=MapY;
if Not ScrollBackground.Obstacle[Trunc(DestY/ChipH),Trunc(DestX/ChipW)] then
begin
SelSprites:=TList.Create;
try
For i:=0 to MainForm.SpriteEngine.Engine.AllCount-1 do
if (MainForm.SpriteEngine.Engine.Items[i] is TWImageSprite) and
(TWImageSprite(MainForm.SpriteEngine.Engine.Items[i]).Selected)
then
SelSprites.Add(TWImageSprite(MainForm.SpriteEngine.Engine.Items[i]));
if SelSprites.Count=0 then Exit;
i:=0;
dx:=(DestX-TWImageSprite(SelSprites[i]).X);
dy:=(DestY-TWImageSprite(SelSprites[i]).Y);
dLmin:=dx*dx+dy*dy;
n:=0;
For i:=1 to SelSprites.Count-1 do
begin
dx:=(DestX-TWImageSprite(SelSprites[i]).X);
dy:=(DestY-TWImageSprite(SelSprites[i]).Y);
dL:=dx*dx+dy*dy;
if dL<dLmin then
begin
dLmin:=dL;
n:=i;
end;
end;
BaseX:=TWImageSprite(SelSprites[n]).X;
BaseY:=TWImageSprite(SelSprites[n]).Y;
For i:=0 to SelSprites.Count-1 do
With TWImageSprite(SelSprites[i]) do
begin
dX:=BaseX-X;
dY:=BaseY-Y;
DestPointX:=(-MainForm.SpriteEngine.Engine.X)+DownPoint.X-dX;
DestPointY:=(-MainForm.SpriteEngine.Engine.Y)+DownPoint.Y-dY;
DestChipX:=Trunc(DestPointX/ChipW);
DestChipY:=Trunc(DestPointY/ChipH);
While ScrollBackground.Obstacle[DestChipY,DestChipX] do
begin
dX:=(Abs(dX)-ChipW)*Sign(dX);
DestPointX:=(-MainForm.SpriteEngine.Engine.X)+DownPoint.X-dX;
DestChipX:=Trunc(DestPointX/ChipW);
if Not ScrollBackground.Obstacle[DestChipY,DestChipX]
then Break;
dY:=(Abs(dY)-ChipH)*Sign(dY);
DestPointY:=(-MainForm.SpriteEngine.Engine.Y)+DownPoint.Y-dY;
DestChipY:=Trunc(DestPointY/ChipH);
end;
FindPath(Point(ChipX,ChipY),Point(DestChipX,DestChipY));
if FindPath(Point(ChipX,ChipY),Point(DestChipX,DestChipY)) then
begin
DirChangedXYCount:=PathInf.DirChangedPointsCount;
CurrentDirChangedXYId:=0;
SetLength(DirChangedXYArr,DirChangedXYCount);
For n:=0 to DirChangedXYCount-1 do
begin
DirChangedXYArr[n].x:=PathInf.DirChangedPointsArr[n].Point.x*ChipW + ChipW div 2;
DirChangedXYArr[n].y:=PathInf.DirChangedPointsArr[n].Point.y*ChipH + ChipH div 2;
DirChangedXYArr[n].Dir:=PathInf.DirChangedPointsArr[n].Dir;
end;
end
else Exit;
CanMove:=true;
//DestPointLocked:=False;
//DestPointOriented:=False;
end;//i
finally
SelSprites.Free;
end;
end;//if Not Obstacle
end;//if (ClickedSprite=nil) and (ssRight in Shift)
end//if PtInRect(r,DownPoint)
else
begin
Navigator.NavigatorMouseDown(Shift,X,Y);
end;
begin
For i:=0 to FBtnList.Count-1 do
begin
r:=TDXImageButton(FBtnList[i]).BoundsRect;
if PtInRect(r,DownPoint)
then TDXImageButton(FBtnList[i]).Selected:=true;
end;
end;
end;
end;
procedure EndSceneMain;
Var
i: integer;
begin
Navigator.Free;
MainForm.TmpImageList2.Items.Clear;
MainForm.SpriteEngine.Engine.Clear;
MainForm.DXWaveList.Items.Clear;
For i:=0 to FBtnList.Count-1
do TDXImageButton(FBtnList[i]).free;
FBtnList.Clear;
end;
procedure SceneMainMouseUp(Shift: TShiftState; X, Y: Integer);
begin
StartSelection := false;
Navigator.NavigatorMouseUp(Shift,X,Y);
if Not SubSceneMainMenuEnabled then
begin
if TDXImageButton(FBtnList[0]).Selected then
begin
TDXImageButton(FBtnList[0]).Selected:=False;
StartSubSceneMainMenu;
end;
end else SubSceneMainMenuMouseUp(Shift,X,Y);
end;
procedure SceneMainMouseMove(Shift: TShiftState; X, Y: Integer);
Var
i : integer;
GroupR : TRect;
WX,WY : integer;
begin
if SubSceneMainMenuEnabled
then SubSceneMainMenuMouseMove(Shift,X,Y)
else
begin
Navigator.NavigatorMouseMove(Shift,X,Y);
if (StartSelection)and(ssLeft in Shift)then
With MainForm do
begin
if X>SpriteEngine.Engine.Width
then X:=SpriteEngine.Engine.Width;
WX:=Trunc(MapDownPointX+SpriteEngine.Engine.X);
WY:=Trunc(MapDownPointY+SpriteEngine.Engine.Y);
GroupR:=Rect(min(WX,X),min(WY,Y),max(WX,X),max(WY,Y));
For i:=0 to SpriteEngine.Engine.AllCount-1 do
if SpriteEngine.Engine.Items[i] is TWImageSprite then
With TWImageSprite(SpriteEngine.Engine.Items[i]) do
if OverlapRect(GroupR,BoundsRect)
then Selected:=true
else Selected:=false;
end;
end;
end;
procedure OutSelSpriteInf;
Var
i,n : integer;
S: String;
DestX,DestY : integer;
begin
with MainForm, MainForm.DXDraw.Surface.Canvas do
try
For i:=0 to SpriteEngine.Engine.AllCount-1 do
begin
if SpriteEngine.Engine.Items[i] is TGameUnit then
begin
With TGameUnit(SpriteEngine.Engine.Items[i]) do
begin
if Selected then
begin
Pen.Color:=clYellow;
DestX:=Trunc(DestPointX+SpriteEngine.Engine.X);
DestY:=Trunc(DestPointY+SpriteEngine.Engine.Y);
Ellipse(DestX-5,DestY-5,DestX+5,DestY+5);
if DirChangedXYCount>0 then
begin
n:=0;
DestX:=Trunc(DirChangedXYArr[n].X+SpriteEngine.Engine.X);
DestY:=Trunc(DirChangedXYArr[n].Y+SpriteEngine.Engine.Y);
MoveTo(DestX,DestY);
For n:=1 to DirChangedXYCount-1 do
begin
DestX:=Trunc(DirChangedXYArr[n].X+SpriteEngine.Engine.X);
DestY:=Trunc(DirChangedXYArr[n].Y+SpriteEngine.Engine.Y);
LineTo(DestX,DestY);
end;
end;
Brush.Style := bsClear;
Font.Color := clWhite;
//Font.Name := 'MS Sans Serif';
Font.Name := 'Arial';
Font.Size := 7;
//Textout(480, 50, format('Name: %s',[FName]));
Textout(480, 60, format('Life: %d',[Life]));
Textout(480, 260, format('XYZ: %.0f,%.0f / %d',[X,Y,Z]));
Textout(480, 270, format('WXY: %.0f,%.0f',[WorldX,WorldY]));
//Textout(480, 290, format('Direction: %d',[Direction]));
//Textout(480, 300, format('DestXY: %.0f %.0f',[DestPointX,DestPointY]));
//Textout(480, 310, format('ChipXY: %d %d',[ChipX,ChipY]));
//Textout(480, 320, format('DestChipXY: %d %d',[DestChipX,DestChipY]));
{
if CanMove
then Textout(480, 330, format('CanMove: %S',['true']))
else Textout(480, 330, format('CanMove: %S',['false']));
}
{
Textout(480, 320, format('AnimIndex: %d',[AnimIndex]));
Textout(480, 330, format('AnimPos: %.0f',[AnimPos]));
Textout(480, 340, format('AnimStart: %d',[AnimStart]));
Textout(480, 350, format('AnimCount: %d',[AnimCount]));
//Textout(480, 360, format('Image.PatternCount: %d',[Image.PatternCount]));
}
{
S:='';
if osMove in FObjectState then S:=S+' osMove ';
if osCollided in FObjectState then S:=S+' osCollided ';
Textout(480, 380, format('State: %S',[S]));
}
Exit;
end;//if selected
end;//With TPlayer1
end;
end;// i: For i:=0 to SpriteEngine.Engine.AllCount-1 do
finally
Release;
end;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -