Autor Beitrag
Hugo343
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 114
Erhaltene Danke: 2

Windows 7
Turbo Delphi, Dev C++
BeitragVerfasst: Fr 20.05.11 21:52 
HalliHallo, meine Antstrengungen ziehen sich in letzter Zeit auf mein 3D Irrgarten-Spiel und da soll auch der passende Sound nicht fehlen (Fußschritte, Geräusche, etc.). Nachdem ich so einige Bibliotheken probiert habe, die auch räumlichen Ton unterstützen, bin ich ein wenig ernüchtert und habe nun mal Audorra ausprobiert. Nur leider finden sich dazu keine Tut's (Google, DelphiForum sowie das offizielle Audorra-Wiki sind da recht ausgetrocknet). Vielleicht gibt es hier einige, die sich damit schon einmal beschäftigt haben, da wäre ich dankbar für jede Hilfe :wink: .

MfG, Hugo
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 21.05.11 04:44 
Ich habe es mal heruntergeladen, igendwie ist das schon komisch, weil die Demo so im Moment eigentlich nicht funktionieren kann. Aber wenn du kurz in den Quelltext schaust, dann siehst du, dass du nur den Treibernamen setzen musst und beim Setzen des Treibernamens ein Semikolon nach dem else zu viel ist.

Es gibt jedenfalls nicht für alles Tutorials. Sag doch besser wo gerade dein Problem ist. ;-)

Da das Projekt jedenfalls noch in der Vorschauphase war und seit anderthalb Jahren keine Neuigkeiten mehr dazukamen...

// EDIT:
Aber wirklich laden tun die Demos die Dateien trotzdem nicht. :gruebel:
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 21.05.11 09:16 
Du kannst dir auch sonst gerne mal das Elysion Framework angucken. :)

github.com/freezedev/elysion

Aktuell planen wir zwei Releases im Monat, wobei die dann eher von kleineren Erweiterungen gespickt sind. Größte Neuerung im Juni wird das neue Rendering- und Shader-System sein, welches ich aktuell noch entwickel. Ansonsten ist Elysion auf intuitive und schnelle Entwicklung von Spielen und grafischen Applikationen jeder Art getrimmt. Außerdem bietet Elysion alle Features, die man als Spieleentwickler in den Anfängen braucht:

* Input
* Sprite-Rendering
* Kollisionserkennung
* Window-Management
* Erweiterbarkeit

Wir arbeiten aktuell wieder viel an Elysion und hoffen auch eine Scripting-Engine integrieren zu können. Hier mal ein kleiner Ausschnitt aus einer Beispielapplikation:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
unit uGame;

interface

uses
  ElysionTypes,
  ElysionApplication,
  ElysionScene,
  ElysionLogger,
  ElysionColor,
  ElysionGraphics,
  ElysionTrueTypeFont,
  ElysionTimer,
  ElysionInput,
  ElysionUtils,
  ElysionRendering,
  ElysionTexture,

  SysUtils,
  uBasic,
  uGlobal,
  uConfig,
  uMainMenu,
  uGameScreen,
  uCredits,
  uOptions;

type
  TGame = class(TelGame)
  private
    fMainMenu: TMainMenu;
    fGameScreen: TGameScreen;
    fCredits: TCredits;    
    fOptions: TOptions;
    
    fLoadScreen: TelSprite;

    fFont: TelTrueTypeFont;
    fShowFPS, fDebug: Boolean;
    fForceFullscreen, fForceWindow: Boolean;

    //{$ifdef NG_RENDERING }

    fRenderTarget :  TelRenderTarget;

    //{$endif}

  public
    constructor Create(); Override;
    destructor Destroy; Override;
    
    procedure Initialize(); Override;

    procedure Render(); Override;
    procedure Update(dt: Double = 0.0); Override;
    procedure HandleEvents(); Override;
  published
    property Debug: Boolean read fDebug write fDebug;
    property ForceFullscreen: Boolean read fForceFullscreen write fForceFullscreen;
    property ForceWindow: Boolean read fForceWindow write fForceWindow;

    property Font: TelTrueTypeFont read fFont write fFont;

    property MainMenu: TMainMenu read fMainMenu write fMainMenu;
    property GameScreen: TGameScreen read fGameScreen write fGameScreen;
    property Credits: TCredits read fCredits write fCredits;
    property Options: TOptions read fOptions write fOptions;

    property ShowFPS: Boolean read fShowFPS write fShowFPS;
  end;

implementation

constructor TGame.Create;
var
  tmpFullscreen: Boolean;
begin
  Debug := true;


  fForceFullscreen := false;
  fForceWindow := false;

  fShowFPS := false;
  GameState := gsMainMenu;

  // Check for commandline parameters
  if Self.Param('-debug'then Debug := true;
  if Self.Param('-fullscreen'then ForceFullscreen := true;
  if Self.Param('-window'then ForceWindow := true;

  // Get ya priorities straight
  if Debug then
  begin
    TelLogger.getInstance.Priorities := [ltNote, ltWarning, ltError];
    tmpFullscreen := false
  end else tmpFullscreen := true;

  if (ForceWindow) and (not ForceFullscreen) then tmpFullscreen := false
    else tmpFullscreen := true;

  // Super
  if ((Desktop.Width = 1024and (Desktop.Height = 600)) then
    inherited Create(Desktop.Width, Desktop.Height, AppConfig.Bits, true)
  else
    inherited Create(AppConfig.Width, AppConfig.Height, AppConfig.Bits, false);

  fLoadScreen := TelSprite.Create;
  fLoadScreen.LoadFromFile(GetResImgPath + 'loadscreen.jpg');

  fRenderTarget := TelRenderTarget.Create;

end;

destructor TGame.Destroy;
begin
  inherited;

  fLoadScreen.Destroy;

  MainMenu.Destroy;
  if GameScreen <> nil then GameScreen.Destroy;
end;

procedure TGame.Initialize;
var
  newRatio: Single;
begin

  // Initialize Audio here if you have any sound/music
  //Audio.Initialize();


  ActiveWindow.BeginScene;
  fLoadScreen.Draw;
  ActiveWindow.EndScene;

  ActiveWindow.Caption := 'My Application';
  ActiveWindow.ShowCursor();


  fFont := TelTrueTypeFont.Create;
  fFont.LoadFromFile(GetStdFont, 16);
  fFont.Color := Color.clWhite;
  fFont.RenderStyle := rtBlended;



  //Application.LogDriverInfo();
  Input.DebugInfo();

  fRenderTarget := TelRenderTarget.Create;


  MainMenu := TMainMenu.Create();
  Options := TOptions.Create();
  Credits := TCredits.Create();

end;

procedure TGame.Render;
var fSprite : TelSprite;  fTexture : TelTexture;  fColor : TelColor;
begin

  fRenderTarget.Bind;

  if MainMenu.NewGameClick then
  begin
    fLoadScreen.Draw;
    ActiveWindow.EndScene;

    if fGameScreen <> nil then FreeAndNil(fGameScreen);
    fGameScreen := TGameScreen.Create;

    MainMenu.NewGameClick := false;
  end;


  case GameState of
    gsMainMenu: MainMenu.Render();
    gsOptions: Options.Render();
    gsIntro: ; //< As if we would need an intro? ;)
    gsCredits: Credits.Render();
    gsGame: GameScreen.Render();
  end;

  fSprite := TelSprite.Create();
  fTexture := TelTexture.Create();
  fTexture.LoadFromGL( fRenderTarget.TextureId, ActiveWindow.Width, ActiveWindow.Height );
  fSprite.LoadFromTexture(fTexture);
  fRenderTarget.Unbind;

  fColor.R := 150;
  fColor.G := 140;
  fColor.B := 120;

  fSprite.Draw;
  
end;

procedure TGame.Update(dt: Double);
begin
  
  if ShowFPS then
    fFont.TextOut(makeV3f(880), Format('FPS: %.2f Delta: %.5f \n Mouse Abs: %d %d Rel: %d %d',
      [ActiveWindow.FPS, ActiveWindow.DeltaTime,
       Input.Mouse.Cursor.X, Input.Mouse.Cursor.Y,
       Input.Mouse.RelCursor.X, Input.Mouse.RelCursor.Y]));


  case GameState of
    gsCredits:
    begin
      Credits.Update(dt);
    end;
    gsOptions:
    begin
      Options.Update(dt);
    end;
    gsMainMenu:
    begin
      MainMenu.Update(dt);
    end;
    gsGame:
    begin
      GameScreen.Update(dt);
    end;
  end;

end;

procedure TGame.HandleEvents();
begin
  case GameState of
    gsCredits:
    begin
      Credits.HandleEvents;
    end;
    gsOptions:
    begin
      Options.HandleEvents;
    end;
    gsMainMenu:
    begin
      MainMenu.HandleEvents;
    end;
    gsGame:
    begin
      GameScreen.HandleEvents;
    end;
  end;

  // Keyboard Inputs
  if GameState <> gsMainMenu then
  begin
    if Input.Keyboard.isKeyHit(Key.Escape) or Input.XBox360Controller.Back then GameState := gsMainMenu;
  end else
  begin
    if Input.Keyboard.isKeyHit(Key.Escape) or Input.XBox360Controller.Back then Application.Quit();
  end;

  // Fullscreen not working at the moment, needs fixing
  if Input.Keyboard.isKeyHit(Key.F) then
  begin
    ShowFPS := not ShowFPS;
  end;

  if Input.Keyboard.isKeyHit(Key.T) then
  begin
    ActiveWindow.TakeScreenShot('screenshot');
  end;

end;

end.


Der Code zeigt eine komplette Elysion-Applikation mit mehreren States, Input und Rendering. Bei Fragen kannst du dich auch gerne an mich wenden.
Hugo343 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 114
Erhaltene Danke: 2

Windows 7
Turbo Delphi, Dev C++
BeitragVerfasst: Sa 21.05.11 09:32 
Naja also irgendwie hilft mir ein fremdes Gerüst bei meinem Problem nicht weiter. Ich wollte es ja gerade wegen sowas wie Kollision (die übrigens schon funktioniert ^^) selbst aufsetzen, um mich in sowas zu üben. Mein konkretes Problem liegt bei der Verwendung der Audorra-Bibliothek, ich suche nach einem Tutorial wie das von Andorra2D. Aber wenn es das wohl echt nicht gibt, würde ich auch gerne Hilfe bei dem Win7-Treiber-Problem von OpenAL entgegennehmen ... die Sache mit der Zugriffsverletzung.

MfG, Hugo
Hugo343 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 114
Erhaltene Danke: 2

Windows 7
Turbo Delphi, Dev C++
BeitragVerfasst: Mo 23.05.11 15:43 
Bin auf die BASS.dll umgestiegen, das Thema hat sich damit geklärt.
MfG, Hugo