{{notification.text}}

MirGames

17.02.10 16:17
0
DRON
а как с такой картинки анимацию сделать?
в двиге это через матрицу делается или процедура какая есть7
Отредактировано: 17.02.10 16:33
#61
04.03.10 18:53
0
Ketal Kour
я использую переключатель:
Код
// объявление классов Map и Menu
...
var
  DrawMode: byte;

const
  DRAW_GAME = 1;
  DRAW_MENU = 2;
...
procedure Draw
begin
  case DrawMode of
    DRAW_GAME : Map.Draw;
    DRAW_MENU : Menu.Draw;
  end;
end;

еще можешь посмотреть здесь на мои попытки создать ГУИ на DGLE1
#62
Ketal Kour
04.03.10 22:25
0
Android
Спасибо за оказанную помощь.
Ребята, может у кого то есть еще что то, буду благодарен.
Отредактировано: 05.03.10 00:13
#63
Программир Всия Руси!
05.03.10 02:49
0
Ketal Kour
Есть на DGLE1, можешь скачать с моего сайта там игра танчеки дак там и меню и сцены есть и как раз на ламерском уровне :)
#64
Ketal Kour
05.03.10 02:54
0
Dron
Спасибо, попробую перегнать на Dgle2. По твоему совету начал изучать сразу 2-й двиг.
#65
Программир Всия Руси!
05.03.10 14:20
0
Цитата(Ketal_Kour @ Сегодня, 00:54)
[snapback]102337[/snapback]
По твоему совету начал изучать сразу 2-й двиг

Ну это то правильно.
#66
16.03.10 13:12
0
DRON
Перевел на Delphi пример Particles
Код

program Particles;

uses
  Windows,
  DGLE2 in '..\..\..\..\Include\Delphi\DGLE2.pas',
  DGLE2_types in '..\..\..\..\Include\Delphi\DGLE2_types.pas';

const
  APP_CAPT = 'Particles';
  DLL_PATH = '..\..\..\Bin\DGLE2.dll';
  RES_PATH = '..\..\..\Shared resources\';
  PYR_PATH = '..\..\Pyro.dplug';

var
  pEngineCore : IEngineCore       = nil;
  pResMan     : IResourceManager  = nil;
  pRender     : IRender           = nil;
  pRender2D   : IRender2D         = nil;
  pInput      : IInput            = nil;
  pPlugin     : IPlugin           = nil;

  pStarTail   : IParticleEffect   = nil;
  pExplo      : IParticleEffect   = nil;
  pFire       : IParticleEffect   = nil;
  pEmitter    : IParticleEmitter  = nil;
  pCursorFire : IParticleEmitter  = nil;

  Mouse   : TMouseStates;
  Counter : Integer = 1;

procedure Init( pParametr : Pointer ); stdcall;
begin
  pEngineCore.GetSubsystem( ESS_RESOURCE_MANAGER, IEngineSubSystem( pResMan ) );
  pEngineCore.GetSubsystem( ESS_RENDER, IEngineSubSystem( pRender ) );
  pEngineCore.GetSubsystem( ESS_INPUT, IEngineSubSystem( pInput ) );

  pRender.SetClearColor( Color4( 0, 0, 0, 0 ) );
  pRender.GetRender2D( pRender2D );
    
  pResMan.Load( RES_PATH + 'pyro_particles\StarTrail.pyro', IEngBaseObj( pStarTail ) );
  pResMan.Load( RES_PATH + 'pyro_particles\ExplodeFlash.pyro', IEngBaseObj( pExplo ) );
  pResMan.Load( RES_PATH + 'pyro_particles\Fire.pyro', IEngBaseObj( pFire ) );

  pStarTail.CreateEmitter( pEmitter );
  pEmitter.SetPosition( Point2( 400, 300 ) );

  pFire.CreateEmitter( pCursorFire );
end;

procedure Free( pParametr : Pointer ); stdcall;
begin
  pRender2D   := nil;
  pInput      := nil;
  pRender     := nil;
  pResMan     := nil;
  pPlugin     := nil;
  pEngineCore := nil;

//pResMan.FreeResource( IEngBaseObj( pFire ) );
//pResMan.FreeResource( IEngBaseObj( pExplo ) );
//pResMan.FreeResource( IEngBaseObj( pStarTail ) );

  pFire       := nil;
  pExplo      := nil;
  pStarTail   := nil;
  pEmitter    := nil;
  pCursorFire := nil;
end;

procedure Process( pParametr : Pointer ); stdcall;
begin
  pInput.GetMouseStates( Mouse );
  pCursorFire.SetPosition( Point2( Mouse.iX, Mouse.iY ) );

  if( Counter mod 50 ) = 0 then
  begin
    pExplo.CreateEmitter( pEmitter );
    pEmitter.SetPosition( Point2( Random( 800 ), Random( 600 ) ) );
  end;

  Inc( Counter );
end;

procedure Render( pParametr : Pointer ); stdcall;
begin
  pRender2D.Begin2D();
    pStarTail.Draw();
    pExplo.Draw();
    pFire.Draw();
  pRender2D.End2D();
end;

begin
  if( GetEngine( DLL_PATH, pEngineCore ) ) then
  begin
    if( SUCCEEDED( pEngineCore.InitializeEngine( 0, APP_CAPT, EngWindow() ) ) ) then
    begin
      pEngineCore.ConsoleVisible( FALSE );

      pEngineCore.ConnectPlugin( PYR_PATH, pPlugin );

      pEngineCore.AddProcedure( EPT_INIT,     @Init );
      pEngineCore.AddProcedure( EPT_PROCESS,  @Process );
      pEngineCore.AddProcedure( EPT_RENDER,   @Render );
      pEngineCore.AddProcedure( EPT_FREE,     @Free );
      pEngineCore.StartEngine();
    end;
    FreeEngine();
  end
  else
    MessageBox( 0, 'Couldnt load '+DLL_PATH+'!', APP_CAPT, MB_OK or MB_ICONERROR or MB_SETFOREGROUND );
end.


А как правильно сделать Free?
Отредактировано: 16.03.10 15:40
#67
Программир Всия Руси!
16.03.10 14:14
0
SkAT
Посмотри как в других примерах, т.е. Resman.FreeResource надо вызывать ДО того как занилить сами ресурсы.
За семпл спасибо, включу в SDK.

Update:
Не проверял нету дельфи, но по моему должно быть так
Код

procedure Free( pParametr : Pointer ); stdcall;
begin
  pEngineCore := nil;
  pResMan     := nil;
  pRender     := nil;
  pRender2D   := nil;
  pInput      := nil;
  pPlugin     := nil;

  pEmitter    := nil;
  pCursorFire := nil;

  pResMan.FreeResource(IEngBaseObj(pStarTail));
  pResMan.FreeResource(IEngBaseObj(pExplo));
  pResMan.FreeResource(IEngBaseObj(pFire));
end;

Отредактировано: 16.03.10 14:21
#68
16.03.10 15:04
0
DRON
Цитата
Не проверял нету дельфи, но по моему должно быть так

Не, т.к. у меня прога завершается OK. С твоим кодом, окошко с ошибкой вылезло.
Ладно, гляну как в других, если что переделаю.

Add: Странно если добывить pResMan.FreeResource, то закрывается с ошибкой, закоментировал,
а так как есть все работает Good.
Отредактировано: 16.03.10 15:45
#69
17.03.10 06:31
0
DRON
Перевел на Delphi пример Sprites2D, только шрифт загруженный через
pResMan.GetDefaultResource( EOT_BITMAP_FONT, IEngBaseObj( pFnt ) );
никак не удалось отобразить с помощью,
pFnt.GetDimensions( TxtStr, tw, th );
pFnt.Draw2D( ( 800 - tw ) div 2, 600 - th, TxtStr, Color4() );
т.к. вылетает с ошибкой, поэтому закоментил ... почему так?

Без текста все работает! ;)

Код

program Sprites2D;

uses
  Windows, Math,
  DGLE2 in '..\..\..\..\Include\Delphi\DGLE2.pas',
  DGLE2_types in '..\..\..\..\Include\Delphi\DGLE2_types.pas';

const
  APP_CAPT = 'Sprites2D';
  DLL_PATH = '..\..\..\Bin\DGLE2.dll';
  RES_PATH = '..\..\..\Shared resources\';

var
  pEngineCore : IEngineCore       = nil;
  pResMan     : IResourceManager  = nil;
  pRender     : IRender           = nil;
  pRender2D   : IRender2D         = nil;
  pInput      : IInput            = nil;
  pMusic      : IMusic            = nil;
  pBg         : ITexture          = nil;
  pSky        : ITexture          = nil;
  pFog        : ITexture          = nil;
  pTexGirl    : ITexture          = nil;
  pLight      : ITexture          = nil;
  pLight2     : ITexture          = nil;
  pFnt        : IBitmapFont       = nil;

  Camera  : TPoint2;
  Lights  : array[0..4] of TPoint2;
  Counter : Integer = 800;
  CamAngle, CamScale : Single;
  TxtStr : PAnsiChar = '"Esc" - exit; "~" - console; "Alt"+"Enter" - fullscreen/windowed;';

procedure Init( pParametr : Pointer ); stdcall;
begin
  Lights[0] := Point2();
  Lights[1] := Point2(  750.0, 315.0 );
  Lights[2] := Point2( 1000.0, 450.0 );
  Lights[3] := Point2( 1010.0, 650.0 );
  Lights[4] := Point2(  150.0, 550.0 );

  pEngineCore.GetSubsystem( ESS_RESOURCE_MANAGER, IEngineSubSystem( pResMan ) );
  pEngineCore.GetSubsystem( ESS_RENDER, IEngineSubSystem( pRender ) );
  pEngineCore.GetSubsystem( ESS_INPUT,  IEngineSubSystem( pInput ) );

  pRender.GetRender2D( pRender2D );

  //It's 2D game adapted only for 800X600 resolution, if even resolution will be higher it won't effect game.
  pRender2D.SetResolutionCorrection( 800, 600 );

  //Setting batch mode to auto, it's a good descision for any 2D application.
  pRender2D.BatchRender( BM_AUTO );

  pInput.Configure( ICF_HIDE_CURSOR );

  pResMan.Load( RES_PATH + 'sounds\music.mid', IEngBaseObj( pMusic ) );
  pMusic.Play();

  pResMan.Load( RES_PATH + 'bg.png',    IEngBaseObj( pBg ),     TEXTURE_LOAD_DEFAULT_2D );
  pResMan.Load( RES_PATH + 'sky.jpg',   IEngBaseObj( pSky ),    TEXTURE_LOAD_DEFAULT_2D );
  pResMan.Load( RES_PATH + 'fog.png',   IEngBaseObj( pFog ),    TEXTURE_LOAD_DEFAULT_2D );
  pResMan.Load( RES_PATH + 'light.jpg', IEngBaseObj( pLight2 ), TEXTURE_LOAD_DEFAULT_2D );

  pResMan.Load( RES_PATH + 'sprites\girl.png', IEngBaseObj( pTexGirl ), TEXTURE_LOAD_DEFAULT_2D );
  pTexGirl.SetFrameSize( 55, 117 );

  pResMan.Load( RES_PATH + 'sprites\light.jpg', IEngBaseObj( pLight ), TEXTURE_LOAD_DEFAULT_2D );
  pLight.SetFrameSize( 64, 128 );

  //The way we can get default system font
  pResMan.GetDefaultResource( EOT_BITMAP_FONT, IEngBaseObj( pFnt ) );
end;

procedure Process( pParametr : Pointer ); stdcall;
var
    Pressed : Boolean;
begin
  pInput.GetKey( KEY_ESCAPE, Pressed );
  if Pressed then
    pEngineCore.QuitEngine();

  Camera.X := 400.0 + 250.0 + Cos( Counter / 200.0 ) * 225.0;
  Camera.Y := 300.0 + 300.0;

  CamAngle := Sin( Counter / 200.0 ) * 5.0;
  CamScale := 1.0 + Abs( Sin( Counter / 200.0 ) * 0.25 );

  Lights[0].X := 650.0 - Cos( Counter / 100.0 ) * 100.0;
  Lights[0].Y := 700.0 - Sin( Counter / 150.0 ) * 50.0;

  Inc( Counter );
end;

procedure Render( pParametr : Pointer ); stdcall;
var
  i, j : Integer;
  tw, th : Cardinal;
begin
  pRender2D.Begin2D();
  //Draw static sky
  pRender2D.DrawSpriteS( pSky, Point2( 0.0, 0.0 ), Point2( 800.0, 600.0 ) );

  //Draw background
  pRender2D.SetCamera( Point2( Camera.X / 1.5, Camera.Y / 1.5 ), CamAngle, Point2( CamScale, CamScale ) );
  pRender2D.SetBlendMode( EBF_NORMAL );
  pRender2D.DrawSpriteC( pBg, Point2( -200.0, 150.0 ), Point2( 1399.0, 517.0 ), RectF( 0, 905, 1399, 517 ), 0, EF_BLEND );

  //Draw moveing fog on background
  pRender2D.SetCamera( Point2( Camera.X / 1.2, Camera.Y / 1.2 ), CamAngle, Point2( CamScale, CamScale ) );
  pRender2D.SetBlendMode( EBF_ADD );

  pRender2D.SetColorMix( Color4( $FFFFFF, 64 ) );

    for i := 0 to 15 do
      for j := 0 to 1 do
        pRender2D.DrawSpriteS( pFog,
              Point2( 500.0 + Sin( i ) * 600.0 - Cos((Counter / 50.0 ) ) * 20.0 * ( i mod 3 ),
                  500.0 + Sin( j * 2.5 ) * 150.0 - Sin( Counter / 50.0 ) * 20.0 * ( i mod 3 ) ),
                Point2( 250.0, 150.0 ), 0, ( EF_BLEND or EF_COLORMIX ) );

    //Draw foreground scene
    pRender2D.SetCamera( Camera, CamAngle, Point2( CamScale, CamScale ) );
    pRender2D.SetBlendMode( EBF_NORMAL );
    pRender2D.DrawSpriteC( pBg, Point2(), Point2( 1399.0, 900.0 ), RectF( 0, 0, 1399, 900 ), 0, EF_BLEND );

    //Pfong disc under moving light
      pRender2D.SetBlendMode(EBF_ADD);

    pRender2D.SetVerticesOffset( Point2( -100.0, 0.0 ), Point2( -100.0, 0.0 ), Point2(), Point2() );
    pRender2D.SetColorMix( Color4( 65, 59, 193, 255 ) );

    pRender2D.DrawSpriteS( pLight2, Point2( Lights[0].X - 32.0, Lights[0].Y + 64.0 ), Point2( 256.0, 256.0 ), 0, ( EF_VERTICES_OFFSET or EF_BLEND or EF_COLORMIX ) );

    //Girl Shadow
    pRender2D.SetBlendMode( EBF_NORMAL );
    pRender2D.SetVerticesOffset( Point2( -150.0 + Cos( Counter / 100.0 ) * 100.0, -55.0 ), Point2( -50.0 + Cos( Counter / 100.0 ) * 100.0, -55.0 ), Point2( 15.0, 5.0), Point2( 15.0, 5.0 ) );
    pRender2D.SetColorMix( Color4( $000000, 128 ) );
    pRender2D.DrawSpriteA( pTexGirl, Point2( 550.0, 725.0 ), Point2( 60.0, 120.0 ), ( Counter div 5 ) mod 16, 0, ( EF_VERTICES_OFFSET or EF_BLEND or EF_COLORMIX ) );

    //Girl Sprite
    pRender2D.DrawSpriteA( pTexGirl, Point2( 550.0, 725.0), Point2( 60.0, 120.0 ), ( Counter div 5 ) mod 16, 0, EF_BLEND );
    pRender2D.SetBlendMode( EBF_ADD );

        for i := 0 to 4 do
      pRender2D.DrawSpriteA( pLight, Point2( Lights[i].X, lights[i].Y ), Point2( 64.0, 128.0 ), ( Counter div 2 ) mod 14, 0, EF_BLEND );

    //The way to return default camera (turn camera off)
    //pRender2D->SetCamera(TPoint2());
    // Не пашет :(
    //pFnt.GetDimensions( TxtStr, tw, th );
    //pFnt.Draw2D( ( 800 - tw ) div 2, 600 - th, TxtStr, Color4() );

    pRender2D.End2D();
end;

procedure Free( pParametr : Pointer ); stdcall;
begin
  pResMan.FreeResource( IEngBaseObj( pFnt ) );
  pResMan.FreeResource( IEngBaseObj( pLight ) );
  pResMan.FreeResource( IEngBaseObj( pTexGirl ) );
  pResMan.FreeResource( IEngBaseObj( pLight2 ) );
  pResMan.FreeResource( IEngBaseObj( pSky ) );
  pResMan.FreeResource( IEngBaseObj( pFog ) );
  pResMan.FreeResource( IEngBaseObj( pBg ) );
  pResMan.FreeResource( IEngBaseObj( pMusic ) );
  pFnt        := nil;
  pLight      := nil;
  pTexGirl    := nil;
    pLight2     := nil;
    pFog        := nil;
    pSky        := nil;
    pBg         := nil;
    pMusic      := nil;

  pRender2D   := nil;
  pInput      := nil;
  pRender     := nil;
  pResMan     := nil;
  pEngineCore := nil;
end;

begin
  if( GetEngine( DLL_PATH, pEngineCore ) ) then
  begin
    if( SUCCEEDED( pEngineCore.InitializeEngine( 0, APP_CAPT, EngWindow( 800, 600, TRUE, FALSE, 1, EWF_ALLOW_SIZEING ) ) ) ) then
    begin
      pEngineCore.ConsoleVisible( FALSE );

      pEngineCore.AddProcedure( EPT_INIT,     @Init );
      pEngineCore.AddProcedure( EPT_PROCESS,  @Process );
      pEngineCore.AddProcedure( EPT_RENDER,   @Render );
      pEngineCore.AddProcedure( EPT_FREE,     @Free );
      pEngineCore.StartEngine();
    end;
    FreeEngine();
  end
  else
    MessageBox( 0, 'Couldnt load '+DLL_PATH+'!', APP_CAPT, MB_OK or MB_ICONERROR or MB_SETFOREGROUND );
end.
Отредактировано: 17.03.10 09:33
#70
17.03.10 07:37
0
DRON
В хедере для Delphi бага ;)
EOT_BITMAP_FONT = 5, по идее уже 7 будет

// C++
enum E_ENG_OBJ_TYPE
{
EOT_UNKNOWN = 0,
EOT_3DNODE,
EOT_TEXTURE,
EOT_MESH,
EOT_MODEL,
EOT_SHADER,
EOT_PROGRAM,
EOT_BITMAP_FONT,
EOT_PARTICLE_EFFECT,
EOT_SOUND_SAMPLE,
EOT_MUSIC
};

// Delphi
//E_ENG_OBJ_TYPE
EOT_UNKNOWN = 0;
EOT_3DNODE = 1;
EOT_TEXTURE = 2;
EOT_MESH = 3;
EOT_MODEL = 4;
EOT_BITMAP_FONT = 5;
EOT_PARTICLE_EFFECT = 6;
EOT_SOUND_SAMPLE = 7;
EOT_MUSIC = 8;

Add: Так работает, но ресурс pFnt норм не освобождает, хотя pMusic и т.д. - OK
//E_ENG_OBJ_TYPE
EOT_UNKNOWN = 0;
EOT_3DNODE = 1;
EOT_TEXTURE = 2;
EOT_MESH = 3;
EOT_MODEL = 4;
EOT_SHADER = 5;
EOT_PROGRAM = 6;
EOT_BITMAP_FONT = 7;
EOT_PARTICLE_EFFECT = 8;
EOT_SOUND_SAMPLE = 9;
EOT_MUSIC = 10;
Отредактировано: 17.03.10 09:37
#71
17.03.10 11:43
0
SKAT
попробовал твой пример с частицами . компилится намана. но на радике пахать не хотит :( может радик старый? х1300 моделька
#72
Программир Всия Руси!
17.03.10 12:24
0
DYUMON
Дрова свежие попробуй хотя бы. Ваще там в партиклах ошибка есть надо ее поправить.

SkAT
Ага сенкс что нашел баг, я за всем могу и не уследить :)
#73
17.03.10 13:00
0
DRON
Цитата
Ага сенкс что нашел баг, я за всем могу и не уследить

До, пожалуста ;)
Я думал что примеры, уже будут переведеныв этом релизе, а пришлось самому руку немного приложить. В результате чего еще багу отловил ;)
Ну теперь для Delphi больше примеров будет.
Но до релиза еще надо подождать т.к. баги лезут :)

Еще одну нашел, потом напишу...
Отредактировано: 17.03.10 13:38
#74
17.03.10 13:23
0
DYUMON
Цитата
попробовал твой пример с частицами . компилится намана. но на радике пахать не хотит :( может радик старый? х1300 моделька

Не знаю, у меня радика под рукой нет.
А на GF9600GT и встроенной древней Intel 830M с 64Mb, все ништяк.
#75
18.03.10 16:41
0
DRON
Да, в Delphi не нашел GetUniform, SetI :( может еще чего нет?
Хотя может и без них можно обойтись?
#76
Программир Всия Руси!
18.03.10 17:43
0
SkAT
В дельфи интерфейсы шейдеров не переписаны просто, я не успел тогда.
#77
19.03.10 05:31
0
как у IRender2D узнать цвет определенного пикселя?
#78
Программир Всия Руси!
19.03.10 09:15
0
MIV
Хм на данный момент можно только в пару строк ЖЛНого кода. Могу привести. Я честно говоря даже не думал о такой необходимости... А это за чем надо?
#79
19.03.10 18:13
0
Просто в моём проекте игровое поле поделено на сектора и имеет маску, каждый сектор имеет свой уникальный цвет в этой маске, короче благодаря этому я выделяю нужный сектор.
#80
Программир Всия Руси!
19.03.10 22:30
0
MIV
В версии которую выложу в понедельник сделаю такую неучтенную мноу возможность.
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}