Zufalls Objekt platzieren

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Ana

Betreff: Zufalls Objekt platzieren

BeitragSo, Nov 29, 2009 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Heyho,
ich will gerade eine Function schreiben, die zufällig Objekte auf der Karte verteilt (3d)
das sie nett über die x und z achse verteilt sind stellt sich natürlich nicht als so schwierig heraus, weil da ja einfache Zufallswerte reichen, für den y Wert brauch ich dann ja schon etwas exaktes damit die Dinge nicht in der Luft hängen oder im Boden stecken.
Dafür hatte ich mir gedacht das ich sie weit über der Karte, in praktisch nicht erreichbaren Höhen platziere und sie dann einfach nach unten bewege, damit sie dann von der Kollisionsabfrage auf gehalten werden, sobald sie den Boden berühren.
Leider rutschen sie dann einfach weiter und bewegen sich in Täler oder ins Wasser, irgendwo hab ich schon mal gesehen das man das slide in BB aussschalten kann für bestimmt entities, kennt jemand den Befehl zufällig, oder eine geschicktere Lösung?
So richtig, richtig elegant kommt mir das nämlich noch nicht vor

Hier der Code:
Code: [AUSKLAPPEN]

Function randomtree(baumanzahl)
random = 1                  ;Wichtig für die Camerasteuerung
For i = 1 To baumanzahl + 1    
   bauen = 12               ; Bauen 12 entspricht dem Objekt "Baum"
   objekterschaffen()         ; Function die eine Entity nach dem Wert von bauen erstellt und mit   ;                                                         Attribut en versieht
   kartengrosse = 2000         ; und den zuplatzierendesgebaude (globale Variable) definiert
   nummerierung = nr - 1      ; Glaube das ist nicht mehr nötig muss ich noch prüfen^^
   For ob.objekt = Each objekt

   If ob\id = zuplatzierendesgebaude Then ;Sucht neues Objekt

      ob\x = Rand(0,kartengrosse): ob\z = Rand(0,kartengrosse) : ob\y = 100
      PositionEntity ob\modell,ob\x,ob\y,ob\z   
      EntityAlpha ob\modell,1
      EntityPickMode(ob\modell,2)
      EntityColor ob\modell,255,255,255
      TranslateEntity ob\modell,0,-100,0 ; Setzt entity auf y = 0 außer terrain ist im Weg
      ob\y = EntityY (ob\modell)
      If ob\y <= meersspiegel Then Delete ob.objekt ; Löscht das Objekt falls es tiefer ist als der Meeresspiegel
      
   

   EndIf
   Next
Next

End Function

ozzi789

BeitragSo, Nov 29, 2009 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
CollisionNZ

Bei Collisions reaktion 1- stoppen, schaus dir mal an


Sollte dir helfen, deine Angehensweise ist richtig
mfg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Holzchopf

Meisterpacker

BeitragSo, Nov 29, 2009 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einem BlitzTerrain kann man auch einfach mittels TerrainY an einer bestimmten X/Z Stelle ermitteln, bei Meshterrains könnte man bestimmt an der X/Z Stelle ein LinePick nach unten losschiessen und mittels PickedY schauen, wo es gepickt hat.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Ana

BeitragSo, Nov 29, 2009 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ging ja flott! super danke ich werd mir mal beides anschauen und dann entscheiden wie ich es anstelle

Edit: Was gibt man den bei der Y - Koordinate an, bei TerrainY, die kenn ich doch gar nicht?

Tankbuster

BeitragSo, Nov 29, 2009 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Khalantes hat Folgendes geschrieben:

Edit: Was gibt man den bei der Y - Koordinate an, bei TerrainY, die kenn ich doch gar nicht?

Da kannst du einfach 0 einsetzen. Eigentlich ein überflüssiger Parameter, oder irre ich mich da?
Twitter
Download Jewel Snake!
Windows|Android

Nicdel

BeitragMo, Nov 30, 2009 7:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub schon, verschiedene Werte hatten bei mir noch nie unterschiedliche Auswirkungen Smile
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

FireballFlame

BeitragMo, Nov 30, 2009 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Vermutlich, wenn das Terrain rotiert worden ist.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Ana

BeitragMo, Nov 30, 2009 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun hab ich das ganze soweit

Code: [AUSKLAPPEN]

For i = 1 To baumanzahl + 1    
   bauen = 12               ; Bauen 12 entspricht dem Objekt "Baum"
   objekterschaffen()         ; Function die eine Entity nach dem Wert von bauen erstellt und mit Attributen versieht
   kartengrosse = 2000         ; und den zuplatzierendesgebaude (globale Variable) definiert
   nummerierung = nr - 1      ; Glaube das ist nicht mehr nötig muss ich noch prüfen^^
   For ob.objekt = Each objekt

   If ob\id = zuplatzierendesgebaude Then ;Sucht neues Objekt
      ;Repeat
      xwert = Rand(EntityX (figur) -250,EntityX (figur) + 250) ;platziert um die Figur herum
      zwert = Rand(EntityZ (figur) -250,EntityZ (figur) + 250)
      ywert= TerrainY (terrain,xwert,0,zwert)
      ;Until ywert> 0
      ob\x = xwert : ob\z = zwert : ob\y = ywert
      PositionEntity ob\modell,xwert,ywert,zwert
      EntityAlpha ob\modell,1
      EntityPickMode(ob\modell,2)
      EntityColor ob\modell,255,255,255
      
   

   EndIf
   Next
Next


Allerdings sind die Objekte alle in der Luft und je öfter die Funktion genutzt wird, desto höher schweben sie...
Kann wer was in der Funktion erkennen warum das so ist oder muss ich mit einem Seiteneffekt rechnen?
Xwert,ywert,zwert sind jedenfalls lokal und es werden auch nicht alle ob.objekt nach oben verschoben oder sowas.

Edit: wo gibs den die schicken Mützen?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group