谁有关于delphiX控件的相关帮助文档及例子啊?谢谢!
解决方案 »
- 使用 TIdTCPClient 发送流的问题
- 如何提取ADOQuery.SQL.Execute;执行返回的数据集?难道没人会吗?急死我了!!!
- 请教COM送BYTE类型的数据的方法,急。
- SQL6.5的表删除不掉(肯定已经坏了),望各位支持一下,谢了(在线等待)
- 2000下屏蔽Ctrl+Alt+Del,高分相送,解决立即给分
- 在数据表中有一个逻辑型字段如何在Dbgrid中以复选框形式进行显示?
- 如何让image1控件能复制剪贴版的图片.
- 怎样用流的形式把图片存到Access数据库里
- 为什么我对数据库进行操作时,总是出现"Table is busy"的错误信息?我用Query和Paradox数据表!
- 新手----游少爷(再问)
- 谁有关于delphiX控件的相关帮助文档及例子啊?谢谢!
- 这句该没错,但为何运行时总报错?
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, DXClass, DXSprite, DXInput, DXDraws,
DXSounds, MMSystem, Wave;type
TMainForm = class(TDXForm)
DXTimer: TDXTimer;
DXDraw: TDXDraw;
DXSpriteEngine: TDXSpriteEngine;
DXInput: TDXInput;
ImageList: TDXImageList;
DXWaveList: TDXWaveList;
DXSound: TDXSound;
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DXDrawFinalize(Sender: TObject);
procedure DXDrawInitialize(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DXTimerTimer(Sender: TObject; LagCount: Integer);
procedure DXTimerActivate(Sender: TObject);
procedure DXTimerDeactivate(Sender: TObject);
procedure DXDrawClick(Sender: TObject);
private
FMoveMode: Boolean;
end;var
MainForm: TMainForm;implementation{$R *.DFM}type
TMonoSprite = class(TImageSprite)
private
FCounter: Double;
FS: Integer;
procedure Hit;
public
procedure DoMove(MoveCount: Integer); override;
end; TPlayerSprite = class(TImageSprite)
protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override;
end;procedure TMonoSprite.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount);
PixelCheck := True;
FCounter := FCounter + (100/1000)*MoveCount;
X := X+Sin256(Trunc(FCounter))*(200/1000)*MoveCount;
Y := Y+Cos256(Trunc(FCounter))*(200/1000)*MoveCount; if not Collisioned then
begin
Inc(FS, MoveCount);
if FS>200 then Dead;
end;
end;procedure TMonoSprite.Hit;
begin
Collisioned := False; Image := MainForm.ImageList.Items.Find('img1-2');
MainForm.DXWaveList.Items.Find('snd').Play(False);
MainForm.DXInput.Joystick.Effects.Find('eff1').Start;
end;procedure TPlayerSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
begin
if Sprite is TMonoSprite then
TMonoSprite(Sprite).Hit;
Done := False;
end;procedure TPlayerSprite.DoMove(MoveCount: Integer);
begin
inherited DoMove(MoveCount); if (MainForm.DXInput.Joystick.X<>0) or (MainForm.DXInput.Joystick.Y<>0) then
begin
X := X + (MainForm.DXInput.Joystick.X/1000)*MoveCount;
Y := Y + (MainForm.DXInput.Joystick.Y/1000)*MoveCount;
end else
begin
if isUp in MainForm.DXInput.States then
Y := Y - (300/1000)*MoveCount; if isDown in MainForm.DXInput.States then
Y := Y + (300/1000)*MoveCount; if isLeft in MainForm.DXInput.States then
X := X - (300/1000)*MoveCount; if isRight in MainForm.DXInput.States then
X := X + (300/1000)*MoveCount;
end; Collision; Engine.X := -X+Engine.Width div 2-Width div 2;
Engine.Y := -Y+Engine.Height div 2-Height div 2;
end;procedure TMainForm.DXTimerActivate(Sender: TObject);
begin
Caption := Application.Title;
end;procedure TMainForm.DXTimerDeactivate(Sender: TObject);
begin
Caption := Application.Title + ' [Pause]';
end;procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin
if not DXDraw.CanDraw then exit; DXInput.Update; if FMoveMode then
LagCount := 1000 div 60; DXSpriteEngine.Move(LagCount);
DXSpriteEngine.Dead; { Description }
DXDraw.Surface.Fill(0);
DXSpriteEngine.Draw; { Frame rate display }
with DXDraw.Surface.Canvas do
begin
Brush.Style := bsClear;
Font.Color := clWhite;
Font.Size := 12;
Textout(0, 0, 'FPS: '+inttostr(DXTimer.FrameRate));
Textout(0, 24, 'Sprite: '+inttostr(DXSpriteEngine.Engine.AllCount));
Textout(0, 48, 'Draw: '+inttostr(DXSpriteEngine.Engine.DrawCount));
if FMoveMode then
Textout(0, 72, 'Time mode: 60 FPS')
else
Textout(0, 72, 'Time mode: Real time'); Release;
end; DXDraw.Flip;
end;procedure TMainForm.DXDrawFinalize(Sender: TObject);
begin
DXTimer.Enabled := False;
end;procedure TMainForm.DXDrawInitialize(Sender: TObject);
begin
DXTimer.Enabled := True;
end;procedure TMainForm.FormCreate(Sender: TObject);
var
i: Integer;
PlayerSprite: TSprite;
begin
Randomize; ImageList.Items.MakeColorTable; DXDraw.ColorTable := ImageList.Items.ColorTable;
DXDraw.DefColorTable := ImageList.Items.ColorTable;
DXDraw.UpdatePalette; with TBackgroundSprite.Create(DXSpriteEngine.Engine) do
begin
SetMapSize(1, 1);
Image := ImageList.Items.Find('background');
Z := -2;
Tile := True;
end; for i:=0 to 200 do
with TMonoSprite.Create(DXSpriteEngine.Engine) do
begin
Image := ImageList.Items.Find('img1');
X := Random(5000)-2500;
Y := Random(5000)-2500;
Z := 2;
Width := Image.Width;
Height := Image.Height;
FCounter := Random(MaxInt);
end; PlayerSprite := TPlayerSprite.Create(DXSpriteEngine.Engine);
with TPlayerSprite(PlayerSprite) do
begin
Image := ImageList.Items.Find('img2');
Z := 2;
Width := Image.Width;
Height := Image.Height;
end;
end;procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
{ Application end }
if Key=VK_ESCAPE then
Close; { Screen mode change }
if (ssAlt in Shift) and (Key=VK_RETURN) then
begin
DXDraw.Finalize; if doFullScreen in DXDraw.Options then
begin
RestoreWindow; DXDraw.Cursor := crDefault;
BorderStyle := bsSizeable;
DXDraw.Options := DXDraw.Options - [doFullScreen];
end else
begin
StoreWindow; DXDraw.Cursor := crNone;
BorderStyle := bsNone;
DXDraw.Options := DXDraw.Options + [doFullScreen];
end; DXDraw.Initialize;
end;
end;procedure TMainForm.DXDrawClick(Sender: TObject);
begin
FMoveMode := not FMoveMode;
if FMoveMode then
begin
DXTimer.Interval := 1000 div 60;
end else
begin
DXTimer.Interval := 0;
end;
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DXPlay, DirectX;
const
DXCHAT_MESSAGE = 0;type
TDXChatMessage = record
MessageType: DWORD; { MessageType is absolutely necessary. }
Len: Integer;
C: array[0..0] of Char;
end;type
TMainForm = class(TForm)
DXPlay1: TDXPlay;
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
procedure DXPlay1AddPlayer(Sender: TObject; Player: TDXPlayPlayer);
procedure DXPlay1DeletePlayer(Sender: TObject; Player: TDXPlayPlayer);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DXPlay1Message(Sender: TObject; Player: TDXPlayPlayer; Data: Pointer;
DataSize: Integer);
procedure Button1Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DXPlay1Open(Sender: TObject);
end;var
MainForm: TMainForm;implementation{$R *.DFM}procedure TMainForm.DXPlay1AddPlayer(Sender: TObject; Player: TDXPlayPlayer);
begin
Memo1.Lines.Add(Format(' %s entered a room.', [Player.Name]));
end;procedure TMainForm.DXPlay1DeletePlayer(Sender: TObject;
Player: TDXPlayPlayer);
begin
Memo1.Lines.Add(Format(' %s left a room.', [Player.Name]));
end;procedure TMainForm.DXPlay1Open(Sender: TObject);
var
i: Integer;
begin
for i:=0 to DXPlay1.Players.Count-1 do
if DXPlay1.Players[i].RemotePlayer then
Memo1.Lines.Add(Format(' %s is entering a room.', [DXPlay1.Players[i].Name]));
end;procedure TMainForm.FormDestroy(Sender: TObject);
begin
DXPlay1.Close;
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
try
DXPlay1.Open;
except
on E: Exception do
begin
Application.ShowMainForm := False;
Application.HandleException(E);
Application.Terminate;
end;
end; MainForm.Caption := Format('%s : %s', [DXPlay1.ProviderName, DXPlay1.SessionName]);
end;procedure TMainForm.DXPlay1Message(Sender: TObject; Player: TDXPlayPlayer;
Data: Pointer; DataSize: Integer);
var
s: string;
begin
case DXPlayMessageType(Data) of
DXCHAT_MESSAGE:
begin
if TDXChatMessage(Data^).Len<=0 then
s := ''
else begin
SetLength(s, TDXChatMessage(Data^).Len);
StrLCopy(PChar(s), @TDXChatMessage(Data^).c, Length(s));
end; Memo1.Lines.Add(Format('%s> %s', [Player.Name, s]));
end;
end;
end;procedure TMainForm.Button1Click(Sender: TObject);
var
Msg: ^TDXChatMessage;
MsgSize: Integer;
begin
MsgSize := SizeOf(TDXChatMessage)+Length(Edit1.Text);
GetMem(Msg, MsgSize);
try
Msg.MessageType := DXCHAT_MESSAGE;
Msg.Len := Length(Edit1.Text);
StrLCopy(@Msg^.c, PChar(Edit1.Text), Length(Edit1.Text)); { The message is sent all. }
DXPlay1.SendMessage(DPID_ALLPLAYERS, Msg, MsgSize); { The message is sent also to me. }
DXPlay1.SendMessage(DXPlay1.LocalPlayer.ID, Msg, MsgSize); Edit1.Text := '';
finally
FreeMem(Msg);
end;
end;procedure TMainForm.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_RETURN then
begin
Button1Click(nil);
key := 0;
end;
end;end.