Das Löschen von Types führt zu Flackern?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

funkmaster5000

Betreff: Das Löschen von Types führt zu Flackern?

BeitragFr, Dez 07, 2012 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Community!

Danke der Hilfe von hectic bin ich ein bisschen mehr bei 3D und Draw3D durchgestiegen. Jetzt habe ich folgendes Problem: ich habe einen Type, der die Informationen von Sternen (geht um ein Weltraum-Spiel) beinhaltet. Also:

Code: [AUSKLAPPEN]
Type stars
   Field x#
   Field y#
   Field red%
   Field green%
   Field blue%
End Type


Jetzt möchte ich mit einer If-Abfrage erreichen, dass Sterne, sobald sie vom Spieler nicht mehr gesehen werden, gelöscht und 10 neue in Bewegungsrichtung generiert werden. Für letzteres habe ich schon einen Ansatz aus einem 2D Spiel von mir, allerdings macht das Löschen der Types Probleme. Meine Abfrage sieht zum Beispiel so aus (genauer gesagt, eine Funktion):

Code: [AUSKLAPPEN]
Function testdeletestars()
   For s.stars = Each stars
      If s\x < -400 Then Delete s
   Next
End Function


Diese tut auch, was sie soll. Allerdings beginnt, nachdem sämtliche Types gelöscht wurden, der Bildschirm zu flackern. Es gibt auch eine Funktion zum Zeichnen der Sterne:

Code: [AUSKLAPPEN]
Function drawstars()
   For s.stars = Each stars
      ColorG3D s\red,s\green,s\blue,1
      DrawImage3D(star,s\x,s\y)
   Next
End Function


Meine Frage: Muss ich bei 3D sicherstellen, dass Objekte eines Types, die ich zeichnen will, auch noch existieren? Bei 2D funktioniert das nämlich. Ließe ich dort für s.stars = each stars einen Stern zeichnen, aber keiner existiert, dann passiert auch nichts. Kann daher das Flackern rühren?

Danke im Voraus!

Tennisball

Betreff: Re: Das Löschen von Types führt zu Flackern?

BeitragFr, Dez 07, 2012 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

funkmaster5000 hat Folgendes geschrieben:
Meine Frage: Muss ich bei 3D sicherstellen, dass Objekte eines Types, die ich zeichnen will, auch noch existieren? Bei 2D funktioniert das nämlich. Ließe ich dort für s.stars = each stars einen Stern zeichnen, aber keiner existiert, dann passiert auch nichts. Kann daher das Flackern rühren?

Nein, kann es nicht, das hat nichts mit 2D oder 3D zu tun.

Gruß,
Tennisball
 

funkmaster5000

BeitragFr, Dez 07, 2012 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Also nach einigem Herumprobieren habe ich das Problem gefunden! Es wird von folgender Funktion verursacht:

Code: [AUSKLAPPEN]
Function drawparticles()
   For part.particle = Each particle
      ColorG3D(part\red,part\green,part\blue,part\alpha)
      DrawImage3D(particles,part\x,part\y)
   Next
End Function


Genauer gesagt, von diesem Teil:
Code: [AUSKLAPPEN]
ColorG3D(part\red,part\green,part\blue,part\alpha)


Wenn ich den Alpha Wert manuell auf 1 setze, ohne die Variable, flackert nichts mehr. Wird jedoch die Variable eingesetzt (wie oben), dann flackert das Bild. Ich habe einfach nach Aufruf dieser Funktion ein ColorG3D(255,255,255,1) eingefügt und das hat das Problem behoben.

Trotzdem Danke!

Xeres

Moderator

BeitragFr, Dez 07, 2012 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Welchen Datentyp hat part\alpha? Welcher wird von ColorG3D erwartet? Wenn du Int benutzt wo Float gefragt ist (oder anders 'rum) kommt's durch die automatische Konvertierung zu allerlei komischen Effekten.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

funkmaster5000

BeitragFr, Dez 07, 2012 23:13
Antworten mit Zitat
Benutzer-Profile anzeigen
part\alpha ist Float, wie von der jeweiligen Funktion verlangt.

Mein Fehler war einfach, dass ich Alpha gesetzt, aber nach dem Funktionsaufruf den ursprünglichen Zustand nicht wiederhergestellt habe. Ist ja logisch, genau wie bei 2D. Verändert man Color in einer Funktion, wird das ja auch ins Hauptprogramm übernommen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group