AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Andorra2D - FUllscreen/Vollbild/Stretch
Thema durchsuchen
Ansicht
Themen-Optionen

Andorra2D - FUllscreen/Vollbild/Stretch

Ein Thema von Myribo · begonnen am 29. Jul 2009 · letzter Beitrag vom 31. Jul 2009
 
Myribo

Registriert seit: 11. Sep 2007
Ort: Bielefeld
14 Beiträge
 
#5

Re: Andorra2D - FUllscreen/Vollbild/Stretch

  Alt 30. Jul 2009, 14:28
jau, sauber!
funktioniert einwadfrei!!
muss jetzt leider auf xp verzichten, weils damit leider gar nicht geht (directx und ogl) aber dafür klappts jetzt auch
schönen dank für die schnelle und kompetente hilfe!

das ganze sieht bei mir jetzt so aus:

Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var GraphicsFolder:TStringList;
    GraphicsIndex:Integer;
begin
  // Grundlegendes
  IsMouseDown:=False;
  Randomize;

  // Klassen usw. initialisieren
  GlobalSounds:=TInstantSound.Create;
  GraphicsFolder:=TStringList.Create;

  EasyTimer:=TEasyTimer.Create;

  // Andorra 2D initialisieren
  OutputScreen:=TAdDraw.Create(self);
  OutputScreen.DllName:='DLL/AndorraDX93D.dll';

  OutputScreen.Options:=OutputScreen.Options+[aoAntialias];

  with OutputScreen.Display do
  begin
    Width:=Screen.Width;
    Height:=Screen.Height;
    BitDepth:=ad32Bit;
    DisplayMode:=dmFullscreen;
  end;

  OutputScreen.Initialize;

  GameScreen:=TAdTextureSurface.Create(OutputScreen);
  GameScreen.SetSize(1280,720);

  PerformanceCounter:=TAdPerformanceCounter.Create;
  PerformanceCounter.MaximumFrameRate:=150;
  PerformanceCounter.MaximumTimeGap:=30;

  // Bilder in die ImageList laden
  ImageList:=TAdImageList.Create(OutputScreen);

  // PNG Grafiken laden
  SpecialFunctions.FindAllFiles(GraphicsFolder,'Graphics','*.png',False);
  for GraphicsIndex:=0 to pred(GraphicsFolder.Count) do
  begin
    with ImageList.Add(ChangeFileExt(ExtractFileName(GraphicsFolder[GraphicsIndex]),'')) do
    begin
      Texture.LoadGraphicFromFile(GraphicsFolder[GraphicsIndex],True,clNone);
      Texture.Filter:=atAnisotropic;
    end;
  end;

  ImageList.Restore;

  // EasyDraw initialisieren
  EasyDraw:=TEasyDrawAd.Create(GameScreen,ImageList);

  // Spielszenen / Status initialisieren
  GameScenes[0]:=TScene_Loader.Create(frmMain,GameScreen,ImageList);
  GameScenes[1]:=TScene_Intro.Create(frmMain,GameScreen,ImageList);
  GameScenes[2]:=TScene_Splash.Create(frmMain,GameScreen,ImageList);
  GameScenes[3]:=TScene_MainMenu.Create(frmMain,GameScreen,ImageList);
  GameScenes[4]:=TScene_NewGame.Create(frmMain,GameScreen,ImageList);
  GameScenes[5]:=TScene_Game.Create(frmMain,GameScreen,ImageList);

  GameSceneNow:=0;
  GameSceneNext:=0;

  // Alles einschalten
  Application.OnIdle:=Cadence;
end;
...und...

Delphi-Quellcode:
procedure TfrmMain.Cadence(Sender:TObject; var Done:boolean);
begin
  // Initialisierung
  GameScreen.ClearSurface(clWhite);
  OutputScreen.BeginScene;
  PerformanceCounter.Calculate;

  // Timer berechnen
  EasyTimer.Cadence(PerformanceCounter.TimeGap);

  // Szene zeichnen
  if (GameSceneNow<>GameSceneNext) AND (NOT (GameSceneChangeSize<2)) then
    GameScenes[GameSceneNext].Draw(PerformanceCounter.TimeGap)
  else
    GameScenes[GameSceneNow].Draw(PerformanceCounter.TimeGap);


  if GameSceneNow<>GameSceneNext then
  begin
    EasyDraw.Image('Image_Star_ChangeScene',640,360,Round(GameSceneChangeAlpha),Round(GameSceneChangeSize*30),
                   Round(ImageList.Find('Image_Star_ChangeScene').Width*GameSceneChangeSize),
                   Round(ImageList.Find('Image_Star_ChangeScene').Height*GameSceneChangeSize));

    // Szenenwechsel
    if GameSceneChangeSize<2 then
    begin
      GameSceneChangeSize:=GameSceneChangeSize+PerformanceCounter.TimeGap/400 ;
    end
    else if GameSceneChangeAlpha>0 then
    begin

      if GameSceneChangeAlpha=255 then
      begin
        TRY
          GameScenes[GameSceneNext].Run;
        EXCEPT
          // Die Szene hat keine Run-Methode
        END;
      end;

      GameSceneChangeAlpha:=GameSceneChangeAlpha-PerformanceCounter.TimeGap/5;
    end
    else
    begin
      GameSceneNow:=GameSceneNext;

    end;
  end;

  // Surface zeichnen
  OPS_Height:=OutputScreen.Width/16*9;
  GameScreen.Image.Texture.Filter:=atAnisotropic;
  GameScreen.Image.StretchDraw(OutputScreen,AdRect(0,(OutputScreen.Height-OPS_Height)/2,OutputScreen.Width,OPS_Height+((OutputScreen.Height-OPS_Height)/2)),0);

  // Schwarze Balken zeichnen
  OutputScreen.Canvas.Brush.Color:=AdCol32_Black;
  OutputScreen.Canvas.Pen.Color:=AdCol32_Black;
  OutputScreen.Canvas.Rectangle(0,0,OutputScreen.Width,Round((OutputScreen.Height-OPS_Height)/2));
  OutputScreen.Canvas.Rectangle(0,Round(((OutputScreen.Height-OPS_Height)/2)+OPS_Height),OutputScreen.Width,OutputScreen.Height);

  // FPS anzeigen
  OutputScreen.Canvas.TextOut(2,1,IntToStr(PerformanceCounter.FPS)+' FPS');

  // Zeichnen beenden und ausgeben
  OutputScreen.EndScene;
  OutputScreen.Flip;

  Done:=False;
end;
die berechnungen sind nicht so ganz schön und sauber, aber erstmal funktionierts.


auf diesem wege auch noch einmal ein großes lob für andorra 2d. nicht schlecht, was du da mit deinen jungen jahren (bist ja genau 4 tage älter als ich^^) auf die beine gestellt hast.
ich werde dich mal informieren, wenn das spiel dann fertiggestellt ist.

in diesem sinne
schönen dank
myribo

[edit=TBx]Formatierung korrigiert, damits wieder auf den Schirm paßt Mfg, TBx[/edit]
Miniaturansicht angehängter Grafiken
td3_2_213.jpg   td3_1_193.jpg  
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz