Hallo zusammen,
ich muss gleich nochmals fragen. Diesmal geht es um DirectX.
Ich gehe gerade die Tutorials dieser Seite durch: vbprogramming.8k.com/tutorials/main.htm
Und bin bei Sektion III Schritt 2) Initializing the Device (Rendering a blue screen)
Ich habe alles Schritt für Schritt übernomen, es auch endlich mal verstanden (:D). Wenn ich das Programm jedoch startet, sehe ich nur eine leere Form. Auch wenn ich ein
einbaue. Die Box taucht nicht auf.
Als ich das Programm zum ersten mal gestartet habe, stürtze es ohne brauchbare Fehlermeldung ab (Visual Basic Express hat davon scheinbar nichts mitbekommen. Fehlermeldungen wurden davon leider keine angezeigt.) Windows 7 (64 bit) meldete dann aber irgentwas, vonwegen das Programm würde nächstes mal mit Kombitabilitätseinstellungen starten.
Startet tut es jetzt auch. Reagiert nur eben nichtmehr auf das Load der Form1 und führt somit den Code nicht aus.
Ich hoffe ihr könnt mir hierbei helfen. Wenn ihr noch irgentwelche Infos braucht - bitte bescheid geben!
Meine GameClass:
Mein Form1-Code:
ich muss gleich nochmals fragen. Diesmal geht es um DirectX.
Ich gehe gerade die Tutorials dieser Seite durch: vbprogramming.8k.com/tutorials/main.htm
Und bin bei Sektion III Schritt 2) Initializing the Device (Rendering a blue screen)
Ich habe alles Schritt für Schritt übernomen, es auch endlich mal verstanden (:D). Wenn ich das Programm jedoch startet, sehe ich nur eine leere Form. Auch wenn ich ein
einbaue. Die Box taucht nicht auf.
Als ich das Programm zum ersten mal gestartet habe, stürtze es ohne brauchbare Fehlermeldung ab (Visual Basic Express hat davon scheinbar nichts mitbekommen. Fehlermeldungen wurden davon leider keine angezeigt.) Windows 7 (64 bit) meldete dann aber irgentwas, vonwegen das Programm würde nächstes mal mit Kombitabilitätseinstellungen starten.
Startet tut es jetzt auch. Reagiert nur eben nichtmehr auf das Load der Form1 und führt somit den Code nicht aus.
Ich hoffe ihr könnt mir hierbei helfen. Wenn ihr noch irgentwelche Infos braucht - bitte bescheid geben!
Meine GameClass:
VB.NET-Quellcode
- Imports Microsoft.DirectX
- Imports Microsoft.DirectX.Direct3D
- Imports Microsoft.DirectX.Direct3D.D3DX
- Public Class GameClass
- Public GameOver As Boolean
- Private D3Ddev As Device = Nothing
- 'Short for PresentationParameters
- Private D3Dpp As PresentParameters = Nothing
- Private DP As DisplayMode = Nothing
- Public Sub Initialize(ByVal TargetForm As Form, ByVal FullScreen As Boolean)
- If FullScreen Then
- '800x600 Resolution
- DP.Width = 800
- DP.Height = 600
- 'R5G6B5 = 16-bit. Visit MSDN to find out what the other ones are.
- DP.Format = Format.R5G6B5
- Else
- 'If it's not fullscreen, use the current display mode!
- DP = Manager.Adapters.Default.CurrentDisplayMode
- End If
- 'As usual, we must always instantiate our classes
- D3Dpp = New PresentParameters()
- 'Initialize some stuff for the Presentation parameters
- D3Dpp.BackBufferFormat = DP.Format
- D3Dpp.BackBufferWidth = DP.Width
- D3Dpp.BackBufferHeight = DP.Height
- 'There's flip, copy, and discard. Flip and Discard are used most often. Visit MSDN has more information.
- D3Dpp.SwapEffect = SwapEffect.Discard
- 'Present the scene immediately
- D3Dpp.PresentationInterval = PresentInterval.Immediate
- 'Set to Fullscreen or Windowed
- If FullScreen Then
- D3Dpp.Windowed = False
- Else
- D3Dpp.Windowed = True
- End If
- 'Instantiate the device
- D3Ddev = New Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, TargetForm.Handle, CreateFlags.SoftwareVertexProcessing, D3Dpp)
- End Sub
- Public Sub RenderScene()
- Do While Not GameOver
- 'Try commenting this out . You'll see what it does. It might hang your app depending on your graphics card. In DX 9.0a, the screen would flash in multiple colors if you didn't clear, this, you want to clear it with one color (see explanation below)
- D3Ddev.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 225), 0, 0)
- D3Ddev.BeginScene()
- ' Rendering code goes here usually. But we're not rendering anything in this program. So don't type anything here.
- D3Ddev.EndScene()
- D3Ddev.Present()
- 'In a loop, keyboard events are ignored. This means: let them NOT be ignored :).
- Application.DoEvents()
- Loop
- Terminate()
- End Sub
- Public Sub Terminate()
- 'Free up mem
- DP = Nothing
- D3Dpp = Nothing
- D3Ddev.Dispose()
- D3Ddev = Nothing
- 'Exit
- Application.Exit()
- 'FORCE an exit if it didn't exit already.
- System.Environment.Exit(System.Environment.ExitCode)
- End Sub
- End Class
Mein Form1-Code:
VB.NET-Quellcode
- Public Class Form1
- Dim Game As GameClass
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'We have to say Me.Show becuase the form doesn't actually get shown until AFTER the load event.
- 'Try emptying this sub, and type in MessageBox.Show("Hi"). Notice how
- 'the MessageBox appears *before* the form shows up?
- Me.Show()
- 'As usual, we must always instantiate our classes
- Game = New GameClass()
- 'Initialize the game
- 'Me - Render to form1
- 'True - Use fullscreen
- Game.Initialize(Me, True)
- Game.RenderScene()
- End Sub
- Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
- If e.KeyCode = Keys.Escape Then
- Game.GameOver = True
- End If
- End Sub
- End Class