Probleme mit Zufall
Übersicht

![]() |
PddBetreff: Probleme mit Zufall |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich habe momentan ein Problem mit "Flug-Partikeln". Das sind einzelne Punkte, mit versch. Farbwerten, die Unter dem Spieler "runterfallen", wenn er "fliegt" ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, so in etwa sieht das aus ^^ nur das ich 15 Framees verwende ![]() 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 ![]() Was meinst du mit Zitat: Vielleicht sind X und Y Integerwerte.
|
||
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() //EDIT: Problem gelöst, ich hab den RX# wert verändert, jetzt siehts gut aus ![]() Danke trotzdem! |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group