Mausbewegung auf Mesh auswirken

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

PhillipB

Betreff: Mausbewegung auf Mesh auswirken

BeitragSa, März 19, 2011 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo nach langer Forensuche hab ich immer noch nicht das richtige gefunden!
Also ich will mit dem CameraPick und Mouse down erzihlen das ich ein Fenster aufschieben kann in diesem Fall ein Würfel erstmal. Doch ich habe keinen Plan wie ich das hinbekommen sollte Hie mein Code
Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2


Fenster = LoadMesh("Model\Test\Fenstertest.3ds",Tram)
EntityPickMode Fenster, 2

cam1=CreateCamera()
PositionEntity cam1, -2.2355, 1.7946 , 6.6
RotateEntity cam1, 20, 0, 0

mausklick = MouseDown ( 1 )
While Not KeyHit (1)



   mx = MouseX()
   my = MouseY()
   Pick = CameraPick(cam1, mx, my)

mausklick = MouseDown ( 1 )

If Pick<>0 And mausklick Then
MoveEntity Fenster,PickedX, PickedY, PickedZ
End If

UpdateWorld


Flip
Wend
End

So ich hoffe es gibt so etwas nirgens im Forum trotz Suche !
Ich hoffe ihr könnt mir helfen.

mfg
PhillipB.
 

bjh

BeitragSa, März 19, 2011 23:51
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

du könntest mir deine e-mail adresse geben und ich schick dir dann ein spiel das ich vor langem mal geschrieben hab.

da kann man eine tür öffnen und munition aufnehmen indem man auf das objekt in einer bestimmten entfernung schaut und e drückt.

vllt kannst du da noch mehr brauchen. mit tag und nacht und so.


wenn du das nicht checkst oder was anders meinst, dann such ich, wie man das genau machen muss.

PhillipB

BeitragSo, März 20, 2011 0:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Also es sollte shcon mit der maus so zum ziehen sein ! Und nicht wenn die ausgerichtet ist und ne taste gedrückt wird Wink Aber trotzdem danke
 

bjh

BeitragSo, März 20, 2011 0:28
Antworten mit Zitat
Benutzer-Profile anzeigen
bitte

naja da hab ich keine ahnung Very Happy

dann hoff ich, dass jemand anderer helfen kann

ToeB

BeitragSo, März 20, 2011 1:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wie meinst du das, wenn man klickt dann soll das Fenster entweder auf oder zu gehen oder man soll es mit der Maus aufschieben können (Also Mausdrauf -> Drücken und gedrückt halten, fenster wird an Mausposition gesetzt )

Die erste Möglichkeit ist sehr einfach umszusetzten, einfach eine Statusvariable immer ändern wenn geklickt wird, also : Klick -> Status=1 -> Klick -> Status=0 -> Klick -> Status=1 usw. Und dann nach Status (z.B. 0 = Zu, 1 = Offen) dann das Fenster Positionieren.

Für die Zweite Möglichkeit brächtest du einen Unsichtbaren Block, den du auf die Maus-Berührung testes, und dann die PickedY Speicherst, wenn Maustaste gedrückt worden ist und dann nur noch das Fenster anhand des neuen PickedY wertes ändern.


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

PhillipB

BeitragSo, März 20, 2011 1:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Die 2 Möglichkeit meine ich könntest du mir diese erklären?(mit code?)
 

Lapiz

BeitragSo, März 20, 2011 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sollte ungefähr sein, was du suchst:
Code: [AUSKLAPPEN]
Graphics3D 640,480,16,2
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam,0,5,-5
TurnEntity cam,45,0,0

plane=CreatePlane()
PositionEntity plane,0,-1,0

fenster=CreateCube()
ScaleEntity fenster,1,1,.2
EntityColor fenster,40,140,255
EntityAlpha fenster,.75
EntityPickMode fenster,2


While Not KeyHit(1)
pick=CameraPick(cam,MouseX(),MouseY())

If pick<>0
   If PickedEntity()=fenster
      If MouseDown(1)
         PositionEntity fenster,PickedX(),EntityY(fenster),EntityZ(fenster)
      EndIf
   EndIf
EndIf

UpdateWorld
RenderWorld

Flip
Wend
End

PhillipB

BeitragSo, März 20, 2011 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke erstmal doch jetzt habe ich noch ein problem das Fenster ist nämlich schräg!
Deswegen habe ich eine halterung wo es drinn liegt und halt das Fenster.
Durch die Kollisionen müsste es ja klappen das das fenster in der Halterung bleibt doch jetzt bewegt sich garnichts mehr. Hier der Code:
Code: [AUSKLAPPEN]
Graphics3D 640,480,16,2
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam,0,5,-5
TurnEntity cam,45,0,0

plane=CreatePlane()
PositionEntity plane,0,-1,0

fenster=LoadMesh ("Straba\NF6\fenster.3ds")
PositionEntity  fenster, 0,12,0
Halterung=LoadMesh ("Straba\NF6\halterung.3ds")

EntityType halterung, 2
EntityType fenster, 1


;Kollis
Collisions 1, 2, 2, 3

While Not KeyHit(1)
   
   MoveEntity fenster, 0,-10,0
   
   
   pick=CameraPick(cam,MouseX(),MouseY())
   
   If pick<>0 And PickedEntity()=fenster And MouseDown(1) Then
      PositionEntity fenster,PickedX(),EntityY(fenster),PickedZ()
   EndIf
   
   UpdateWorld
   RenderWorld
   
   Flip
Wend
End

ToeB

BeitragSo, März 20, 2011 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist noch verbesserungswürdig aber es ist auch eben ganz schnell hingeschrieben :
Code: [AUSKLAPPEN]
Graphics3D 800, 600, 16, 2
SetBuffer BackBuffer( )

Const minY = 0, maxY = 2

Local timer = CreateTimer( 60 )
Local camera = CreateCamera( )

Local Fenster = CreateCube( )
   PositionEntity Fenster, 0, (minY+maxY)/2.0, 5
   ScaleMesh Fenster, 1, 0.5, 0.1


Local FensterCol = CopyEntity( Fenster )
   EntityAlpha FensterCol, 0.1
   ScaleEntity FensterCol, 1, 20, 0.1
   EntityPickMode FensterCol, 2
   
Local pick, drop, dropY#
   
Repeat
   
   pick = CameraPick( camera, MouseX(), MouseY() )
   
   If drop = 0 Then
      If MouseHit( 1 ) Then
         If pick = FensterCol Then
            drop = 1
            dropY = PickedY( ) - EntityY( Fenster )
         EndIf
      EndIf
   Else
      nY# = PickedY( )-dropY
      If nY < minY Then nY = minY
      If nY > maxY Then nY = maxY
      PositionEntity Fenster, EntityX( Fenster ), nY, EntityZ( Fenster )
      If MouseDown( 1 ) = 0 Then Drop = 0
   EndIf
   RenderWorld( )
   Flip 0
   WaitTimer( timer )
   Cls
Until KeyHit( 1 )
End


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

PhillipB

BeitragSo, März 20, 2011 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja aber so ein Fenster meine ich nicht das steht schräg nicht 90° sonder irgent ein zwischen ding .
Deswegen wollte ich es ja mit Kollisionen lösen
So:
user posted image

PhillipB

BeitragMo, März 21, 2011 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo sry für DP.
Aber ich habe etwas herum experimentiert unzwar habe ich mal das mesh mit rotatemesh gedreht .
Code: [AUSKLAPPEN]
Graphics3D 640,480,16,2
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam,0,5,-5
TurnEntity cam,45,0,0

plane=CreatePlane()
PositionEntity plane,0,-1,0

fenster=CreateCube()
ScaleEntity fenster,1,1,.2
EntityColor fenster,40,140,255
EntityAlpha fenster,.75
EntityPickMode fenster,2
RotateMesh fenster,0,24,0


While Not KeyHit(1)
   
   
   pick=CameraPick(cam,MouseX(),MouseY())
   
   If pick<>0 And PickedEntity()=fenster And MouseDown(1) Then
      PositionEntity fenster,PickedX(),EntityY(fenster),EntityZ(fenster)
   EndIf
   
   UpdateWorld
   RenderWorld
   
   Flip
Wend
End


Doch jetzt ist es ja sehr verzerrt was gann man dagegen machen?

ToeB

BeitragMo, März 21, 2011 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreh einfach das Fenster im Modeller in die richtige Position und exportiere es erneut (Und lass RotateMesh weg)

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

PhillipB

BeitragMo, März 21, 2011 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ok velen dank an euch Wink bd
Edit: Ich wollte eine sperre einbauen doch irgentwie habe ich etwas falsch gemacht doch ich finde meinen Fehler nicht :
Code: [AUSKLAPPEN]
Graphics3D 640,480,16,2
SetBuffer BackBuffer()

cam=CreateCamera()
PositionEntity cam,0,5,-5
TurnEntity cam,45,0,0

plane=CreatePlane()
PositionEntity plane,0,-1,0

fenster= LoadMesh ("fenster.3ds")
EntityPickMode fenster,2


fensterX# = EntityX(fenster)

While Not KeyHit(1)
   
   fensterX# = EntityX(fenster)
   
   DebugLog fensterX
   
   pick=CameraPick(cam,MouseX(),MouseY())
   
   If pick<>0 And PickedEntity()=fenster And MouseDown(1) Then
      PositionEntity fenster,PickedX(),EntityY(fenster),EntityZ(fenster)
   EndIf
   
   If fensterX > 1.74954 Then
   fensterX = 1.74954
   Else If fensterX < -1.11413 Then
   fensterX = -1.11413
   EndIf
   
   UpdateWorld
   RenderWorld
   
   Flip
Wend
End


Wäre nett wenn mir noch einer helfen würde!

ToeB

BeitragMo, März 21, 2011 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Villeicht beschreibst du mal wie der Fehler aussieht ? Ohne dein Modell kann man da nicht viel Testen.

Außerdem hab ich dir ein sehr schönes Beispiel geschrieben (siehe oben) bei dem eine Funktionierende Sperre drin ist, und es wäre auch ganz einfach das Fenster statt nach oben nach Links oder Rechts schieben zu lassen, hier der Code :
Code: [AUSKLAPPEN]
Graphics3D 800, 600, 16, 2
SetBuffer BackBuffer( )

Const minX = 0, maxX = 2

Local timer = CreateTimer( 60 )
Local camera = CreateCamera( )

Local Fenster = CreateCube( )
   PositionEntity Fenster, (minX+maxX)/2.0, 0, 5
   ScaleMesh Fenster, 0.5, 1, 0.1
   EntityPickMode Fenster, 2


Local FensterCol = CopyEntity( Fenster )
   EntityAlpha FensterCol, 0.1
   ScaleEntity FensterCol, 20, 1, 0.1
   EntityPickMode FensterCol, 2
   
Local pick, drop, dropX#, nX#
   
Repeat
   
   pick = CameraPick( camera, MouseX(), MouseY() )
   
   If drop = 0 Then
      If MouseHit( 1 ) Then
         If pick = Fenster Then
            drop = 1
            dropX = PickedX( ) - EntityX( Fenster )
            EntityPickMode Fenster, 0
         EndIf
      EndIf
   Else
      nX# = PickedX( )-dropX
      If nX < minX Then nX = minX
      If nX > maxX Then nX = maxX
      PositionEntity Fenster, nX, EntityY( Fenster ), EntityZ( Fenster )
      If MouseDown( 1 ) = 0 Then Drop = 0 : EntityPickMode Fenster, 2
   EndIf
   RenderWorld( )
   Flip 0
   WaitTimer( timer )
   Cls
Until KeyHit( 1 )
End


Wink


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

PhillipB

BeitragDi, März 22, 2011 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay vielen dank jetzt verstehe ich es Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group