Probleme mit Zufall

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Pdd

Betreff: Probleme mit Zufall

BeitragSa, Jul 22, 2006 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Ich habe momentan ein Problem mit "Flug-Partikeln". Das sind einzelne Punkte, mit versch. Farbwerten, die Unter dem Spieler "runterfallen", wenn er "fliegt" Laughing
Also zuerst werden 3 Partikel erstellt (30 FPS * 3 Partikel pro Durchlauf = 90 Partikel/sekunde)
Code: [AUSKLAPPEN]
            For i = 0 To 3
               SeedRnd i * Rnd(2, 100)
               FlugPar = New TFlugPartikel
               FlugPar\Frame = 0
               FlugPar\X = Player\X + Rnd(7, 13)
               FlugPar\Y = Player\Y + 20 + Rnd(0, 2)
               FlugPar\RX# = Rnd(-1.2, 1.2)
               FlugPar\RY# = Rnd(0.4, 2.5)
               FlugPar\R = Rnd(170, 255)
               FlugPar\G = Rnd(80, 160)
            Next

Nun, jeden Schleifendurchlauf Rechne ich FlugPar\X + FlugPar\RX#. Dasselbe mit Y. Dann werden die Partikel gezeichnet, nur leider sind das nun 3 Linen! Die Partikel haben absolut KEINEN Zufall! Trotz des SeedRnd!
Was mache ich Falsch???

thx schonmal

SpionAtom

BeitragSa, Jul 22, 2006 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Sollte es so aussehen, wie hier?

Code: [AUSKLAPPEN]

Type TFlugPartikel
  Field Frame
  Field X#
  Field Y#
  Field RX#
  Field RY#
  Field R
  Field G
End Type
Local FlugPar.TFlugPartikel

Graphics 800, 600, 0, 2
SetBuffer BackBuffer()
SeedRnd millisecs()

   Repeat
      mouse_x = MouseX()
      mouse_y = MouseY()

            For i = 0 To 3               
               FlugPar = New TFlugPartikel
               FlugPar\Frame = 0
               FlugPar\X = mouse_x + Rnd(7, 13)
               FlugPar\Y = mouse_y + 20 + Rnd(0, 2)
               FlugPar\RX# = Rnd(-1.2, 1.2)
               FlugPar\RY# = Rnd(0.4, 2.5)
               FlugPar\R = Rnd(170, 255)
               FlugPar\G = Rnd(80, 160)
            Next

         Cls
         For FlugPar = Each TFlugpartikel
           FlugPar\Frame = FlugPar\Frame + 1
           Color FlugPar\R, FlugPar\G, 2500
           Plot FlugPar\X, FlugPar\Y
           FlugPar\X = FlugPar\X + FlugPar\RX
           FlugPar\Y = FlugPar\Y + FlugPar\RY
         If FlugPar\Frame = 20 Then Delete FlugPar
         
         Next
         
         Flip()
         
   Until KeyDown(1)


Folgende Fehler sind mir aufgefallen:
Vielleicht sind X und Y Integerwerte.
Und das entscheidene, du initialisierst den Zufall immer gleich. Benutze SeedRnd einmal mit Millisecs() am Anfang, das reicht. Surprised
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Pdd

BeitragSa, Jul 22, 2006 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, so in etwa sieht das aus ^^ nur das ich 15 Framees verwende Laughing
Nunja ich habjetzt das seedrnd nur einmal am anfang und es tut halbwegs... Man erkennt immernoch 3 Spuren, auch wenn die Punkte da etwas mehr ausseinander liegen Confused

Was meinst du mit
Zitat:
Vielleicht sind X und Y Integerwerte.

Pdd

BeitragSa, Jul 22, 2006 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm mir fällt grade auch auf, das Alle Partikel immer bei der selben Stelle aufhören zu "existieren". Sollte ja eigentlich nicht so sein Confused

//EDIT: Problem gelöst, ich hab den RX# wert verändert, jetzt siehts gut aus Laughing

Danke trotzdem!

SpionAtom

BeitragSa, Jul 22, 2006 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du X und Y mit # versehen, damits Floats werden?

Damit die Dauer unterschiedlich setze beim erstellen die Framezahl auf einen Wert zwischen 10 und 20.
Bei jedem Durchlauf, zählst du Frame nun einen runter. Wenn Frame bei null angekommen ist, lösche das Partikeltierchen!
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Pdd

BeitragSa, Jul 22, 2006 23:31
Antworten mit Zitat
Benutzer-Profile anzeigen
SpionAtom hat Folgendes geschrieben:
Hast du X und Y mit # versehen, damits Floats werden?

Damit die Dauer unterschiedlich setze beim erstellen die Framezahl auf einen Wert zwischen 10 und 20.
Bei jedem Durchlauf, zählst du Frame nun einen runter. Wenn Frame bei null angekommen ist, lösche das Partikeltierchen!


Stimmt, das mit dem X# und Y# hab ich vergessen, aber das mit den Frames ist ja nicht ganz richtig. Eigentlich sollte jedes Paritkl ja unterschiendlich nach unten gesetzt werden, was es aber nicht wird o.O

SpionAtom

BeitragSo, Jul 23, 2006 9:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann weiß ich nicht, was du meinst. Ich dachte "Frame" wäre dazu da, um die Lebensdauer jedes Partikelsteils festzulegen. Wenn diese Lebensdauer bei jedem Partikel unterschiedlichlang ist, dann verschwinden sie auch nicht an der selben Stelle. Hier nochmal das komplette, wie ich mir das vorgestellt habe.
(P.S. Die Schleife läuft übrigens 4 mal durch - von 0 bis 3 -, nur falls du es wissen wolltest^^)

Code: [AUSKLAPPEN]

Type TFlugPartikel
  Field Frame
  Field X#
  Field Y#
  Field RX#
  Field RY#
  Field R
  Field G
End Type
Local FlugPar.TFlugPartikel

Graphics 800, 600, 0, 2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

   Repeat
      mouse_x = MouseX()
      mouse_y = MouseY()

            For i = 0 To 3               
               FlugPar = New TFlugPartikel
               FlugPar\Frame = Rand(10, 20)
               FlugPar\X = mouse_x + Rnd(7, 13)
               FlugPar\Y = mouse_y + 20 + Rnd(0, 2)
               FlugPar\RX = Rnd(-1.2, 1.2)
               FlugPar\RY = Rnd(0.4, 2.5)
               FlugPar\R = Rnd(170, 255)
               FlugPar\G = Rnd(80, 160)
            Next

         Cls
         For FlugPar = Each TFlugpartikel
           FlugPar\Frame = FlugPar\Frame - 1
           Color FlugPar\R, FlugPar\G, 2500
           Plot FlugPar\X, FlugPar\Y
           FlugPar\X = FlugPar\X + FlugPar\RX
           FlugPar\Y = FlugPar\Y + FlugPar\RY
         If FlugPar\Frame < 1 Then Delete FlugPar
         
         Next
         
         Flip()
         
   Until KeyDown(1)
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Pdd

BeitragSo, Jul 23, 2006 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ich dachte "Frame" wäre dazu da, um die Lebensdauer jedes Partikelsteils festzulegen. Wenn diese Lebensdauer bei jedem Partikel unterschiedlichlang ist, dann verschwinden sie auch nicht an der selben Stelle.

Damit hast du vollkommen recht! aber RY# wird ja durch zufall festgelegt, in Jdem schleifendurchlauf werden dann RY# und Y# addiert, dadurch fallden die Partikel unterscheidlich schnell herunter Very Happy

SpionAtom

BeitragSo, Jul 23, 2006 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast recht, aber ich weiß nicht, wo jetzt noch das Problem ist. Gibts überhaupt noch eins?
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Pdd

BeitragSo, Jul 23, 2006 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein. Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group