ocuspocus 0 Denunciar post Postado Maio 3, 2009 Atendo a sugestão do moderador, estou criando um tópcio novo para uma pergunta feita em outro post. Gostaria de ter um exemplo parecido com este em AS3: http://www.kirupa.com/developer/mx/easing_mouseclick.htm O exemplo acima está em Flash MX. O autor cria dois movie clips, sendo que um é uma bola que segue a direção do mouse, e acrescenta este código: onClipEvent (load) { _x = 0; _y = 0; speed = 5; } onClipEvent (mouseDown) { endX = _root._xmouse; endY = _root._ymouse; } onClipEvent (enterFrame) { _x += (endX-_x)/speed; _y += (endY-_y)/speed; } Reescrevi desta forma em AS3, mas não está funcionando como o do tutorial. Alguém tem alguma sugestão de como corrigir? (Esou usando o Flex 3, caso isto seja importante citar) import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.Event; [SWF(backgroundColor = 0x000000)] public class FollowingMouse extends Sprite { private var _sprite:Sprite; private var _player:Sprite; private var _moving:Boolean; private var sx; private var sy; public function FollowingMouse() { _sprite = new Sprite( ); addChild(_sprite); _sprite.graphics.beginFill(0xffffff); _sprite.graphics.drawRect(0, 0, 400, 400); _sprite.graphics.endFill( ); _sprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); _sprite.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); _player = new Sprite(); addChild(_player); _player.graphics.beginFill(0x33cc99); _player.graphics.drawCircle(100, 100, 15); _player.graphics.endFill(); _moving = false; addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); addEventListener(MouseEvent.MOUSE_UP, onMouseUp); addEventListener(Event.ENTER_FRAME, onLoop); } private function onMouseDown(event:MouseEvent):void { _moving = true; sx = mouseX; sy = mouseY; } private function onMouseUp(event:MouseEvent):void { _moving = false; } private function onLoop(evt:Event):void { if (_moving) { _player.x += (sx - _player.x) / 5; _player.y += (sy - _player.y) / 5; } } } Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Brito 12 Denunciar post Postado Maio 4, 2009 Tipo não entendi por que o seu resultado ta saindo errado, tb nao debuguei seu codigo, mas pensei rapidamente aqui e cheguei a esse algoritmo aqu: bola.x = bola.y = 100; stage.addEventListener(MouseEvent.MOUSE_DOWN,clik); function clik(evt:MouseEvent):void{ bola.x += velSemFriction(bola.x, mouseX); bola.y += velSemFriction(bola.y, mouseY); } function velSemFriction(orig:Number, dest:Number): Number { return (dest-orig); } Caso queira adicionar um atrito ao codigo para que a bola nao chegue de vez na posição do mouse, basta adicionar mais um parametro na funcao: bola.x = bola.y = 100; stage.addEventListener(MouseEvent.MOUSE_DOWN,clik); function clik(evt:MouseEvent):void{ bola.x += velFriction(bola.x, mouseX,8); bola.y += velFriction(bola.y, mouseY,8); } function velFriction(orig:Number, dest:Number,coef:Number): Number { return (dest-orig)/coef; } Abs Compartilhar este post Link para o post Compartilhar em outros sites