📄 main.~pas
字号:
Count := 500;
Center := Point(DXDraw.Width div 2,DXDraw.Height div 2);
YesRect := Rect(Center.X-45,Center.Y-10,Center.X+45, Center.Y + 10);
OffsetRect(YesRect, -60,20);
CancelRect := YesRect;
OffsetRect(CancelRect, 120,0);
MSGBoxRect := Rect(DXDraw.Width div 2 - 150,
DXDraw.Height div 2 - 45,
DXDraw.Width div 2 + 150,
DXDraw.Height div 2 + 45);
//DXDraw.Surface.Canvas.Release;
with Msgboxbmp.Canvas do
if DXDraw.CanDraw then
begin
Font.Charset := GB2312_CHARSET;
Pen.Color := $FD956c;
Pen.Style := psSolid;
Brush.Style := bsClear;
Font.Color := $FD956c;
Font.Name := '宋体';
Font.Size := 9;
DXInput1.Update;
GetCursorPos(Cursor);
Cursor := DXDraw.ScreenToClient(Cursor);
Brush.Style := bsSolid;
Brush.Color := $555555;
if PtInRect(YesRect, Cursor) then FillRect(YesRect);
if PtInRect(CancelRect, Cursor) then FillRect(CancelRect);
Brush.Style := bsClear;
with MSGBoxRect do Rectangle(Left, Top, Right, Bottom);
with YesRect do Rectangle(Left, Top, Right, Bottom);
with CancelRect do Rectangle(Left, Top, Right, Bottom);
if PtInRect(YesRect, Cursor) then Font.Color := clWhite else Font.Color := $FD956c;
TextOut(YesRect.Left+26, YesRect.Top+4, '重 试');
if PtInRect(CancelRect, Cursor) then Font.Color := clWhite else Font.Color := $FD956c;
TextOut(CancelRect.Left+26, CancelRect.Top+4, '取 消');
Font.Color := clWhite;
TextOut(MSGBoxRect.Left+26, MSGBoxRect.Top+20, '连接服务器失败!');
Release;
DXDraw.Surface.Draw(0,0,Rect(0,0,800, 600), Msgboxbmp, false);
DrawMouse;
//鼠标被按下
if isButton1 in DXInput1.Mouse.States then
begin
if PtInRect(YesRect, Cursor) then
begin
Count := 0;
Continue;
end;
if PtInRect(CancelRect, Cursor) then
begin
Break;
end;
end;
//Unlock;
end;
end;
DXDraw.Flip;
end
else
begin
Messagebox(Handle, '连接失败', '', MB_OK or MB_ICONERROR);
Application.Terminate;
Break;
end;
Application.ProcessMessages;
if (GetTickCount-lt)<25 then sleep(GetTickCount-lt);
while ((GetTickCount-lt)<30) do;
end;
ConnectBmp.Free;
Msgboxbmp.Free;
}
MainForm.Visible := false;;
Count := 0;
while ((not RltConnection.Connected) and (not Application.Terminated)) do
begin
inc(Count);
lt := GetTickCount;
DXInput1.Update;
if Count = 1 then RltConnection.Connected := true;
if (Count <500) then
begin
case (Count div 25)mod 2 of
0: begin
ShowLoading('连接服务中...');
end;
1: begin
ShowLoading('连接服务中 ');
end;
end;
if RltConnection.GetLastError <> 0 then Count := 450;
end
else
begin
if IDYes = MessageBox(Handle, '连接服务器失败,是否重试?','', MB_YESNO or MB_ICONQUESTION) then
begin
Count := 0;
Continue;
end else
Break;
end;
Application.ProcessMessages;
if (GetTickCount-lt)<25 then sleep(GetTickCount-lt);
while ((GetTickCount-lt)<30) do;
if RltConnection.Connected then
begin
TltInterpreter := TrltClientInterpreter(RltConnection.GetInterpreter);
if TltInterpreter.CallGetCurrentRound.State = rsStop then
begin
RltConnection.Connected := false;
end;
end;
end;
HideLoading;
if RltConnection.Connected then
begin
MainForm.Visible := True;
rlt.Round.State := rsBeting ;
TltInterpreter := TrltClientInterpreter(RltConnection.GetInterpreter);
rlt.TimeSetting :=TltInterpreter.CallGetTimeSetting;
Level1 := 1;
InitMidi;
end else
Level1 := 255;
end;
var
Counter : integer = 0;
procedure TMainForm.GameStart;
begin
rlt.Update;
rlt.Draw;
//draw
end;
procedure TMainForm.StartDemo;
var
LogoBmp : TDirectDrawSurface;
Count : integer;
lt : longint;
// DDGammaRamp : TDDGammaRamp;
DDColorControl : TDDColorControl;
Trans : longint;
begin
if not DXDraw.CanDraw then Exit;
LogoBmp := TDirectDrawSurface.Create(DXDraw.DDraw);
// LogoBmp.GammaControl.SetGammaRamp(0, DDGammaRamp)
LogoBmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'bmp\logo.bmp');
DXInput1.Update;
Count := 0;
while (Count<100)and(DXInput1.States = []) do
begin
inc(count);
lt := GetTickCount;
DXInput1.Update;
DXDraw.Surface.FillRect(Rect(0,0,DXDraw.Width,DXDraw.Height) ,0);
case Count of
0..50: Trans := Count * 256 div 50;
51..99 : Trans := (100 - Count) * 256 div 50;
end;
DXDraw.Surface.DrawAlpha(Rect(DXDraw.Width div 2 - 150,
DXDraw.Height div 2 - 45,
DXDraw.Width div 2 + 150,
DXDraw.Height div 2 + 45),
Rect(0,0,300,90), LogoBmp, true, Trans);
DXDraw.Flip;
while ((GetTickCount-lt)<30) do;
end;
LogoBmp.Free;
end;
procedure TMainForm.DXDrawInitialize(Sender: TObject);
var
LightFrame: IDirect3DRMFrame;
Light, AmbientLight: IDirect3DRMLight;
MeshBuilder, MeshBuilder2: IDirect3DRMMeshBuilder;
image1,image2,image3,image4: IDirect3DRMTexture;
Result : HRESULT;
//Mesh, NewMesh : IDirect3DRMMesh;
FaceArray : IDirect3DRMFaceArray;
VertexArray : IDirect3DRMVisualArray;
Face : IDirect3DRMFace;
i : integer;
V : TD3DRMVertex;
vertices: TD3DVector;
ncount: DWORD;
normals: TD3DVector;
face_data_size: DWORD;
face_data: DWORD;
vCount ,
fCount, vPerFace,
fDataSize, fData : DWORD;
index : TD3DRMGroupIndex;
returnPtr: TD3DRMVertex;
IMaterial: IDirect3DRMMaterial;
type
TArrayVertex = array of TD3DRMVertex;
PArrayVertex = ^TArrayVertex;
var
ArrayVertex : array[0..500] of TD3DRMVertex;
NormalVertex : array[0..500] of TD3DRMVertex;
buf : array [0..5000] of DWORD;
groupid : TD3DRMGroupIndex;
begin
vCount := 0;
fCount := 0;
vPerFace:= 0;
{ Frame making }
DXDraw.D3DRM.CreateFrame(DXDraw.Scene, LightFrame);
DXDraw.D3DRM.CreateFrame(DXDraw.Scene, MeshFrame);
DXDraw.D3DRM.CreateFrame(DXDraw.Scene, DyMeshFrame);
DXDraw.D3DRM.CreateFrame(DXDraw.Scene, BallMeshFrame);
{ Light setting }
DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_DIRECTIONAL, 5, 5, 5, Light);
LightFrame.AddLight(Light);
DXDraw.D3DRM.CreateLightRGB(D3DRMLIGHT_AMBIENT, 0.5, 0.5, 0.5, AmbientLight);
DXDraw.Scene.AddLight(AmbientLight);
{ Frame position and posture setting }
//方向光源
LightFrame.SetPosition(DXDraw.Scene, 0, 240, -300);
LightFrame.SetOrientation(DXDraw.Scene, -1, -1, 1, 0.0, 1.0, 0.0);
DXDraw.Camera.SetPosition(DXDraw.Scene, 0, 80, -80);
DXDraw.Camera.SetOrientation(DXDraw.Scene, 0,-1, 1, 0, 1, 0);
MeshFrame.SetPosition(DXDraw.Scene, 0, 0, 0);
MeshFrame.SetOrientation(DXDraw.Scene, 0.0, 1, 0, 0.0, 1.0, 0.0);
MeshFrame.SetRotation(DXDraw.Scene, 0,1 , 0, 0.05);
DyMeshFrame.SetPosition(DXDraw.Scene, 0, 0, 0);
DyMeshFrame.SetOrientation(DXDraw.Scene, 0.0, 1, 0, 0.0, 1.0, 0.0);
DyMeshFrame.SetRotation(DXDraw.Scene, 0,1 , 0, 0.05);
BallMeshFrame.SetPosition(DXDraw.Scene, 0, 0, 0);
BallMeshFrame.SetOrientation(DXDraw.Scene, 0.0, 1, 0, 0.0, 1.0, 0.0);
BallMeshFrame.SetRotation(DXDraw.Scene, 0,1 , 0, 0.05);
{ Mesh making }
DXDraw.D3DRM.CreateMeshBuilder(MeshBuilder);
DXDraw.D3DRM.CreateMeshBuilder(MeshBuilder2);
//if FileName='' then
FileName := ExtractFilePath(Application.ExeName)+'1.X';
ChDir(ExtractFilePath(FileName));
Result := MeshBuilder.Load(PChar(FileName), nil, D3DRMLOAD_FROMFILE, nil, nil);
MeshBuilder.Translate(15,0,2.5);
if (Result <> D3DRM_OK) then
begin
ShowMessage(IntToHex(Result,2));
end;
MeshBuilder.Scale(5,5 , 5);
MeshBuilder.SetColor(D3DRGB(1, 1, 1));
DXDraw.D3DRM.LoadTexture(PChar(ExtractFilePath(Application.ExeName)+'bmp\round512.bmp'), image1);
DXDraw.D3DRM.LoadTexture(PChar(ExtractFilePath(Application.ExeName)+'bmp\edge.BMP'), image2);
DXDraw.D3DRM.LoadTexture(PChar(ExtractFilePath(Application.ExeName)+'bmp\metal.bmp'), image3);
DXDraw.D3DRM.LoadTexture(PChar(ExtractFilePath(Application.ExeName)+'bmp\desktop.bmp'), image4);
// MeshBuilder.SetTexture(image);
// MeshBuilder.CreateMesh(Mesh);
VertexCount := MeshBuilder.GetVertexCount;
FaceCount := MeshBuilder.GetFaceCount;
MeshBuilder.GetFaces(FaceArray);
MeshBuilder.GetVertices(vcount, vertices, ncount, normals, face_data_size, face_data);
MeshBuilder.CreateMesh(Mesh);
GroutCount := mesh.GetGroupCount;
DXDraw.D3DRM2.CreateMesh(Mesh0);
DXDraw.D3DRM2.CreateMesh(Mesh1);
DXDraw.D3DRM2.CreateMesh(Mesh2);
DXDraw.D3DRM2.CreateMesh(Mesh3);
fDataSize := 5000;
fData := DWORD(@buf);
Mesh.GetGroupMaterial(0, IMaterial);
Result :=( Mesh.GetGroup(0,PDWord( vCount), PDWord(fCount), PDWord(vPerFace), fDataSize, PDWORD(fData)));
if (Result <> D3DRM_OK) then
begin
ShowMessage(IntToHex(Result,2));
end;
Result := Mesh.GetVertices(0, 0, vCount, PD3DRMVertex(@ArrayVertex)^);
if (Result <> D3DRM_OK) then
begin
ShowMessage(IntToHex(Result,2));
end;
Mesh0.AddGroup(vCount, fCount, vPerFace, PDWORD(@buf)^, groupid);
Mesh0.SetGroupQuality(groupid, D3DRMRENDER_FLAT);
Mesh0.SetVertices(0,0,vCount, PD3DRMVertex(@ArrayVertex)^);
Mesh0.SetGroupTexture(groupid, image2);
Mesh0.SetGroupQuality(0, Mesh.GetGroupQuality(0));
Mesh0.SetGroupMaterial(0, IMaterial);
// Mesh0.SetGroupQuality(0, Mesh.GetGroupQuality(0));
fDataSize := 5000;
vCount := 0;
fCount := 0;
vPerFace:= 0;
fData := DWORD(@buf);
Result := Mesh.GetGroup(1, @vCount, @fCount, @vPerFace, fDataSize, PDWORD(fData));
if (Result <> D3DRM_OK) then
begin
ShowMessage(IntToHex(Result,2));
end;
Result := Mesh.GetVertices(1, 0, vCount, PD3DRMVertex(@ArrayVertex)^);
if (Result <> D3DRM_OK) then
begin
ShowMessage(IntToHex(Result,2));
end;
Mesh1.AddGroup(vCount, fCount, vPerFace, PDWORD(@buf)^, groupid);
Mesh1.SetGroupQuality(groupid, D3DRMRENDER_FLAT);
Mesh1.SetVertices(0,0,vCount, PD3DRMVertex(@ArrayVertex)^);
Mesh1.SetGroupTexture(groupid, image4);
Mesh1.SetGroupMaterial(0, IMaterial);
Mesh1.SetGroupQuality(0, Mesh.GetGroupQuality(0));
fDataSize := 5000;
Mesh.GetGroup(2, @vCount, @fCount, @vPerFace, fDataSize, PDWORD(fData));
Mesh.GetVertices(2, 0, vCount, PD3DRMVertex(@ArrayVertex)^);
Mesh2.AddGroup(vCount, fCount, vPerFace, PDWORD(@buf)^, groupid);
Mesh2.SetGroupQuality(groupid, D3DRMRENDER_FLAT);
Mesh2.SetVertices(0,0,vCount, PD3DRMVertex(@ArrayVertex)^);
Mesh2.SetGroupTexture(groupid, image3);
Mesh2.SetGroupMaterial(0, IMaterial);
Mesh2.SetGroupQuality(0, Mesh.GetGroupQuality(0));
fDataSize := 5000;
Mesh.GetGroup(3, @vCount, @fCount, @vPerFace, fDataSize, PDWORD(fData));
Mesh.GetVertices(3, 0, vCount, PD3DRMVertex(@ArrayVertex)^);
Mesh3.AddGroup(vCount, fCount, vPerFace, PDWORD(@buf)^, groupid);
Mesh3.SetGroupQuality(groupid, D3DRMRENDER_FLAT);
Mesh3.SetVertices(0,0,vCount, PD3DRMVertex(@ArrayVertex)^);
Mesh3.SetGroupTexture(groupid, image1);
Mesh3.SetGroupMaterial(0, IMaterial);
Mesh3.SetGroupQuality(0, Mesh.GetGroupQuality(0));
Mesh.SetGroupTexture(0, image2);
Mesh.SetGroupTexture(1, image4);
Mesh.SetGroupTexture(2, image3);
Mesh.SetGroupTexture(3, image1);
// Result := Mesh.GetVertices(3, 10, 10, returnPtr);
if (Result <> D3DRM_OK) then
begin
ShowMessage(IntToHex(Result,2));
end;
//load ball
FileName := 'ball.x';
Result := MeshBuilder2.Load(PChar(FileName), nil, D3DRMLOAD_FROMFILE, nil, nil);
if (Result <> D3DRM_OK) then
begin
ShowMessage(IntToHex(Result,2));
end;
MeshBuilder2.Scale(1.4,1.4,1.4);
MeshBuilder2.SetColor(D3DRGB(1, 1, 1));
MeshBuilder2.CreateMesh(BallMesh);
// MeshBuilder2.SetTexture(image1);
BallMesh.SetGroupTexture(0, image3);
Result := BallMesh.Translate(-2,4.5,24);
if (Result <> D3DRM_OK) then
begin
ShowMessage(IntToHex(Result,2));
end;
if (Result <> D3DRM_OK) then
begin
ShowMessage(IntToHex(Result,2));
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -