Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ocuspocus

Movieclip seguindo o mouse

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.