谁有关于delphiX控件的相关帮助文档及例子啊?谢谢!

解决方案 »

  1.   

    unit Main;interfaceuses
      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.
      

  2.   

    unit Main;interfaceuses
      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.