Springen naar inhoud


VS 2010 SOLVED

Game Class



  • Log in a.u.b. om te beantwoorden
Er zijn 36 reacties in dit onderwerp

#1 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 12 juli 2012 - 23:12

Hoi, korte voorstelling vanwaar ik laatste tijd aan werk

Zoals de titel het zegt, een class waarmee je makkelijk games kan maken  

Zijn reeds afgewerkt  : sprite loader, bitmaskgenerator, transparante bitblt,mci geluiden (gecontroleerd afspelen), achtergrond, dubbele screenbuffer voor vermijden flikker, tekst op game achter of voorgrond, 100% keyboardhandling enz

Hieronder een screenschot van een testcase, lang nog niet afgewerkt hoor.

Grtz Bijlage  demoscreen02.jpg   53,11K   58 downloads

#2 RedThread

RedThread

    Beheerder VBIB

  • Beheerder
  • 3612 berichten
    Laatst bezocht 28 jun 2024 10:28
  • LocatieTongeren,Belgium.
Inzender

Geplaatst op 13 juli 2012 - 00:28

Mooi ! Kijk uit naar het vervolg

#3 pascalbianca

pascalbianca

    Webmaster/Admin

  • Webmaster
  • 4382 berichten
    Laatst bezocht 12 jan 2024 08:50
  • LocatieSusteren, Nederland, Midden Limburg.
Inzender

Geplaatst op 13 juli 2012 - 00:29

Ziet er goed uit, ben benieuwd naar de rest.

#4 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 13 juli 2012 - 16:06

Tja tis nog werk aan e maar kben der zelf vrij tevreden van :-P .

:oops:  Staan nog op het to do lijstje  :

- sprite botsing detectie (bv een kogel raakt de vijand) Kzal me beperkt houden tot 1 of meer rectangles in de sprite, op pixel niveau zal het te complex worden
- universele high score load / save handler (naar file of registery,al dan niet paswoord beveiligd,variabel aantal entry's, al dan niet per player een eigen high score lijst)
- touchpad / muis direction nagivation (ttz schuivend naar links / rechts / op / neer , combinaties hiervan detecteren)
- autoplay sprite (een sprite een reeks animaties doorgeven bv een volledige vuistslag laten uitvoeren)
- background scrolling
- meerdere backgrounds
- tile backgrounds (een achtergrond opgebouwd uit puzzelstukken)
- een afgeleide van de sprite class : stand allone bullet sprite (kogels of dergelijk die zichzelf afhandelen (voortbewegen,verdwijnen,exploderen enz . ttz via parameters doorgeven, de animatie reeks, de richting snelheid en afzwakking, levenstijd van de bullet , auto sound)

Enfin kheb dus nog een klein beetje heel veel werk . :D

Wie wenst :roll:  kwil gerust m'n code delen .

Grtz

-_- Aja bijna nog eentje vergeten :

Flashing text labels (Pinkende tekst)

#5 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 14 juli 2012 - 00:40

Nice!!

Hoe doe jij je geluid? Ik gebruik een media player reference maar ben er eigenlijk niet zo tevreden over.

#6 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 14 juli 2012 - 08:37

Hoi, hier is de module :
Code:

Module modSound

Public Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer

Public Sub audioOpen(ByVal audioAlias As String, ByVal audioPath As String)
'open the sound prepare for use
mciSendString("Open " & Chr(34) & audioPath & Chr(34) & " alias " & audioAlias, CStr(0), 0, 0)
End Sub
Public Sub audioPlay(ByVal audioAlias As String)
'Play the sound

		mciSendString("play " & audioAlias & " FROM 0", CStr(0), 0, 0)
End Sub
Public Sub audioPauze(ByVal audioAlias As String)
'Pauses the sound
mciSendString("pause " & audioAlias, CStr(0), 0, 0)
End Sub
Public Sub audioResume(ByVal audioAlias As String)
'Resumes the paused sound
mciSendString("resume " & audioAlias, CStr(0), 0, 0)
End Sub
Public Sub audioStop(ByVal audioAlias As String)
'Stop the playing sound
mciSendString("stop " & audioAlias, CStr(0), 0, 0)
End Sub
Public Sub audioClose(ByVal audioAlias As String)
'Close the sound, this is the opposite to Open and will make so
'you can't use the sound any more'unless you open it again of course.
mciSendString("close " & audioAlias, CStr(0), 0, 0)
End Sub
Public Sub test()
' MCI_STATUS_PARMS status;
'status.dwItem = MCI_STATUS_POSITION;
'status.dwCallback = 0;

'dwReturn = mciSendCommand(m_iDeviceIDPlayer,MCI_STATUS,MCI_STATUS_ITEM|MCI_WAIT,(DWORD_PTR)&status);
'Position -> status.dwReturn is the required position.
End Sub
End Module
[code]

In je Load method van de hoofd form :
[code]
openaudio("bullet","bulletsound.wma")
[/code]
In je gamplay na het afvuren :
[code]
audioplay("bullet")
[/code]

'Indien het geluid voortijdig moet stoppen :
[code]
audiostop("bullet")


'Indien het geluid moet gepauseerd worden en daarna herstart op zelfde positie
Code:
audiopauze("bullet")
'doe iets
audioresume("bullet")


en in je unload form
Code:
audioclose("bullet")


En je kan dus meerdere sound tegelijk kiezen door hetzelfde te coderen met een andere alias

Voor mij werkt dat prima

'k ben juist nog een klein beetje aan het zoeken om te weten hoever de sound staat of als het al dan niet nog aan het afspelen is. :roll:

Grtz

#7 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 14 juli 2012 - 12:56

Thx

Het geluid werkt maar ik krijg elke alias maar één keer afgespeeld.

Is het hiermee ook mogelijk 2 of meerdere sounds naast elkaar te laten afspelen?

Greetz

#8 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 14 juli 2012 - 17:42

Hmm, kijk nog eens goed of je wel de juiste bestandsnaam van je mp3 of wma's gebruikt, het werkt welzekers voor meerdere geluiden tegelijk

Ik liet zojuist Iron Man en Thunderstruck door elkaar spelen 8-)

Code:

audioOpen("iron", "C:\Users\User\Documents\Visual Studio 2010\Projects\BITBLTTest\BITBLTTest\03 Iron Man.mp3")
audioPlay("iron")

audioOpen("thunder", "C:\Users\User\Documents\Visual Studio 2010\Projects\BITBLTTest\BITBLTTest\01 Thunderstruck.mp3")
audioPlay("thunder")


Herstarten lukt mij wel, ik doe wel eerst een stopaudio.


Dus tmoet werken hee. ;)

Grtz

#9 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 14 juli 2012 - 18:10

@DieterVB,

Je hebt gelijk wat betreft het her-afspelen, het lukte niet zonder eerst audio close.

Oplossing :

Pas dit aan in de module :

Code:

  Public Sub audioPlay(ByVal audioAlias As String)
		'Play the sound
		mciSendString("play " & audioAlias & " FROM 0", CStr(0), 0, 0)
	End Sub


Tis die "FROM  0" die het hem doet en hoef je niet audiostop of audioclose eerst uit te voeren.

Grtz

#10 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 14 juli 2012 - 18:46

Thx!! Het werkt perfect en veel beter dan die media player reference. Ik was door het omschakelen van media player naar winmm ook iets uit mijn code vergeten halen waardoor ik maar een keer kon afspelen.

#11 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 15 juli 2012 - 05:17

Ik zal nog trachten iets te vinden om in de sound module het volume per alias te regelen :roll:

#12 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 15 juli 2012 - 12:02

Had dit al gevonden maar http://www.codeproje...ll-and-WPL-File maar 't is nog even zoeken om het per alias te doen. :?

#13 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 15 juli 2012 - 22:04

Hey kvrees dat het niet mogelijk is om het volume via mcisendstring per alias te regelen.

http://forums.codegu...ia-MCI-controls

Spijtig :mellow:

Grtz

#14 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 15 juli 2012 - 23:01

Klopt is blijkbaar niet mogelijk. Het zal een keuze worden tussen geen volume wijzigen of DirectX gebruiken.

'K heb wel iets kunnen maken om te controleren of de muziek nog aan het spelen is.

Visual Basic Code:

  Public Function audioState(ByVal audioAlias As String) As AudioStates
		'Returns the current mode of the device. All devices can return the "not ready", "paused", "playing", and "stopped" values.
		'Some devices can return the additional "open", "parked", "recording", and "seeking" values.
		Dim cchReturnLen As UInteger = 256
		Dim sRet As New System.Text.StringBuilder(CInt(cchReturnLen))
		mciSendString("status " & audioAlias & " mode", sRet, cchReturnLen, IntPtr.Zero)
		Dim strReturn(sRet.Length - 1) As Char
		sRet.CopyTo(0, strReturn, 0, sRet.Length)
		Select Case CStr(strReturn)
			Case "not ready"
				Return AudioStates.NotReady
			Case "stopped"
				Return AudioStates.Stopped
			Case "paused"
				Return AudioStates.Paused
			Case "playing"
				Return AudioStates.Playing
			Case Else
				Return AudioStates.Unknown
		End Select
	End Function


Visual Basic Code:

Module modSound
	Public Declare Function mciSendString Lib "winmm.dll" _
	Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
	ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
	Public Declare Function mciSendString Lib "winmm.dll" _
	 Alias "mciSendStringA" (ByVal sCommand As String, ByVal sReturn As System.Text.StringBuilder, _
	 ByVal cchReturn As UInteger, ByVal hwnd As IntPtr) As Integer

	Friend Enum AudioStates
		Unknown
		NotReady
		Stopped
		Paused
		Playing

		'Some devices can return the additional:
		'Open
		'Parked
		'Recording
		'Seeking
	End Enum

	Public Sub audioOpen(ByVal audioAlias As String, ByVal audioPath As String)
		'open the sound prepare for use  
		mciSendString("Open " & Chr(34) & audioPath & Chr(34) & " alias " & audioAlias, CStr(0), 0, 0)
	End Sub
	Public Sub audioPlay(ByVal audioAlias As String)
		'Play the sound  

		mciSendString("play " & audioAlias & " FROM 0", CStr(0), 0, 0)
	End Sub
	Public Sub audioPauze(ByVal audioAlias As String)
		'Pauses the sound  
		mciSendString("pause " & audioAlias, CStr(0), 0, 0)
	End Sub
	Public Sub audioResume(ByVal audioAlias As String)
		'Resumes the paused sound  
		mciSendString("resume " & audioAlias, CStr(0), 0, 0)
	End Sub
	Public Sub audioStop(ByVal audioAlias As String)
		'Stop the playing sound  
		mciSendString("stop " & audioAlias, CStr(0), 0, 0)
	End Sub
	Public Sub audioClose(ByVal audioAlias As String)
		'Close the sound, this is the opposite to Open and will make so  
		'you can't use the sound any more'unless you open it again of course.  
		mciSendString("close " & audioAlias, CStr(0), 0, 0)
	End Sub
	Public Function audioState(ByVal audioAlias As String) As AudioStates
		'Returns the current mode of the device. All devices can return the "not ready", "paused", "playing", and "stopped" values.
		'Some devices can return the additional "open", "parked", "recording", and "seeking" values.
		Dim cchReturnLen As UInteger = 256
		Dim sRet As New System.Text.StringBuilder(CInt(cchReturnLen))
		mciSendString("status " & audioAlias & " mode", sRet, cchReturnLen, IntPtr.Zero)
		Dim strReturn(sRet.Length - 1) As Char
		sRet.CopyTo(0, strReturn, 0, sRet.Length)
		Select Case CStr(strReturn)
			Case "not ready"
				Return AudioStates.NotReady
			Case "stopped"
				Return AudioStates.Stopped
			Case "paused"
				Return AudioStates.Paused
			Case "playing"
				Return AudioStates.Playing
			Case Else
				Return AudioStates.Unknown
		End Select
	End Function
End Module



#15 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 15 juli 2012 - 23:13

Hola, kwas daar ook mee bezig :P
Uwe audioState is al beter uitgewerkt 8-)
Oa deze extra subs en functies toe te voegen aan modSoud :
Code:


Public Function audioGetLength(ByVal audioAlias As String) As Long
'Get the length of the song in milli-seconds.
Dim returnData As String = Space(128)
Return mciSendString("status oursong length", returnData, 128, 0)
End Function

Public Function audioStatus(ByVal audioAlias As String,) As String
'Returns the current status player: playing, paused, stopped, etc.
Dim returnData As String = Space(128)
mciSendString("status MediaFile mode", returnData, 128, 0)
Return returnData
'If returnData.Substring(0, 7) = "playing" Then
'
' playingStatus = True

'Else

' playingStatus = False

'End If

'If playingStatus() Then

' The Mci Device is playing so play from.
'retVal = mciSendString("play oursong from " & (posChange.Value * 1000), 0, 0, 0)

'Else

' TheMci Device is not playing so seek to.
'retVal = mciSendString("seek song to " & (posChange.Value * 1000), 0, 0, 0)

'End If
End Function

Public Sub audioLeftVolume(ByVal audioAlias As String, ByVal Value As Long)
'Get/Set Left Volume Factor
mciSendString("setaudio " & audioAlias & " left volume to ", Value.ToString, CStr(0), 0)
End Sub

Public Sub audioRightVolume(ByVal audioAlias As String, ByVal Value As Long)
'Get/Set Right Volume Factor
mciSendString("setaudio MediaFile right volume to ", Value.ToString, CStr(0), 0)
End Sub

Public Sub audioMasterVolume(ByVal audioAlias As String, ByVal Value As Long)
'Get/Set Main Volume Factor
mciSendString("setaudio " & audioAlias & " volume to ", Value.ToString, CStr(0), 0)
End Sub

Public Sub audioBass(ByVal audioAlias As String, ByVal Value As Long)
' Get/Set Bass Volume Factor
mciSendString("setaudio " & audioAlias & " bass to ", Value.ToString, CStr(0), 0)
End Sub

Public Sub audioTreble(ByVal audioAlias As String, ByVal Value As Long)
'Set Treble Volume Factor
mciSendString("setaudio " & audioAlias & " treble to ", Value.ToString, CStr(0), 0)
End Sub
Public Function audioCapabilityReverse(ByVal audioAlias As String) As String
'http://www.reocities.com/smigman.geo/mci/wav.html
'Can it be played in reverse?
'Most WAV files can be played in reverse. Use this code to see if the WAV you opened has this capability.
Dim mssg As String = Space(255)
Dim Rslt As String
mciSendString("capability " & audioAlias & " voice1 can reverse", mssg, 255, 0)
If Left$(mssg, 4) = "true" Then
Rslt = "Can be played in Reverse" & vbCrLf
Else
Rslt = "Cannot be played in Reverse" & vbCrLf
End If

Return Rslt

End Function

Public Sub audioSave()
'http://www.rediware.com/programming/vb/vbrecwav/vbrecordwav.htm
'nog af te werken

'' save the wave file that is in memory
'Result= mciSendString("save recsound C:\NewWav.wav", ReturnString, Len(ReturnString), 0)
'If Not Result= 0 Then
'errormsg = mciGetErrorString(Result, ErrorString, 1024)
'MsgBox ErrorString, 0, "Error (save)"
'End If
End Sub


Grtz

#16 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 15 juli 2012 - 23:24

Ow merci, maar in mijn eigen game heb ik eigenlijk enkel maar nodig wat in jouw codes stond 8-):


Visual Basic Code:
If returnData.Substring(0, 7) = "playing" Then
playingStatus = True
Else
playingStatus = False
End If


De andere modes zijn van geen belang bij mij.

Grtz

#17 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 16 juli 2012 - 20:56

@DieterVB Welke game an t maken :roll:

#18 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 16 juli 2012 - 21:30

Bericht bekijkendoebi, op 16 juli 2012 - 20:56, zei:

@DieterVB Welke game an t maken :roll:

Een uitgebreide arkanoid game. Ben er al een tijdje aan bezig (met pauzes er tussen :grin:).
Ik ga het waarschijnlijk op vbib zetten als het af is maar er is voorlopig nog veel werk aan.

#19 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 19 juli 2012 - 15:08

Hallo allemale
Intussen is                              

de soundmod wat uitgebreid :rolleyes:

een mousedir mod geschreven (detecteer welke richting de muis uitging, is nuttig als je niet echt geintresseerd bent in waar de muis staat maar eer welke beweging de gebruiker maakt) :rolleyes:

ben ik bezig met een screenresolution aanpassing ant samenknutselen, veel te vinden op google echter die volledig werken das wat anders :cry:

Verder wat getest qua snelheid en viel wat tegen :unsure:  , hoe groot de schermresolutie staat  (getest op 1366 x 768 en 800x600) of hoe groot de achtergrond bitmap is , ik kom aan 9-11 FPS, khad toch ruim 15 verwacht. Tis denk ik niet de snelheid van het tekenen met bitblt maar eer de vb.net omgeving of kheb gewoon ne slechte (lees te trage )laptop (intel centrino 2 en nvidia graphics) op windows vista .

Kweet eigenlijk niet of het aan de spec's van mn computer ligt dat de FPS toch relatief laag uitvallen. Iemand een idee,is het m'n computer ?

Grtz

#20 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 19 juli 2012 - 19:42

Beetje schaamrood op mn wangen, m'n lapstop stond in energiebesparend. :rolleyes:

Na overschakelen naar hoge prestaties zit ik tussen de 27 a 29 FPS , super ! 8-)

#21 Hypenate

Hypenate

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1228 berichten
    Laatst bezocht 15 mei 2019 21:27
Inzender

Geplaatst op 25 juli 2012 - 14:57

Als je alle 'fouten' binnen de minuut zou vinden... ;)

#22 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 25 juli 2012 - 16:20

Nja tzou ook nie meer plezant zijn zekers :-P  

Momenteel al paar dagen op zoek waarom ik met ne memory leak zit bij het gebruik van bitblt
Als mn class een paar minuten draait krijg ik hier plots een foutmelding van.
Wel een en ander over te vinden op nonkel google maar tis nie allemaal even duidelijk

Nu kzal het wel vinden

Grtz

#23 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 26 juli 2012 - 00:49

Allee met de hulp van het forum kan ik weer wat verder met mn gameclass 8-)
Spijtig kzal er een week of 3 niet veel meer aan kunnen verder werken kga bijna op reis :-( :D

tja beide zijn leuk :twisted:

#24 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 31 juli 2012 - 20:34

Momenteel bezig met meerdere "backgrounds" (lees "blokken") aan het stoppen in de game
ttz tis de bedoeling dat ik het form (lees "scherm")  in verschillende blokken kan delen.
Dit is handig om bv onderaan een blok te voorzien met bv een dialoog of instructies die de speler krijgt
en rechts bv een blok met de highscores , energy level enz.
En de sprites moeten eenvoudigweg op de juist background gezet kunnen worden.

Die blokken moeten uiteraard ook dynamisch aanpasbaar zijn tijdens het spel , ik denk hierbij bv aan het voorzichtig opkomen
of weggaan van het onderste blok om meer plaats op het scherm te maken voor de eigenlijke gameplay

Door het gebruik van deze blokken zou theoretisch de FPS van de gameplay moeten verhogen, daar het niet telkens
nodig zal blijken het gehele scherm te hertekenen.

Als opslagplaats voor die verschillende background blokken zal ik gebruik maken van een "directory", een beetje gelijkaardig
zoals ik laatst de sprite beeldjes in gegoten heb. Is lekker makelijk aan te spreken door het gebruik van aliasen ipv variabelen vast in
code geschreven.

in pseude code moet de uiteindelijke manier van het tekenen van de sprites zoiets worden

in de load sectie
Code:
'let op is nog pseudo code is nog werk aan
Backgrounds.add("c:\battlefield.jpg","slagveld",1024-200,800,0,0)
Backgrounds.add("c:\scoretable.jpg","Scoretabel",200,800,1024-800,0)


daarna in de gameplay :

Code:
'let op is nog pseudo code,is nog werk aan
CurrentBackGround = GetBackGroundInfo("slagveld")
ClearBackGround 'plaatst de basisbitmap in een buffer, op die buffer wordt dan verder getekend
mysolder.changesprite("soldershoot1")
mysolder.spritedraw
CopyBackGroundToForm


Enfin , kdenk dat je een idee kan vormen van wat ik bedoel

Grtz

#25 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 01 augustus 2012 - 19:53

Hallo,
Intussen zijn de multiple backgrounds een feit .

Hier de benodigde code in het main form.
Code:

Public Class Form1

Public GameSolution As New SpriteDraw
Public Meiske As New SpriteObject

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

GameSolution.BackGroundClearOffScreen()
Meiske.SpriteXPos = 150
Meiske.SpriteYPos = 290
Meiske.SpriteChange("beeld1", GameSolution)
Meiske.SpriteDraw(GameSolution)
'Me.BackgroundImage = GameSolution.BackGroundBuffer
GameSolution.BackgroundOffScreenToForm()

End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
GameSolution.BackGroundClearOffScreen()
Meiske.SpriteChange("beeld2", GameSolution)
Meiske.SpriteDraw(GameSolution)
GameSolution.BackgroundOffScreenToForm()
End Sub

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
' GameSolution.BackGroundInit(Me, "C:\Users\User\Documents\Visual Studio 2010\Projects\BITBLTTest\achtergrond.bmp")
GameSolution.BackGroundRegioLoad("C:\Users\User\Documents\Visual Studio 2010\Projects\BITBLTTest\achtergrond.bmp",
Me,
"speelzone",
200, 200,
800, 400,
0, 0)
GameSolution.BackGroundRegioSet("speelzone")
GameSolution.SpriteLoad("C:\Users\User\Documents\Visual Studio 2010\Projects\BITBLTTest\girlsoldier1.bmp",
"beeld1",
50, 100,
140, 0)
GameSolution.SpriteLoad("C:\Users\User\Documents\Visual Studio 2010\Projects\BITBLTTest\girlsoldier1.bmp",
"beeld2",
50, 100,
90, 0)

End Sub



End Class


Geeft als resultaat : (zie bijlage)

Op de bijlage kan je goed zien hoe de "speelzone" nu ergens middenin het scherm verschijnt en hoe er plaats is voor links,rechts,boven,onder nog andere zone's (lees backgrounds) te definieren.

De overige code, hier niet meegetoond, zijn vaste objecten, de gameplay op zich moet in de form komen te staan.
Voorlopig nog geen echte gameplay geprogrameerd, enkel via button1 & button 2 wissel ik van spritebeeld

Allee weer een stapje dichter si 8-)

Bijgevoegde Bestanden

  • Bijlage  VBIB.jpg   44,51K   24 downloads


#26 DieterVB

DieterVB

    Professional Developer

  • Leden
  • PipPipPipPip
  • 340 berichten
    Laatst bezocht 13 nov 2014 19:37
  • LocatieVlaamse Ardennen

Geplaatst op 02 augustus 2012 - 13:19

Al heel wat vooruitgang geboekt zie ik, je maakt me nieuwsgierig 8-) !

#27 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 11 augustus 2012 - 09:53

Ja na Spanje terug wat verder tokkelen op m'n pc he.
'k Wil nu eerst eens een en ander effectief omzetten in een echt spelleke maar kben even wat creatief - loos.
Ne shoot em up of ne fight of een collect points ?
KZal wel zien, kwil vooral iets dat wa knap is qua graphics

Grtz

#28 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 11 augustus 2012 - 23:45

De gameclasse nog wat verder uitgebreid
Nu kan de backgroundbitmap geoffset worden zodoende je een "scrolling" maakt op het form.
Zo kan je bv een spaceship mooi in het midden van scherm laten terwijl het universum eronder heen schuift.

Helaas niet zo krachtig snel, op mijn laptop (in energiebesparende stand) krijg ik als ik een bitmap gebruik van meer dan 2400 pixels plots een serieuze snelheidsdip. Kzat aan ongeveer 0,8 sec voor een aan elkaar geplakte bitmap van 8000x1024 punten, waardoor het aantal FPS aan max 1 sex komt. Bij tot 2400 pixels is dit nog ongeveer 17 FPS als energiebesparing uit staat.
Mogelijks heeft dit wel iets te maken met de hoeveelheid beschikbaar geheugen van m'n computer.
Toch is deze implementatie een mooie uitbreiding als
je een "beperkt" speelveld hebt waarbij je makkelijk het scherm in een richting wil scrollen.
Code:
'dit is de enige regel die nodig is om de background 50 pixels naar links ! te scrollen
'makkelijk toch :)
GameSolution.BackGroundCurrentRegio.BackGroundXPosOffset += 50



Implementatie van TILES als achtergrond zou voor de snelheid  een oplossing bieden.
Kdenk dat m'n volgende uitbreiding rond tiles zal draaien.

Uiteindelijk zouden zowel TILES als een vast bitmap moeten kunnen naast elkaar bestaan in m'n gameclass, no rules more fun :lol:

Grtz

#29 doebi

doebi

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 539 berichten
    Laatst bezocht 27 okt 2022 11:33

Geplaatst op 14 augustus 2012 - 00:55

De Tiles zijn een feit geworden. 8-)

Nu kan ik in de gameclass tiles creeren uit 1 grote bitmap , de bitmap wordt in stukken gesneden en in een array gestopt (TilesBib)
Al dan niet kan je automatisch een TileMap laten vullen terwijl dit gedaan wordt (zo de tilemap eigenlijk hetzelfde als de grote bitmap maar dan in stukjes verdeelt) of je kan ervoor kiezen de tilemap zelf in te vullen, ttz per hokje in de tilemap steek je dan een element uit de tilebib

Nog wat werk hieraan om oa. een tilemap vanuit een bestand te lezen en verder het gehele tilegebeuren volledig te integereren
in de afzonderlijk mogelijke achtergronden (backgroundclass) zodat je bv meerdere achtergronden tegelijk op het scherm van
verschillende tilemaps kan voorzien.

Alleen niet zo tevreden over de prestaties, hier moet nog aan gesleuteld worden. :cry:
Kdacht dat de tiles stukken sneller gingen dan het gebruik van 1 grote bitmap maar dat valt dik tegen.
Hopelijk kan ik daar nog wat aan doen (momenteel 0,2 sec voor een achtergrond van 1200x800 via tiles van 200x200 te presenteren op de achtergrond ) met laptop in hoge prestaties). :-|

Grtz

Bijgevoegde Bestanden



#30 RedThread

RedThread

    Beheerder VBIB

  • Beheerder
  • 3612 berichten
    Laatst bezocht 28 jun 2024 10:28
  • LocatieTongeren,Belgium.
Inzender

Geplaatst op 14 augustus 2012 - 15:47

Mooi werk Doebi !

Dank voor het constant updaten en sharen van code, zeer leerrijk voor anderen hier op het forum.





Ook met taq VS 2010 SOLVED voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2010 SOLVED] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)