Objekt bewegt sich weg, aber es soll sich nur Rotieren

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Kevin

Betreff: Objekt bewegt sich weg, aber es soll sich nur Rotieren

BeitragDi, Apr 19, 2011 22:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo BlitzBasic Community!
Ich habe eine Frage bzw. ein Problem
Ich habe einen bzw. zwei Wischerarme Programmiert.
Die Wischer rotieren auch, aber bewegen sich von der normalen Position weg!

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

cam1=CreateCamera()



PositionEntity cam1,2,2,0

Wischerarme = LoadAnimMesh ("Wischerarme.3ds")

plane = CreatePlane ()

Wischerarm_l = FindChild (Wischerarme,"wischerarm")

Wischerarm_r = FindChild (Wischerarme,"wischera00")


Global wischer_position# = 0

While Not KeyHit (1)
   DebugLog wischer_Position

   RenderWorld
   ;Linker Wischerarm
   If KeyDown (17) Then
      wischer_position = wischer_position + 0.01
   EndIf
   If wischer_position  > 0.08 Then
      wischer_position = 0
   EndIf

   
   RotateEntity wischerarm_l, 0,wischer_position,0
   
   UpdateWorld
   Flip 0
Wend
End


Vielen Dank im Vorraus...
 

feider

ehemals "Decelion"

BeitragDi, Apr 19, 2011 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Überprüfe mal in deinem Graphikbearbeitungsprogramm, ob der Mittelpunkt vom Wischerarm an der richtigen stelle ist. Sonst kann es gut sein, dass sich der Arm zwar dreht, aber um einen Mittelpunkt der sonstwo liegt.

mfg
Dece
 

Kevin

BeitragMi, Apr 20, 2011 0:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Objekt liegt auf der Nulllinie.

TimBo

BeitragMi, Apr 20, 2011 0:58
Antworten mit Zitat
Benutzer-Profile anzeigen
möchtest du die Objekte mal hochladen ?
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Dottakopf

BeitragMi, Apr 20, 2011 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi !


mir fallen einige dinge in deinem Code auf.


1. Du verwendest Flip 0 hast aber keinen Timer. Dies kann unter umständen einen Computer lahm legen, da es nicht gesund ist den Rechner mit 1000 Schleifendruchgängen pro ms arbeiten zu lassen.
Bitte erstelle einen Timer und frage ihn in der Loop ab.
Dabei möchte ich auf diesen Post "Hurra 100% Auslastung" verweisen: https://www.blitzforum.de/foru...hp?t=25242


2. Es ist wohl sinnvoll erst deine 3D welt zu aktualisieren und sie erst dann Rendern, bzw. berechnen zu lassen.
Also schreib doch bitte Updateworld() vor Renderworld()

so :
Code: [AUSKLAPPEN]

Graphics3D...,...
setbuffer backbuffer()

timer = createtimer( 60 )  ;60 FPS gebremst


repeat
  cls
  waittimer(timer) ;damit dein Prozessor nicht durchglüht




  Updateworld()
  Renderworld()
  flip 0

until Keyhit(1)



3. Ich kann mir irgendwie nicht vorstellen das nur durch den befehel Rotateentity dein "wischer" davonrollt. Um ganz sicher zu sein, das es nicht an deinem Model liegt, ersetze das Model zum Debuggen durch einen normalen cube und schau ob der fehler weiterhin auftritt.

Alternativ ersetze den befehl Rotateentity durch den besser geeigneten Befehl "Turnentity"
Was der wesentliche und vorallem super praktische unterschied zwischen Rotateentity und Turnentity ist kannst mit etwas eigenarbeit aus der Hilfe hier im Forum erkennen.

(Das eine macht eine "Relative Bewegung" und das andere eine "Aboslute Bewegung" )

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

Kevin

BeitragMi, Apr 20, 2011 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
läuft, aber muss noch ein bisschen anpassen....

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

cam1=CreateCamera()



PositionEntity cam1,2,2,0

Wischerarme = LoadAnimMesh ("Wischerarme.3ds")

tst = CreateCube ()

plane = CreatePlane ()

Wischerarm_l = FindChild (Wischerarme,"wischerarm")

Wischerarm_r = FindChild (Wischerarme,"wischera00")


Global wischer_position# = 0

While Not KeyHit (1)
   DebugLog wischer_position
   ;Linker Wischerarm
   If KeyDown (17) Then
      wischer_position = wischer_position + 0.01
   EndIf
   If wischer_position  > 0.03 Then
      wischer_position = 0
   EndIf
   
   
   TurnEntity wischerarm_l, 0,0,wischer_position
   
   UpdateWorld
RenderWorld
   Flip 0
Wend
End

Dottakopf

BeitragMi, Apr 20, 2011 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist wichtiger das du den unterschied zwischen Rotateentity und Turnentity verstanden hast.


Benutze Rotateentity um einmalig ein Objekt nach einen Gewissen winkel hin auszurichten.
Zum Beispiel beim laden von Objekten....

Benutze Turnentity um im Spiel ein objekt um einen Gewissen wert zu drehen... Hierbei wird der aktuelle winkelwert genommen und um deinen wert erhöht.
Spielerdrehung und sowas...


Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

Kevin

BeitragMi, Apr 20, 2011 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Wischer geht einfach nicht auf den Ursprung zurück...

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

cam1=CreateCamera()



PositionEntity cam1,2,2,0

Wischerarme = LoadAnimMesh ("Wischerarme.3ds")

timer = CreateTimer( 60 )

plane = CreatePlane ()

Wischerarm_l = FindChild (Wischerarme,"wischerarm")

Wischerarm_r = FindChild (Wischerarme,"wischera00")

Global Wischer# = 0


Global wischer_position# = 0

While Not KeyHit (1)
   DebugLog wischer_position
   RenderWorld
   ;Linker Wischerarm
   If KeyDown (17) Then
   Wischer = 1
   EndIf
   If Wischer = 1 Then
      wischer_position = wischer_position + 0.02
   EndIf
   
   If wischer_position  > 0.24 Then
      Wischer = 0.5
   EndIf
   If wischer = 0.5 Then
   wischer_position = wischer_position - 0.02
   EndIf
   
   If wischer_position < 0 Then
   Wischer = 0
   EndIf
   

   
   
   TurnEntity wischerarm_l, 0,0,wischer_position
   
   UpdateWorld
   Flip 0
Wend
End

Dottakopf

BeitragMi, Apr 20, 2011 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
so ...

hier ein total simples beispiel für einen Scheiben wischer...

Code: [AUSKLAPPEN]


Graphics3D 800,600,16,2
SetBuffer BackBuffer()

timer=CreateTimer(60)

cam = CreateCamera()
MoveEntity cam,0,0,-20



wischer = CreateCube()
EntityColor wischer,255,0,0
ScaleEntity wischer,1,3,1





Repeat
Cls
WaitTimer(timer)


      ;je nach richtung ist der Dreh speed positiv oder negativ
      If Richtung = 0 Then
         Wspeed# = 1
      Else
         Wspeed# = -1
      End If



      ;winkel des wischers bestimmen
      If richtung = 0 And EntityRoll(wischer) > 100 Then richtung = 1
      If richtung = 1 And EntityRoll(wischer) < -100 Then richtung = 0



      ;wischer dreht sich
      TurnEntity wischer,0,0,Wspeed







UpdateWorld()

RenderWorld()
Text 0,0, "Roll " +EntityRoll(wischer)


Flip 0
Until KeyHit(1)


kopier es in dein bb, spiele damit rum.
Ich denke das sollte reichen


~Edit~ da der mittelpunkt des Objektes in der Mitte liegt, wird es auch von da aus gedreht... wie man den Bezugspunkt in einem 3D Objekt ändert musst selber gucken. Wenn du das Objekt in einem Modeller erstellst kannst du den bezugspunt mit hilfe der 0 Linie selber bestimmen


Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

Kevin

BeitragMi, Apr 20, 2011 23:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt muss nurnoch das Wischerblatt an die Arme angepasst werden, wie bekomme ich das am Besten hin?

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

cam1=CreateCamera()



PositionEntity cam1,2,2,0


timer = CreateTimer( 60 )

plane = CreatePlane ()

Wischerarm_l = LoadMesh ("wischerarm_l.3ds")
Wischer_blatt = LoadMesh ("wischerblatt.3ds")
Wischerarm_r = LoadMesh ("wischerarm_r.3ds")

PositionEntity wischerarm_r, 0.2,0,0
;Global wischer_position# = 0

While Not KeyHit (1)
   RenderWorld
   ;Linker Wischerarm
   
   
        ;je nach richtung ist der Drehspeed positiv oder negativ
   If Richtung = 0 Then
      Wspeed# = 0.02
   Else
      Wspeed# = -0.02
   End If
   
   
   
      ;winkel des wischers bestimmen
   If richtung = 0 And EntityRoll(wischerarm_l) > 20 Then richtung = 1
   If richtung = 1 And EntityRoll(wischerarm_l) < -80 Then richtung = 0
   
   
   
      ;wischer dreht sich
   TurnEntity wischerarm_l,0,0,Wspeed
   TurnEntity wischerarm_r,0,0,Wspeed
   MoveEntity wischer_blatt,-Wspeed/27,0,0
   
   
   UpdateWorld
   Flip 0
Wend
End

Eingeproggt

BeitragDo, Apr 21, 2011 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Wischerblatt müsste sich an die Krümmung der Scheibe anpassen.
Außerdem müsste es diese typischen Quietschgeräusche von sich geben, natürlich abhängig vom Alter des Wischerblattes (Gummi-Zustand). Vergiss weiterhin nicht, dass zB eingetrockneter Dreck nicht so einfach weggeht und man sowohl eine Scheiben-Flüssigkeits-Anlage braucht als auch verschiedene Wischer-Stufen.
Dasselbe für die Heckscheibenwischer und wenn wir schon dabei sind auch für die Scheinwerfer.

------
Mal im Ernst... Weißt du überhaupt noch, worum es in deinem Spiel an sich geht? War das nicht die Bussimulation? Konzentrier dich doch auf wichtigere Inhalte bevor du mit den Wischerarmen rumspielst.

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

Dottakopf

BeitragDo, Apr 21, 2011 9:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Kevin... hör mal her... So wie du die Wischer umsetzt, das ist totaler humbuck....



erstens hat Eingeproggt völlig recht... Soviel Zeitaufwand für banale Scheibenwischer zu dem aktuellen Projekt stand ist nicht vertretbar Very Happy

Vorallem jetzt wo du mit so sachen wie "Jetzt muss ich nur noch den Wischergummie an den wischer arm anpassen" daher bringst, zeigt mir leider das zu keine 5 milimeter weit gedacht hast.....

Wie komme ich darauf ? ... Nunja.. warum erstellst du nicht im Modeller 2 Komplett fertige Scheibenwischer?
Wenn du sie eh schon im Modeller erstellt hast, warum erstellst du dort nicht gleich noch eine Scheibenwischer animation ?

Wenn das so passiert ist, dann brauchst du nur noch 1mal n Schweibenwischermodell laden. Diese an deine Auto dranheften und nach bedarf die animation abspielen...


Darauf wäre man aber gleich gekommen, wenn man sich von anfang an gedanken gemacht hätte.



Und im allgemeinen....
es gibt befehle wie
Code: [AUSKLAPPEN]

Entityparent


die es einem ermöglichen Objekte zusammen zuhängen. Nun ist ein Objekt das Parent und alle anderen seine Childs... wird das Parent verschoben, verschieben sich die Child objekte von ganz alleine mit, ohne das man das coden muss...
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group