Two (non-Tundra-specific) hints for the code: 1. Never compare floats using the built-in equality operator. Due to how IEEE-754 operates, it is possible that the equality operator is never true. Instead, use float3::Distance(float3), or float3::DistanceSq(float3). 2. Instead of accumulating the coordinates per-component, you should vectorize your code to make it more compact (and faster as well). float3 has a member function .Add(float3).
2011/12/17 赵柏萱 <[email protected]> > Great! I'll try this, thank you Jonne! > > On Fri, Dec 16, 2011 at 6:42 PM, Jonne Nauha <[email protected]> wrote: > >> Fun to see you are learning Tundra scripting fast. And to answer your >> question yes this is one way of doing movement if we are talking about pos, >> rot, scale. You can make it a bit cleaner by just using the transform to >> assing new values and assign it back to the placeable like so: >> >> function updates() >> { >> var t = me.placeable.transform; >> >> if (tarpos.x != t.pos.x) >> t.pos.x = tarpos.x > t.pos.x ? t.pos.x + moveSpeed : t.pos.x - >> moveSpeed; >> if (tarpos.y != t.pos.y) >> t.pos.y = tarpos.y > t.pos.y ? t.pos.y + moveSpeed : t.pos.y - >> moveSpeed; >> if (tarpos.z != t.pos.z) >> t.pos.z = tarpos.z > t.pos.z ? t.pos.z + moveSpeed : t.pos.z - >> moveSpeed; >> >> <same for rot, just use t.rot> >> >> <whatever else logic you need> >> >> // Assign back to the full trasnform attribute, no need for new >> Transform(..) >> me.placeable.transform = t; >> } >> >> Other option is to use the math library lerp and slerp functions, I have >> made some camera transition movement animations with them. float3 and Quat >> for example has them http://clb.demon.fi/MathGeoLib/docs/float3_Lerp.php For >> the t you can use eg. QTimeLine >> http://doc.trolltech.com/4.7/qtimeline.html with setting duration and >> range from 0.0 to 1.0 and connecting to the proper signal. >> >> For animations you need to have a EC_Mesh with a .mesh ref and a >> .skeleton ref set. Then you need EC_AnimationController component in the >> same entity. This will "snoop" the available animations from the .skeleton >> file in the EC_Mesh and you have various playback and stop functions for >> the animations, eg. me.animationcontroller.EnableExclusiveAnimation("walk", >> true); See doxygen for >> more<http://realxtend.org/doxygen/class_e_c___animation_controller.html> >> . >> >> Hope that helps. >> >> Best regards, >> Jonne Nauha >> Adminotech developer >> >> >> >> On Fri, Dec 16, 2011 at 11:58 PM, Zhao Boxuan <[email protected]>wrote: >> >>> Great presentation! It's very interesting when I see some animals >>> walk around. It seems like blender makes the animation of animals, but >>> can we use javascript to generate animation in real time(just >>> movement)? Currently, I just connect an function using " >>> frame.Updated.connect(updates);" and define the updates function like >>> below: >>> >>> function updates() >>> { >>> var rot = me.placeable.transform.rot; >>> var scale = me.placeable.transform.scale; >>> var pos = me.placeable.transform.pos; >>> >>> if (tarpos.x > pos.x) >>> pos.x = pos.x + moveSpeed; >>> else if(tarpos.x < pos.x) >>> pos.x = pos.x - moveSpeed; >>> if (tarpos.y > pos.y) >>> pos.y = pos.y + moveSpeed; >>> else if(tarpos.y < pos.y) >>> pos.y = pos.y - moveSpeed; >>> if (tarpos.z > pos.z) >>> pos.z = pos.z + moveSpeed; >>> else if(tarpos.z < pos.z) >>> pos.z = pos.z - moveSpeed; >>> >>> if (tarRot.x > rot.x) >>> rot.x = rot.x + rotSpeed; >>> else if(tarRot.x < rot.x) >>> rot.x = rot.x - rotSpeed; >>> else if (tarRot.y > rot.y) >>> rot.y = rot.y + rotSpeed; >>> else if(tarRot.y < rot.y) >>> rot.y = rot.y - rotSpeed; >>> else if (tarRot.z > rot.z) >>> rot.z = rot.z + rotSpeed; >>> else if(tarRot.z < rot.z) >>> rot.z = rot.z - rotSpeed; >>> >>> me.placeable.transform = new Transform(pos, rot, scale); >>> >>> if(tarpos.Sub(pos).Length() <= 0.1 && tarRot.Sub(rot).Length() <= >>> 0.3) >>> { >>> entity.placeable.transform = new Transform(tarpos, tarRot, >>> scale); >>> } >>> } >>> >>> Reset the object's transform every frame. seems not a good way to do >>> that. :) So, do we have some better way to make an movement? >>> >>> Thank you! >>> >>> Zhao >>> >>> On Dec 16, 6:07 am, Toni Alatalo <[email protected]> wrote: >>> > is up on youtube, thanks for the bconf folks - i posted about it to >>> thehttp://www.realxtend.org/blog .. >>> http://realxtend.wordpress.com/2011/12/16/tundra-and-blender-integrat... >>> > >>> > will need to install blender2ogre on more computers and configure it >>> fully for the nice integration to work etc., has been really nice to have >>> at hand -- thanks Brett for the work, and help with preparing the demo too! >>> > >>> > ~Toni >>> >>> -- >>> http://groups.google.com/group/realxtend >>> http://www.realxtend.org >>> >> >> -- >> http://groups.google.com/group/realxtend >> http://www.realxtend.org >> > > -- > http://groups.google.com/group/realxtend > http://www.realxtend.org > -- http://groups.google.com/group/realxtend http://www.realxtend.org
