Spiele effektiv programmieren mit VB.net und DirectX

von: Uwe Kettermann, Andreas Rohde

Springer-Verlag, 2005

ISBN: 9783540271116 , 545 Seiten

Format: PDF, OL

Kopierschutz: Wasserzeichen

Windows PC,Mac OSX für alle DRM-fähigen eReader Apple iPad, Android Tablet PC's Online-Lesen für: Windows PC,Mac OSX,Linux

Preis: 22,99 EUR

Mehr zum Inhalt

Spiele effektiv programmieren mit VB.net und DirectX


 

Danksagung

6

Vorwort

7

Inhaltsverzeichnis

9

1 Die Buchstruktur

20

2 Was ist VB.NET?

22

2.1 Unterschiede zu Visual Basic 6

22

2.1.1 Rapid Application Development

23

2.1.2 Vererbung

23

2.1.3 Ausnahmebehandlung

23

2.1.4 Überladung

23

2.1.5 Overrides: Überschreiben von Methoden und Eigenschaften

24

2.1.6 Konstruktoren und Destruktoren

25

2.1.7 Datentypen

25

2.1.8 Verweise

26

2.1.9 Namespaces

26

2.1.10 Assemblies

26

2.1.11 Multithreading

26

2.1.12 Common Language Runtime (CLR)

26

2.1.13 Garbage Collection

27

3 Die Entwicklungsumgebungen von VB.NET

30

3.1 Das Visual Studio .NET

32

3.1.1 Formdesigner

34

3.1.2 Werkzeugfenster

35

3.1.3 Eigenschaftenfenster

35

3.1.4 Projektexplorer

36

3.1.5 Pin-Nadel-Symbol

36

3.2 SharpDevelop

37

3.2.1 Code-Competion-Datenbank

37

3.2.2 Der erste Start

39

4 „Hello World“ das erste .NET-Programm

42

4.1 Ein einfaches Programm mit einem einfachen Editor

42

4.1.1 Der Sourcecode

42

4.1.2 Der Compiler

43

4.2 Ein Projekt im Visual Studio.NET

44

5 Variablen

48

5.1 Deklaration

49

5.2 Datentypen und Konstanten

49

5.2.1 Der richtige Datentyp

51

5.2.2 Konstanten

53

5.2.3 Strukturen

56

5.3 Typensicherheit

57

5.4 Ermitteln des Variablentyps

60

6 Operatoren

62

6.1 Arithmetische Operatoren

62

6.2 Vergleichsoperatoren

64

6.2.1 Mit dem Gleich-Operator Werte zuweisen!

64

7 Verzweigungen

66

7.1 Verzweigungen oder Entscheidungen?

66

7.2 If-Then-Else-Anweisung

66

7.2.1 Notationsunterschiede!

69

7.2.2 Verschachtelungen oder ElseIf:ElseIf

69

7.3 Select-Case-Anweisungen

72

8 Schleifen

76

8.1 For-Next-Schleife

77

8.2 Do-Loop-Schleife

78

8.2.1 Endlosschleifen

81

8.3 While-End-While-Schleife

81

8.4 For-Each-Schleife

82

9 Arrays

86

9.1 Statische Arrays

86

9.2 Dynamische Arrays

87

9.2.1 GetUpperBound

88

9.3 Mehrdimensionale Arrays

89

10 Funktionen und Subroutinen

92

10.1 Subroutinen

92

10.1.1 ByVal oder ByRef

94

10.2 Funktionen

94

10.2.1 Return

95

10.2.2 Optionale Parameter

96

10.3 Rekursives Programmieren

97

11 Klassen

100

11.1 Was ist eine Klasse?

100

11.2 Nothing

101

11.3 Felder

102

11.4 Subroutinen und Funktionen

103

11.5 Eigenschaften: Property

105

11.5.1 Parameter in Properties

106

11.5.2 Eingeschränkte Properties

107

11.6 Enumerationen in Klassen

108

11.7 Events

109

11.8 Ein umfassendes Beispiel

111

11.8.1 Erstellen der Klasse

112

11.8.2 Klasse mit Daten füllen

114

11.8.3 Daten aus der Klasse lesen

114

11.9 Shared-Mitglieder

115

11.10 Vererbung

116

11.10.1 Overrides

118

11.10.2 MyBase

120

11.10.3 MustOverride und MustInherit

121

12 Namespaces

122

12.1 Namespaces ansprechen

123

12.1.1 Imports

123

13 Assemblies

126

13.1 Arbeitsweise von Assemblies

127

13.2 Shared Assembly

127

14 Fehlerbehandlung

128

14.1 Try-Catch-Finally-Anweisung

128

14.1.1 Ausnahmebehandlung (Beispiel)

129

14.2 OnError-GoTo-Befehl

130

15 Was ist DirectX

132

15.1 Die Säulen von DirectX

132

15.2 Die Einsatzgebiete für DirectX

134

16 DirectX-Grundlagen

136

16.1 Das Koordinatensystem

136

16.2 Primitives

138

16.2.1 Primitives rendern

140

16.2.2 Vorder- und Rückseite

144

17 Mein erstes DirectX-Programm

146

17.1 Ein Visual Studio .NET-Projekt erstellen

146

17.2 Direct3D-Device erzeugen

148

17.3 Rendern

150

18 Mein erstes Objekt im 3D-Raum

154

18.1 Vertexbuffer erstellen

155

18.2 Vertexbuffer mit Objektdaten füllen

156

18.3 Vertexbuffer rendern

158

19 World-, View- und Projektionsmatrix

160

19.1 Worldmatrix

160

19.2 Viewmatrix

161

19.3 Projektionsmatrix

162

20 Device Enumeration

164

20.1 DXSettings

164

20.1.1 Display-Adapter

167

20.1.2 Hardwarebeschleunigung (DeviceTyp)

168

20.1.3 Videomodus

169

20.1.4 Backbuffer-Format

171

20.1.5 Z-Stencilbuffer-Format (Depth-Stencilbuffer-Format)

173

20.1.6 Multisample-Typ

174

20.1.7 Vertex-Processing

176

20.2 DXSettings im praktischen Einsatz

178

20.2.1 Preset-Struktur

179

20.2.2 DXSettings initialisieren

181

21 Matrizen

184

21.1 Was ist eine Matrix

184

21.1.1 Einheitsmatrix

185

21.1.2 Addition

185

21.1.3 Subtraktion

185

21.1.4 Multiplikation

186

21.1.5 Division

186

21.1.6 Berechnen der invertierten Matrix M-

187

21.2 Transformation

188

21.2.1 Bewegt sich die Welt oder bewegt sich das Objekt?

189

21.2.2 Translation (Bewegung, Positionsveränderung)

189

21.2.3 Skalieren (Größenänderung)

190

21.2.4 Rotation (Drehung)

191

21.2.5 Grad vs Radiant

193

21.2.6 Beispielprogramm für Matrizen

194

22 Texturen

200

22.1 Texturkoordinaten

200

22.2 Kacheln einer Textur

202

22.3 Das passende Vertexformat

203

22.4 Größe einer Textur

204

22.4.1 Auslesen der maximalen Texturbreite und Höhe

205

22.5 Laden einer Textur

205

22.6 Texturfilter

207

22.6.1 MinFilter und MagFilter

207

22.6.2 Nearest Point Sampling

207

22.6.3 Linearer Texturfilter

208

22.6.4 Anisotropic Filter (uneinheitlicher Filter)

208

22.6.5 Bilineare und uneinheitliche Filterung

209

22.6.6 Mipmaps

209

22.7 Beispielprogramm für Texturen

210

22.7.1 Ermitteln der maximalen Texturbreite und -höhe

211

22.7.2 Erstellen des Vertexbuffers

212

22.7.3 Erstellen und Laden einer Textur

214

22.7.4 Rendern

215

22.8 Multitexturing (Multi Texture Mapping)

216

22.8.1 Mischparameter

217

22.8.2 Multi-Pass-Technik vs. Single-Pass-Technik

220

22.8.3 Texturkoordinaten, Vertexformat und Vertexbuffer

221

22.8.4 Beispielprogramm für Multitexturing

223

22.9 Alpha-Textur-Blending

230

22.9.1 Texturfaktor

230

23 Licht: Beleuchtung

232

23.1 Licht und Material

233

23.2 Direct3D.Lights

233

23.3 Normalvektor

234

23.3.1 Berechnung des Normalvektors

236

23.4 Lichttypen

237

23.4.1 Ambient-Light

238

23.4.2 Point-Light

239

23.4.3 Directional-Light

240

23.4.4 Spot-Light

241

23.4.5 Welcher Lichttyp ist der beste?

243

23.5 Licht, Schatten und Polygone

244

23.5.1 Flat-Shading

244

23.5.2 Gouraud-Shading

245

23.5.3 Phong-Shading

246

23.6 Licht und Polygone

246

23.7 Beispielprogramm für Licht und Polygone

247

23.7.1 Erstellen der Flächen

248

23.7.2 Erstellen der Lichter

251

23.8 Beispielprogramm für Lichttypen

253

23.8.1 Boden und Wände erstellen

255

23.8.2 Lichtquellen initialisieren

258

23.9 Licht und Mesh

261

23.9.1 Beispielprogramm für Licht und Mesh

262

24 Material

264

24.1 Zusammenspiel zwischen Material und Licht

264

24.1.1 Die Bestandteile des Materials

265

24.1.2 Diffuse

265

24.1.3 Ambient

266

24.1.4 Specular

266

24.1.5 Emissive

266

24.2 Material initialisieren und aktivieren

266

24.3 Beispielprogramm für Material

267

25 Meshobjekte

270

25.1 Erstellen eines Mesh–Objektes

271

25.2 Laden eines Mesh-Objektes

272

25.3 Darstellen eines Mesh-Objektes

274

26 Animation des Mesh-Objektes Frame- Animation

278

26.1 Prinzip der Frame-Animation

279

26.2 Timing bei der Frame-Animation

279

26.3 Mesh-Objekte: Tweening/Keyframe-Animation

282

26.4 Keyframe-Bestimmung

292

26.5 Keyframe-Interpolation

293

26.6 Keyframe rendern

297

27 Billboarding

300

27.1 Was sind Billboards?

300

27.2 Warum werden Billboards eingesetzt?

301

27.2.1 Schlechtes Billboarding

301

27.2.2 Gutes Billboarding

301

27.3 Berechnungsmethoden

302

27.4 Beispielprogramm für Billboarding

303

27.4.1 Textureoberfläche erstellen

304

27.4.2 Hauptspieleschleife erzeugen

305

27.4.3 Rendern

306

28 Wasser

310

28.1 Technik zum Erstellen der Wasseroberfläche

311

28.2 Aufbau der Wasseroberfläche (Gittergerüst)

313

28.3 Wasseroberfläche erstellen (inkl. Wellen und Textur)

314

28.4 Schwimmende Kisten integrieren

316

28.5 Rendern Alpha-Blending

317

29 Nebel

320

29.1 Was kann Nebel?

321

29.2 Berechnungsarten

321

29.2.1 Linear Fog

321

29.2.2 Exponential Fog

322

29.3 VertexFog oder Pixel-Fog/Table-Fog

323

29.3.1 Prüfung

324

29.4 Die wahre Tiefe

325

29.5 Renderstates

326

29.6 Beispielprogramm für Nebel

327

29.6.1 Erstellen der Straße

328

29.6.2 Einbinden der Meshes (Bäume und Auto)

329

29.6.3 Initialisierung des Nebels

330

29.6.4 Rendern

331

30 Partikeleffekte

334

30.1 Partikelstruktur

336

30.2 Zweidimensional vs. dreidimensional

337

30.3 Partikelklasse

339

30.4 Rendern

342

30.5 GUI

346

31 DirectSound: Modell

348

31.1 DirectSound-DeviceInformation

349

31.2 DirectSound-Device

349

31.3 DirectSound-Buffer

350

31.4 DirectSound-3DBuffer

351

31.4.1 Ausrichtung des 3DBuffers

352

31.5 DirectSound-3DListener

353

31.5.1 Ausrichtung des 3DListeners

353

31.6 DirectSound-CaptureBuffer

353

32 2DSound-Demo

356

33 3DSound-Demo

364

34 AudioVideoPlayback

372

34.1 Ein Wort zu DirectMusic

372

34.2 AudioVideoPlayback generell

372

34.3 Audio

373

34.4 Video

377

35 DirectInput

380

35.1 Objekthierarchie

380

35.2 Geräteauflistung

381

35.2.1 Beispielprogramm

382

35.2.2 Eingabegeräte ermitteln

382

35.2.3 Objekte ermitteln

384

35.3 Kooperationsebene

386

35.4 Datenformat

387

35.5 Daten empfangen

387

35.6 Keyboard (Beispielprogramm)

388

35.6.1 Sourcecode-Beispiel 1

388

35.6.2 Sourcecode-Beispiel 2

389

35.7 Maus

393

35.7.1 Kooperationsebene anlegen und das Device erzeugen

394

35.7.2 Daten abfragen

395

35.8 Joystick

396

35.8.1 Angeschlossene Joysticks ermitteln

398

35.8.2 Akquirieren und Achseneigenschaften festlegen

399

35.8.3 Daten abfragen

399

35.9 First-Person-Camera

402

35.9.1 Variablen und Strukturen definieren

403

35.9.2 Erzeugen der DirectInput-Devices

404

35.9.3 Maus- und Tastaturdaten empfangen

405

35.9.4 Maus- und Tastaturdaten auswerten

406

36 DirectPlay

410

36.1 Service-Provider

411

36.2 Wie ist eine Peer-to-Peer Verbindung aufgebaut?

412

36.3 Erstellen einer GUID

413

36.4 Host

414

36.5 Player

414

36.5.1 Host suchen

415

36.5.2 Player erstellen und an der Session anmelden

417

36.6 Senden von Daten

417

36.7 Empfangen von Daten

418

36.8 Beispielprogramm: Simple Chat

419

36.9 Kommunikationsmodelle

421

36.9.1 Peer-to-Peer-Session

421

36.9.2 Client/Server-Session

421

36.9.3 Sicherheit

421

37 Das Spiel: Return From Orion

424

37.1 Erste Gedanken zum Spiel

425

37.2 Von der ersten Spielidee zu einem Konzept

425

37.3 Der Entwicklungsprozess oder die Arbeit vor der Arbeit

427

37.4 Festlegung des Spielprinzips/Spielablaufs

427

37.5 Die Storyline – eine Geschichte entsteht

428

37.6 Festlegen des Designs mit Designstudien

429

37.7 Das Konzept des Spiels

430

38 Das Projekt startet

432

38.1 Erstellen der ersten Objekte

432

38.2 Erstellen des Basis-Devices für das Projekt

434

39 Eine Welt erschaffen

438

39.1 Die Theorie des Spielfeldes

438

39.2 Das Spielfeld in der Praxis

439

39.2.1 Spielfelddaten auslesen

440

39.2.2 Performance-Steigerung im Spielfeld

443

39.2.3 Das Spielfeld erstellen

445

39.2.4 Die Bitmaske

446

39.2.5 Das Spielfeld rendern

447

39.3 Skydome: Die Begrenzung der Spielwelt

451

40 Die Spielfigur

454

40.1 Die Techniken der Spielfigur

455

40.1.1 Bewegungsablauf – Animation der Spielfigur

455

40.1.2 Bewegung der Spielfigur

459

40.1.3 Relative Bewegungen im Spiel

460

40.1.4 Logik der Bewegung

462

40.1.5 Drehung der Spielfigur

465

40.1.6 Laufen der Spielfigur

467

40.2 Einfügen der Tastaturabfrage

470

40.3 Einfügen des Kameramoduls

476

41 Gegner: Computergesteuerte Elemente

480

41.1 Arten von Gegnern

480

41.1.1 Festgelegte Bewegungen und Aktionen

480

41.1.2 Intelligente Bewegungen und Aktionen

481

41.1.3 Intelligente Bewegungen, Aktionen und Kommunikation

482

41.2 Einfügen der Gegner in „Return From Orion“

483

42 Künstliche Intelligenz

490

42.1 Was ist künstliche Intelligenz?

490

42.1.1 Menschlich handeln

491

42.1.2 Menschlich denken

491

42.1.3 Rational denken

492

42.1.4 Rational handeln

492

42.2 KI in Computerspielen

492

42.3 KI in „Return From Orion“

493

42.3.1 Random-Strategie

495

42.3.2 Vertikale Strategie

497

42.3.3 Horizontale Strategie

501

42.3.4 Änderung der KI-Strategie

504

43 Kollision

506

43.1 Kollision in DirectX

506

43.1.1 BoundingBox

506

43.1.2 BoundingSphere

507

43.1.3 Feintuning

508

43.2 Kollision im Spiel

509

44 Soundeffekte

512

45 Abschließende Funktionen

516

45.1 Statusanzeigen erstellen und integrieren

516

45.2 Splash-Screens

521

45.3 Kamerafahrt am Anfang jedes Levels

523

45.4 Framerate begrenzen

525

46 Leveleditor

528

46.1 Zeichnen des Spielfeldes

529

46.2 Editieren der Spielfelddaten

532

46.3 Steuerelemente des Leveleditors

537

46.4 Das Programm-Menü

543

46.4.1 Level neu erstellen

543

46.4.2 Level laden

545

46.4.3 Level speichern

546

46.4.4 Direkt Zugriff auf ein Level

546

46.4.5 Spielfeld umranden

548

46.4.6 Dynamische Objekte einfügen: Random

549

46.5 Hilfsfunktionen

550

47 Fragen und Antworten zu VB.NET

554

48 Fragen und Antworten zu DirectX

560

48.1 Fragen und Antworten zu Texturen

561

Glossar

564

Anhang

568

Datentypen

568

Index

570