Zufällige Erzeugung von Koordinaten

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

CarlTrott

Betreff: Zufällige Erzeugung von Koordinaten

BeitragDi, Dez 04, 2007 0:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich habe ein Problem mit der zufälligen Generierung von Zahlen. Ich möchte gerne eine (oder später auch mehrere) Koordinaten zufällig generieren. Hier ist erstmal der Code, mit dem ich bisher etwas rumprobiert hab. In dem Beispiel hab ich mal versucht, die y-Koordinate der Startposition der Kamera zufällig zu erzeugen. Code: [AUSKLAPPEN]


Graphics3D 1280,1024,32,1
SetBuffer BackBuffer()

camera=CreateCamera()
RotateEntity camera,0,0,0

light1=CreateLight()
RotateEntity light1,90,0,0
light2=CreateLight()
RotateEntity light2,90,0,0

plane=CreatePlane()
plane_tex=LoadTexture("Texturen\digital_coppermaze.jpg")
EntityTexture plane,plane_tex
PositionEntity plane, 0,0,0

fdur# = 15

While Not KeyHit  (1)

If KeyDown (28) Then ;;;;;;;;;;;;;;; ENTER-Taste
SeedRnd MilliSecs()
Zahl= Rand (2,15)

   PositionEntity camera, 0,Zahl,0
   SetAnimKey camera,1000/fdur#
   PositionEntity camera,0,10,30
   SetAnimKey camera,5000/fdur#
   AddAnimSeq camera,5000/fdur#
   Animate camera,3

EndIf

If KeyDown (2) Then
Locate 0,160
Print "Zahl="+Zahl
Locate 0,100
Print "y Position"+EntityY#(camera)
EndIf

UpdateWorld
RenderWorld
Flip
Wend
End



Die Zahl wird auch tatsächlich mit jedem Enter-Drücken neu und zufällig erzeugt (kann man sich ja durch drücken der Nummerntaste 2 anzeigen lassen). Aber, und das ist mein Problem, diese Zahl wird nun nicht als y-Koordinate übernommen. Die y-Koordinate ist leider immer gleich.

Wieso macht er das und wie könnte ich das ändern?

Ich dank euch schonmal...

Foppele

BeitragDi, Dez 04, 2007 1:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Koordinaten werden einwandfrei übernommen und die Kamera wird richtig positioniert. Ich habe deinen Code mal verändert, damit du es sehen kannst.

Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

camera=CreateCamera()
RotateEntity camera,0,0,0
PositionEntity camera, 0,0,-9

light1=CreateLight()
RotateEntity light1,90,0,0
light2=CreateLight()
RotateEntity light2,90,0,0

plane=CreateSphere()
;plane_tex=LoadTexture("Texturen\digital_coppermaze.jpg")
;EntityTexture plane,plane_tex
PositionEntity plane, 0,0,0

fdur# = 15

While Not KeyHit  (1)

If KeyDown (28) Then ;;;;;;;;;;;;;;; ENTER-Taste
SeedRnd MilliSecs()
Zahl= Rand (0,2)

   PositionEntity camera, 0,Zahl,-9
   ;SetAnimKey camera,1000/fdur#
   ;PositionEntity camera,0,10,30
   ;SetAnimKey camera,5000/fdur#
   ;AddAnimSeq camera,5000/fdur#
   ;Animate camera,3

EndIf

If KeyDown (2) Then
Locate 0,160
Print "Zahl="+Zahl
Locate 0,100
Print "y Position"+EntityY#(camera)
EndIf

UpdateWorld
RenderWorld
Flip
Wend
End
 

CarlTrott

BeitragDi, Dez 04, 2007 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ja, stimmt. In deinem Beispiel hat die Kamera ja schon immer eine andere Startposition.
Sobald du aber die Kamera animierst, ändert sich die Startposition leider nicht mehr mit jedem ENTER-Klick. Die Zahl allerdings (komischerweise) schon (nur noch durch die Textausgabe zu erkennen).

Was kann ich dagegen machen?

Foppele

BeitragDi, Dez 04, 2007 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiss ja nicht was du vor hast aber ich nehme mal an du willst erst Keyframes für die Kamera setzen und dir danach die Animation angucken?
Dann solltest du die Erstellung der Animation VOR die Schleife packen, oder das ganze so konstruieren, das Animate Camera erst losgeht, wenn eine Animation da ist, sonst gibts ne Fehlermeldung.

Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

camera=CreateCamera()
RotateEntity camera,0,0,0
PositionEntity camera, 0,0,-9

light1=CreateLight()
RotateEntity light1,90,0,0
light2=CreateLight()
RotateEntity light2,90,0,0

plane=CreateSphere()
;plane_tex=LoadTexture("Texturen\digital_coppermaze.jpg")
;EntityTexture plane,plane_tex
PositionEntity plane, 0,0,0

fdur# = 15


SeedRnd MilliSecs()

Zahl= Rand (-2,5)
   PositionEntity camera, 0,Zahl,-9
   SetAnimKey camera,1000/fdur#
   PositionEntity camera,0,10,30
   SetAnimKey camera,5000/fdur#
   AddAnimSeq camera,5000/fdur#



While Not KeyHit  (1)

If KeyDown (28) Then ;;;;;;;;;;;;;;; ENTER-Taste

   Animate camera,3
EndIf


If KeyDown (2) Then
Locate 0,160
Print "Zahl="+Zahl
Locate 0,100
Print "y Position"+EntityY#(camera)
EndIf

UpdateWorld
RenderWorld
Flip
Wend
End
 

CarlTrott

BeitragDi, Dez 04, 2007 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

das funktioniert leider auch nicht so wirklich. Jetzt wird die Zahl zwar als y-Koordinate übernommen, aber sie ändert sich nicht mehr mit jedem ENTER.

Ich bin ratlos... Sad

Foppele

BeitragDi, Dez 04, 2007 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Was soll dein Code denn jetzt genau machen?
 

CarlTrott

BeitragDo, Dez 06, 2007 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will ein kleines Experiment programmieren. Im Prinzip ist es nur etwas komplexer als der Beispiel-Code, den ich hier rein gestellt habe. Nur, dass die gegangene Strecke noch eine Drehung beinhaltet. Und der Winkel dieser Drehung soll nicht immer der selbe sein.
Aber ich versuch nochmal, die Zahlen aus irgendeinem file zu nehmen. Vielleicht klappt es dann ja...

Dazu fällt mir noch eine Frage ein:
Eigentlich möchte ich nämlich nur eine zufällige Auswahl von 8 Zahlen haben. Wie kann ich das machen? Ich hab's schonmal probiert mit:

Code: [AUSKLAPPEN]

Zahl=30 or Zahl=60 or Zahl=90 usw.



Dabei wurde aber eigentlich immer nur die erste Zahl gewählt.
???

Foppele

BeitragDo, Dez 06, 2007 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, verstehe, das Experiment ist eigentlich geheim...
Very Happy

y=0
x=Rnd(0,7)

If x=0 Then y=30
If x=1 Then y=40
...

Eingeproggt

BeitragDo, Dez 06, 2007 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Foppele's Ansatz ist gut, aber wenn die Zahlen wie in deinem Beispiel so linear verteilt sind, gehts mit ner einfache Formel^^

Code: [AUSKLAPPEN]
x=Rand(0,11)*30


mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group