just added these, tho it was not generating any weird behaviors on my tests
for test just made quick testclass, I was able drag on 3 planes with no errors (sended you the test class) Fabrice On Jul 24, 2010, at 5:00 PM, Michael Iv wrote: > found two more places where break; misses... > And it seems that only "xz" mode works well. > > On Fri, Jul 23, 2010 at 5:48 PM, Fabrice3D <[email protected]> wrote: > thx Michael, > fixed and in trunk > >> because someone was writting it probably at 3 am ;)(Fabrice?) > probably true :) > > Fabrice > > > > On Jul 23, 2010, at 3:51 PM, Michael Iv wrote: > >> There is a bug in Drag3D class, Actually it is just syntax miss, If you set >> the plane to "zy" it would throw you " Unvalid plane description error ...", >> because someone was writting it probably at 3 am ;)(Fabrice?) und did not >> put after the last caase break ; terminator .So please , if someone can >> update it on the trunk. >> Nice weekend to everybody... >> >> >> On Wed, Jun 2, 2010 at 11:24 AM, Fabrice3D <[email protected]> wrote: >> interresting... >> so I guess, fix would be to project from camera pos instead of mouse using >> same ray dir... >> thx for pointing that out, will try implement a fix to it asap. >> >> in meanwhile keep away from cam :)) >> >> Fabrice >> >> >> On Jun 2, 2010, at 12:37 AM, abowman wrote: >> >> > Thanks for the test class. >> > >> > I was able to reproduce my problem in your code by placing the camera >> > closer to the sphere and making the sphere smaller. Is there a bug in >> > the Drag3D class or am I just not using the camera correctly? >> > >> > http://abowman.nozonenet.com/away3d/Drag3DTest.as >> > http://abowman.nozonenet.com/away3d/Drag3DTest.swf >> > >> > Thanks for your help. >> > >> > BTW, I purchased the new Away3D book and I'm finding it very helpful. >> > I was able to get my code working using that, but would really like to >> > be able to use this Drag3D class rather than using a plane primitive. >> > >> > >> > On Jun 1, 5:25 am, Fabrice3D <[email protected]> wrote: >> >> I haven't debugged your code, (that would be your job :)) ) >> >> but made quick test class using latest 3.5 to test class itself, all >> >> seams fine to me. >> >> >> >> I would check if the mouse coordinates are correct in your case. >> >> >> >> Fabrice >> >> >> >> package{ >> >> import flash.display.*; >> >> import flash.events.*; >> >> import away3d.containers.Scene3D; >> >> import away3d.containers.View3D; >> >> import away3d.core.base.Object3D; >> >> import away3d.core.render.*; >> >> import away3d.cameras.HoverCamera3D; >> >> import away3d.events.MouseEvent3D; >> >> import away3d.primitives.Sphere; >> >> >> >> import away3d.tools.Drag3D; >> >> >> >> public class Drag3DTest extends Sprite >> >> { >> >> public var scene:Scene3D; >> >> private var view:View3D; >> >> private var drag3d:Drag3D; >> >> >> >> private var cameraDistance:Number = 3000; >> >> private var Hcamera:HoverCamera3D; >> >> >> >> private var move:Boolean = false; >> >> private var lastPanAngle:Number; >> >> private var lastTiltAngle:Number; >> >> private var lastMouseX:Number; >> >> private var lastMouseY:Number; >> >> >> >> public function Drag3DTest() >> >> { >> >> addEventListener(Event.ADDED_TO_STAGE, init); >> >> } >> >> >> >> private function init(e:Event):void >> >> { >> >> initSWFEnvironement(); >> >> populate(); >> >> } >> >> >> >> private function initSWFEnvironement():void >> >> { >> >> stage.align = StageAlign.TOP_LEFT; >> >> stage.scaleMode = StageScaleMode.NO_SCALE; >> >> stage.stageFocusRect = false; >> >> >> >> Hcamera = new HoverCamera3D(); >> >> view = new View3D({camera:Hcamera}); >> >> scene = view.scene; >> >> view.x = stage.stageWidth * .5; >> >> view.y = stage.stageHeight * .5; >> >> Hcamera.distance = cameraDistance; >> >> Hcamera.tiltAngle = Hcamera.panAngle = 45; >> >> >> >> addChild(view); >> >> //scene.addChild(new Trident(1000, true)); >> >> >> >> start(); >> >> } >> >> >> >> public function start():void >> >> { >> >> if(!hasEventListener(Event.ENTER_FRAME)){ >> >> addEventListener(Event.ENTER_FRAME, >> >> refreshScreen); >> >> >> >> stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseIsDown); >> >> stage.addEventListener(MouseEvent.MOUSE_UP, onMouseIsUp); >> >> stage.addEventListener(Event.RESIZE, >> >> onResize); >> >> } >> >> } >> >> >> >> private function populate():void >> >> { >> >> var _debugPrimitive:Sphere = new >> >> Sphere({radius:50, material:null}); >> >> scene.addChild(_debugPrimitive); >> >> >> >> drag3d = new Drag3D(view); >> >> drag3d.plane = "xz"; >> >> drag3d.debug = true; >> >> drag3d.object3d = _debugPrimitive; >> >> >> >> Hcamera.hover(true); >> >> >> >> } >> >> >> >> private function refreshScreen(event:Event = null):void >> >> { >> >> >> >> if (move) { >> >> Hcamera.panAngle = 0.7*(stage.mouseX - >> >> lastMouseX) + lastPanAngle; >> >> Hcamera.tiltAngle = 0.7*(stage.mouseY - >> >> lastMouseY) + lastTiltAngle; >> >> } >> >> >> >> Hcamera.hover(); >> >> >> >> drag3d.updateDrag(); >> >> >> >> view.render(); >> >> >> >> } >> >> >> >> private function onResize(event:Event):void >> >> { >> >> view.x = stage.stageWidth *.5; >> >> view.y = stage.stageHeight *.5; >> >> } >> >> >> >> private function onMouseIsDown(event:MouseEvent):void >> >> { >> >> lastPanAngle = Hcamera.panAngle; >> >> lastTiltAngle = Hcamera.tiltAngle; >> >> lastMouseX = stage.mouseX; >> >> lastMouseY = stage.mouseY; >> >> move = true; >> >> stage.addEventListener(Event.MOUSE_LEAVE, >> >> onStageMouseLeave); >> >> } >> >> >> >> private function onMouseIsUp(event:MouseEvent):void >> >> { >> >> move = false; >> >> stage.removeEventListener(Event.MOUSE_LEAVE, >> >> onStageMouseLeave); >> >> } >> >> >> >> private function onStageMouseLeave(event:Event):void >> >> { >> >> move = false; >> >> stage.removeEventListener(Event.MOUSE_LEAVE, >> >> onStageMouseLeave); >> >> } >> >> >> >> } >> >> >> >> } >> >> >> >> On Jun 1, 2010, at 1:08 AM, abowman wrote: >> >> >> >>> I tried calling the onResize function at the beginning of my init >> >>> function and that didn't solve the problem. >> >> >> >>> On May 31, 4:54 pm, Fabrice3D <[email protected]> wrote: >> >>>> looked very quickly at your code, >> >>>> since class caches few values to spare calcs, try call resize(); before >> >>>> you do setup the class. >> >> >> >>>> let me know how it goes, I will in case it doesn't fix your issue, try >> >>>> your class tomorrow. >> >> >> >>>> also one detail, camera is standard of type Camera3D >> >>>> so view.camera.x, y, z is enough, no need to declare one. >> >> >> >>>> Fabrice >> >> >> >>>> On May 31, 2010, at 6:09 PM, abowman wrote: >> >> >> >>>>> Thanks for the class Fabrice. >> >> >> >>>>> For some reason, when I move the mouse the sphere I'm dragging doesn't >> >>>>> stay under the mouse. >> >> >> >>>>> http://abowman.nozonenet.com/away3d/dragTest.swf >> >>>>> http://abowman.nozonenet.com/away3d/DragTest.as >> >> >> >>>>> What do I need to do to fix this? >> >> >> >>>>> Thanks >> >> >> >>>>> On May 21, 4:49 am, Fabrice3D <[email protected]> wrote: >> >>>>>> Hi all, >> >>>>>> I get many requests about this and I keep sending code... >> >> >> >>>>>> So I've added a new class dedicated to this particular functionality. >> >>>>>> Drag3D. in tools.utils package >> >> >> >>>>>> you can use it to drag an object or just to get the intersection back. >> >> >> >>>>>> here an example of implementation >> >> >> >>>>>> import away3d.tools.utils.Drag3D >> >>>>>> [... usual away code...] >> >>>>>> private var drag3d:Drag3D; >> >> >> >>>>>> private function setUp():void >> >>>>>> { >> >>>>>> //the object you want to drag >> >>>>>> var _debugPrimitive:Sphere = new >> >>>>>> Sphere({radius:50, material:null}); >> >>>>>> this.scene.addChild(_debugPrimitive); >> >> >> >>>>>> //declare instance >> >>>>>> drag3d = new Drag3D(this.view); >> >>>>>> //which plane do you want to drag on >> >>>>>> // note here that plane != Plane primitive!! >> >>>>>> drag3d.plane = "xz"; >> >>>>>> // in case you want to check what you are >> >>>>>> doing >> >>>>>> //drag3d.debug = true; >> >>>>>> // to assign an object to be dragged >> >>>>>> drag3d.object3d = _debugPrimitive; >> >>>>>> } >> >> >> >>>>>> private function myEnterFrame(event:Event = null):void >> >>>>>> { >> >>>>>> //will update the object automatically on >> >>>>>> mouse moves >> >>>>>> drag3d.updateDrag(); // its is of course >> >>>>>> handy to couple this with mouseEvents, like "if mouseisdown --> drag" >> >> >> >>>>>> // in case you want only the >> >>>>>> positionintersectback >> >>>>>> varintersect:Number3D = drag3d.getIntersect(); >> >> >> >>>>>> this.view.render(); >> >>>>>> } >> >> >> >>>>>> next to 0,0,0 default, there are also options for custom positions of >> >>>>>> plane, in case of AABB tests and even support for rotated planes >> >>>>>> if you want object aligned calcs... >> >> >> >>>>>> here a little tech >> >>>>>> demohttp://www.closier.nl/playground/drag/drag3d.swf >> >> >> >>>>>> cheers, >> >> >> >>>>>> Fabrice >> >> >> >> >> >> >> >> >> -- >> Michael Ivanov ,Programmer >> Neurotech Solutions Ltd. >> Flex|Air |3D|Unity| >> www.neurotechresearch.com >> http://blog.alladvanced.net >> http://www.meetup.com/GO3D-Games-Opensource-3D/ >> Tel:054-4962254 >> [email protected] >> [email protected] >> > > > > > -- > Michael Ivanov ,Programmer > Neurotech Solutions Ltd. > Flex|Air |3D|Unity| > www.neurotechresearch.com > http://blog.alladvanced.net > http://www.meetup.com/GO3D-Games-Opensource-3D/ > Tel:054-4962254 > [email protected] > [email protected] >
