2016-04-20 15 views
0

Ich mache einen einfachen Lüfter in 3DS MAX, und eine GUI erstellen, um das Objekt zu steuern. Im Moment kann ich auf der GUI PlayAnimation() und StopAnimation() mit einer Ein/Aus-Taste steuern. Aber ich versuche einen Slider zu machen, der dann die Geschwindigkeit der Animation steuert. Dies wird (in diesem Fall) die Drehzahl der Lüfterflügel erhöhen.3DS Max - Max Skript Slider

Aber das ist, wo ich stecke, ich bin nicht 100% sicher, wie das geht, und konnte nichts auf Google finden, die mir helfen wird, einen Slider zu verwenden, um die Animationsgeschwindigkeit zu erhöhen.

Jede Hilfe und Anleitung wäre sehr willkommen!

MaxScript bisher:

try(DestroyDialog GUI)catch() 
Rollout GUI "GUI" 
(
Label lbl_name "Power" 
button btn_on "ON" across:2 
button btn_off "OFF" 
Label lbl_speed "Speed Levels" 
Slider slider 
on btn_on pressed do 
(
    PlayAnimation() 
) 
on btn_off pressed do 
(
    StopAnimation() 
) 
//Slider Here... 
) 
CreateDialog GUI 

Antwort

0

Sie suchen nach dem playbackSpeed:

try destroyDialog ::GUI catch() 
rollout GUI "GUI" 
(
    checkButton chb_switch "Power" width:50 
    label lbl_speed "Speed Levels" offset:[0,10] 
    slider sld_speed type:#integer range:[1,5,timeConfiguration.playbackSpeed] 

    on chb_switch changed playing do 
     if playing then playAnimation() else stopAnimation() 

    on sld_speed changed val do timeConfiguration.playbackSpeed = val 
) 
createDialog GUI 
0

die Wiedergabegeschwindigkeit ändern ändert es für die gesamte Szene. Alles, was in der Szene animiert werden davon betroffen sein ...

Wie ich diesen Ansatz würde für Ihre spezifischen Bedürfnisse ist:

  • Ändern der Lüfter Objekt/Knochen des Rotationssteuerung auf einen linearen Regler.
  • Setzen Sie zwei Tasten bei der Drehung, eine bei Rahmen 0 und eine andere bei Rahmen 100, beide mit einem Wert von 0 gesetzt.
  • Stellen Sie die Rotationskurve innerhalb/außerhalb der Bereichstypen auf relative Wiederholung ein.
  • Fügen Sie ein Häkchen hinzu, um Ihren Lüfter auf der Benutzeroberfläche auszuwählen. (Vielleicht möchten Sie verschiedene Fans in der gleichen Szene manipulieren).

Hier ist der ui:

try destroyDialog ::GUI catch() 
rollout GUI "GUI" 
(
    -- this local variable stores the two initial keys of your fan 
    local keys = undefined 

    pickbutton pkb_fan "Select Fan" message:"Please select animated fan" autoDisplay:true 
    checkbutton chb_switch "Power" 
    slider sld_speed "Fan Speed" type:#float range:[0, 100.0, 0] 

    -- when the fan is selected, assign its linear rotation keys to the keys variable 
    on pkb_fan picked obj do 
    (
     if (obj != undefined) then 
     (
      keys = obj.rotation.controller.keys 
     ) 
     else (keys = undefined) 
    ) 
    -- turning on the fan is setting the second key frame's rotation to a    
    -- non-zero value. 
    -- turning it off is setting it to zero. 
    -- in this scenario the fan is rotating on its Y axis. 
    on chb_switch changed playing do 
    (
     if (keys != undefined) and (keys.count >= 2) then 
     (
      if (playing) then (keys[2].value = quat 0 1 0 1) 
      else (keys[2].value = quat 0 0 0 1) 
     ) 
    ) 
    -- changing the speed of the fan is moving the second keyframe; assuming 
    -- the key frame value is always the same, 
    -- the closer it moves to the first key frame, the faster it spins, the 
    -- more distant, the slower it spins 
    on sld_speed changed val do 
    (
     if (keys != undefined) and (keys.count >= 2) then 
     (
      local t = 0f 
      if (val > 0.0) then (t = 1.0/val * 100.00) 

      keys[2].time = t 
     ) 
    ) 
) 

createDialog GUI 

Dies ist ein einfaches Szenario. Wenn Sie die variierende Geschwindigkeit animieren/aufnehmen müssen, ändert sich der Ansatz etwas.

Hoffentlich geht das los.