![]() |
DirectX-Forum - Beitragsübersicht - |
|
Thema | DX8: probleme mit directx8 |
Von |
minime |
Datum |
13. April 2010 um 03:43:47 |
Frage |
Hi ich arbeite momentan an einem kleinen spiel projekt und hab mir ein haufen tutorials angesehen und komme mitlerweile ein wenig mit directx8 klar nun habe ich ein problem ich wollte in vb eine funktion machen bei der automatisch ein neues directx8 object erstellt wird natürlich kann man auch alles manuell eingeben was aber in diesem fall mir nicht helfen würde , weil das spiel eine online funktion haben wird und bei der directx muss man ja für jeden spieler der online ist und den man dann auch sehen kann extra rendern und das wollte ich über eine for schleife machen aber um dies machen zu können brauche ich eine funktion die automatisch die daten für dx8 erstellt: Bsp.
NeuObject(index, xpos,ypos,...,...,...,usw)
ich habe lange probiert es aber nicht hinbekommen wäre nett wenn mir jemand dabei behilflich sein kann
MFG minime |
|
Antwort: |
Von |
Nico |
E-Mail |
nico.schertler@gmx.de |
Datum |
14. April 2010 um 11:35:54 |
Antwort |
Klar. Grundlage für Bewegungen mit gleicher Geschwindigkeit ist die Framerate - besser gesagt die Zeit, die seit dem letzen Frame vergangen ist. Ich nehme an, die misst du bereits. Dann müsstest du regelmäßig (der Einfachheit halber jeden Frame) eine Funktion aufrufen, die den Frame aktualisiert. Hast du dein Objekt eigentlich in einer Klasse? Dann wäre das optimal. Ich hab übrigens schon lange nicht mehr VB6 programmiert. Deswegen könnte ein bisschen .NET mit in meinen Code reinrutschen. Aber das kriegst du schon hin.Private AnimTime As Long 'Speichert die Zeit seit Beginn der Animation In ms Private Step As Integer 'Speichert den aktuellen Animationsschritt (0, 1, 2) Private Direction As eDirection 'Speichert die Richtung 'Die Zahlen bezeichnen gleich die Position In der Textur Private Enum eDirection Left = 2 Right = 3 Forward = 0 Backward = 1 End Enum Public Sub Update() 'In frameMillis stehen die Millisekunden seit dem letzten Frame AnimTime = AnimTime + frameMillis 'Angenommen für eine komplette Animation 500 ms If AnimTime >= 500 Then AnimTime = AnimTime Mod 500 'Den Rest beibehalten, sonst zurücksetzen Step = Int(AnimTime * 3 / 500) '3 Animationsschritte auf 500 ms End Sub Damit hätten wir die Animationsschritte aktualisiert. Jetzt müssen wir das ganze noch zeichnen. Das ist dann auch nicht weiter schwierig. Wir müssen einfach aus der gesamten Textur einen passenden Bereich aussuchen. Und der geht auf der Y-Achse von 0 bis texHeight. Die Breite des Bereiches sei texWidth. Dann ist die Startposition des Bereichs auf der X-Achse genauStartX = Direction * 3 * texWidth + Step * texWidth Also erst auf das jeweilige Animationsset verschoben und dann noch den passenden Schritt rausgesucht. Das ganze kannst du dann in einem Rectangle speichern und deinem Sprite-Objekt beim Zeichnen übergeben.
Nico |
|
[ Antwort schreiben | Zurück zum DirectX-Forum | Forum-Hilfe ] |
|
Letzte Aktualisierung: Sonntag, 13. Dezember 2015 |
|