Gebäude im Raster anordnen.

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Matthias

Betreff: Gebäude im Raster anordnen.

BeitragDo, Jul 02, 2015 10:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Wie der Titel schon sagt möchte ich gerne Gebäude(Cube) im Raster anordnen.
Solange wie das Gebäude nicht gedreht wird klappt das auch.
Das Problem beginnt erst wenn ich das Gebäude drehe.
Und da suche ich nun eine Lösung bei dem das gedrehte Gebäude auch im Raster angeordnet wird.
Ich hoffe auf eure Hilfe. Smile

Gebäude(Cube) drehen linke/rechte Pfeiltaste.
Setzen linke Maustaste.

Code: [AUSKLAPPEN]

Graphics3D 800,600,32,2
Timer=CreateTimer(60)

CamPiv=CreatePivot(Camera):PositionEntity(CamPiv,0,500,0)
Camera=CreateCamera(CamPiv):TurnEntity(Camera,45,0,0)
Plane=CreatePlane():EntityColor(Plane,0,200,0)
EntityPickMode Plane,2

Cube=CreateCube() ScaleEntity Cube,16,16,48


SetBuffer BackBuffer()
Repeat
 
   CameraPick (Camera,MouseX(),MouseY())
   X=PickedX()  Z=PickedZ()
   
   X=Floor(X/32)*32
   Z=Floor(Z/32)*32


   PositionEntity Cube,X,0,Z
   If MouseHit(1)=1 Then Cube=CopyEntity(Cube)
   If MouseDown(2) Then TurnEntity(CamPiv,0,(MouseX()-MX)*.1,0)
   
   If KeyHit(203) Then TurnEntity(Cube,0,+22.5,0)
   If KeyHit(205) Then TurnEntity(Cube,0,-22.5,0)


 
   UpdateWorld()
   RenderWorld():MX=MouseX()
   Flip(0):WaitTimer(Timer)
Until KeyDown(1)=1:End

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Jul 02, 2015 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir funktioniert es genauso, wie es zu deiner Beschreibung sein sollte. Egal wie das Gebäude gedreht ist, es wird am Raster genau angeordnet. Starte sonst deinen Rechner einmal neu, denn ich hatte auch schon hier und da mal so komische Phänomene gehabt, die sich erst mit einem Neustart normalisierten.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Matthias

BeitragDo, Jul 02, 2015 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Vlt. Habe ich das jetzt doch falsch erklärt.
Zwischen den Cubes soll keine Lücke sein.

DAK

BeitragDo, Jul 02, 2015 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann verkleiner deinen Raster. Ich hab hier kein BB rennen, kanns deswegen grad nicht ausprobieren. Aber mir scheint, deine Blöcke sind 16x16x48 groß, dein Raster ist aber 32x32 groß. Kann das sein?
Gewinner der 6. und der 68. BlitzCodeCompo

SpionAtom

Betreff: Skizzen!

BeitragDo, Jul 02, 2015 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Skizze kann bei einer Problembeschreibung Wunder wirken. Wink
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Matthias

BeitragFr, Jul 03, 2015 10:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe da mal jetzt eine Skizze angefertigt.

So soll es dann aussehen. Die Gebäude(Cube) sollen immer bündig abschließen ohne das da zwischen ein Zwischenraum ist. Smile

user posted image
 

Kruemelator

BeitragFr, Jul 03, 2015 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst zu der Drehung die maximale Breite und Höhe bestimmen. Daraus kannst du dann die minimal benötigten Felder ermitteln.

Sinus und Cosinus hilft dir hier weiter.

Eingeproggt

BeitragFr, Jul 03, 2015 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur wird die maximale Breite und Höhe in den meisten Fällen nicht exakt in dein Raster passen, von daher ist dein Wunsch unmöglich. Wenn ich den Wunsch richtig verstanden habe, dass jeder Eckpunkt des Gebäudes am Raster ausgerichtet sein soll.

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

Matthias

BeitragFr, Jul 03, 2015 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Das die Cubes nicht genau in das Raster passen ist nicht so schlimm.

Es geht mir Hauptsächlich darum das die Front beim setzen bündich ist und zwischen den drei Cubes keine Lücke ist.
Mit sin/cos habe ich schon ausprobiert. Bei 45° und einem Raster von 16x16 klappt es. Aber bei 22.5° geht es dann nicht mehr.

SpionAtom

Betreff: Etwa so?

BeitragFr, Jul 03, 2015 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie unten links? Oder doch ganz anders?

Und dann: Brauchst du das Raster nur dafür? Denn dann würde ich fast ganz drauf verzichten...


user posted image
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Xeres

Moderator

BeitragFr, Jul 03, 2015 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Du willst Gebäude in einem Raster anordnen und sie gleichzeitig gedreht haben? Das macht logisch keinen Sinn.

Hältst du das für eine absolute Notwendigkeit für dein Projekt, oder ist das nur eine Verkomplizierung, die dich von den essentiellen Teilen abhalten?
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)
 

Matthias

BeitragSa, Jul 04, 2015 11:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit dem Raster ist schon sehr wichtig für mein Project.

Es soll ein Wirtschaftspiel werden und da soll mann dann immer mehr Fabrikhallen aneinander setzen könne.

SpionAtom.
Genau so wie untern links. So stell ich es mir vor.

Danke an euch alle die alle geben um mein Problem zu lösen. Auch wenn mir die Worte fehlen um genau zu erklären wie ich es meine. Very Happy

SpionAtom

Betreff: Wir kommen der Sache näher

BeitragSa, Jul 04, 2015 11:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann erkläre mir noch eines. Was ist die Beziehung von Rechteck und Raster?
Liegt da eine Ecke immer auf einem Rasterpunkt, oder zwei Ecken immer auf zwei Rasterlinien? Oder kann man alles freiwählen? Oder...

user posted image
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Matthias

BeitragSa, Jul 04, 2015 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Die ecken müssen nicht auf einem Rasterpunkt liegen.

Wichtig ist mir nur das zwischen den Cubes keine Lücken sind und sie vorne bündisch abschließen. Smile

Eingeproggt

BeitragSa, Jul 04, 2015 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also definiert ein jedes Gebäude seinen eigenen (gedrehten) Raster sozusagen.
Würde ich so lösen: auf ein allgemeines raster verzichten und beim Anbauen schauen, an welches Gebäude gebaut wird. Dann von dem ausgehend wie schon vorgeschlagen mit sin und cos arbeiten.

Mfg christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jul 04, 2015 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte mir überlegt, ob es zusammen mit einer gewählten Gebäudedimension einen guten gemeinsamen Teiler für ein grobes Raster gibt, der die Winkel 0°, 22.5°, 45° und 67.5° möglichst gut abdeckt. Bin dann auf eine Teilung von 13 gekommen. Diese wäre allerdings schon zu fein, so dass ich dann ein anderes Beispiel verfolgte. Jedes Gebäude setzt anhand seiner Position und Drehung jeweils (bei meinem Beispiel) zwei mögliche Punkte, wo andere Gebäude ansetzen können. Das ganze ist noch ausbaufähig. Zuerst wird anhand eines Rasters die mögliche Plazierung eingeschränkt (so wie bisher auch). Im zweiten Schritt werden dann die bereits gesetzten Gebäudeplatzierungen gesucht und anhand dieser gegebenenfalls erneut umpositioniert.

Änderung! Das Drehen der Gebäude nun mit dem Mausrad. Sonst alles gleich soweit.

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

Local Timer=CreateTimer(58)

Local CamPiv=CreatePivot():PositionEntity(CamPiv,0,500,0)
Local Camera=CreateCamera(CamPiv):TurnEntity(Camera,45,0,0)
Local Plane=CreatePlane():EntityColor(Plane,0,200,0)
EntityPickMode Plane,2

Local Light=CreateLight(1):TurnEntity Light,90,30,0

Local Cube=CreateCube():ScaleEntity Cube,16,16,48
Local MX%,X#,Y#,Z#

Type TPos
   Field TX#
   Field TZ#
End Type

Local T.TPos

Const RASTER=32
Const REACT=16



SetBuffer BackBuffer()
Repeat
   
   CameraPick (Camera,MouseX(),MouseY())
   
   X=Floor(PickedX()/RASTER)*RASTER
   Z=Floor(PickedZ()/RASTER)*RASTER
   
   ;Rasterung am Raster
   PositionEntity Cube,X,0,Z
   
   ;Rasterung am Objekt
   For T.TPos=Each TPos
      If X>T\TX-REACT And X<T\TX+REACT And Z>T\TZ-REACT And Z<T\TZ+REACT Then
         PositionEntity Cube,T\TX,0,T\TZ
         X=T\TX
         Z=T\TZ
      End If
   Next
   
   ;neue Position setzen
   If MouseHit(1)=1 Then
      
      ;Rechts
      T.TPos=New TPos
      T\TX=X+Cos(EntityYaw(Cube))*RASTER
      T\TZ=Z+Sin(EntityYaw(Cube))*RASTER
      
      ;Links
      T.TPos=New TPos
      T\TX=X-Cos(EntityYaw(Cube))*RASTER
      T\TZ=Z-Sin(EntityYaw(Cube))*RASTER
      
      Cube=CopyEntity(Cube)
   End If
   
   If MouseDown(2) Then TurnEntity(CamPiv,0,(MouseX()-MX)*.1,0)
   
   ;mit Mausrad drehen
   TurnEntity(Cube,0,MouseZSpeed()*22.5,0)
   ;und dann begradigen
   RotateEntity Cube,0,Int(EntityYaw(Cube)/22.5)*22.5,0
   
   UpdateWorld()
   RenderWorld():MX=MouseX()
   Flip(0):WaitTimer(Timer)
Until KeyDown(1)=1:End


Nur mal so als Idee. Hatte heute etwas Zeit und Lust.

Xeres

Moderator

BeitragSo, Jul 05, 2015 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube, du machst es dir damit schwerer, als es nötig ist. Wenn die Gebäude nichts mit dem Raster im Hintergrund zu tun haben (also keine Tilemap benutzt wird), kannst du viele Dinge nicht einfach machen:
- Das Tile (Gebäude) bestimmen, über dem der Mauspointer ist.
- Welche Gebäude im Sichtbaren Bereich sind.
- Wo Platz ist, um ein neues Gebäude zu platzieren.

Ich sehe da auch nicht, wie es dem Spieler etwas bringt, Gebäude beliebig drehen zu können. In einem Raster sieht man ganz genau, was aneinander passt - ggf. kann man voraus planen.
Oder ist es Teil des Spielprinzips, dass man sehr wenig Platz zur Verfügung hat, und die Gebäude wie bei einem Puzzel zusammenfügen muss?
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)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jul 05, 2015 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich persönlich mag Rasterung, damit man weiter weg entfernte Sachen ohne Probleme, schnell und genau positionieren kann. Eine Rasterung dahingehend, dass eine Tilemap erstellt wird, mag ich wiederum nicht. Deshalb finde ich, sofern die Umsetzung richtig verstanden habe, den von Matthias angedachten Ansatz super.

Ich würde mir beispielsweise ein Vektorprogramm wünschen, in dem man eine Rasterung einrichten kann. Beispielsweise bei Inkscape. Dann könnte man damit viele Schöne Sachen machen, zum Beispiel 'so mal eben' ein neuen Font kreieren, aber nein, man muss nach jedem Punkt oben manuell die Zahl X und Y separat per Hand auf- oder abrunden.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Holzchopf

Meisterpacker

BeitragSo, Jul 05, 2015 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Offtopic: Man kann in Inkscape ein Raster einstellen. Nennt sich Gitter und wird in den Dokumenteneinstellungen (Umschalt+Strg+D) definiert. Damit deine Punkte dann auch daran kleben bleiben, musst du in der Symbolleiste rechts "Einrasten Aktivieren" (zuoberst), "Knoten, Pfade und Anfasser einrasten" (7. Schaltfläche von oben) aktivieren und zu guter Letzt noch "Am Gitter einrasten" (zweitunterste Schaltfläche)
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
 

Matthias

BeitragMo, Jul 06, 2015 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich werde es so machen wie Eingeproggt geschrieben hat.

Hatte eigentlich gedacht das es eine elegantere Lösung gibt. Aber scheint dann doch nicht so einfach zu sein. Smile

An alle Danke die sich mein Problem angenommen haben und ihr bestes gegeben haben. Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group