我真的是新来的Flash和as3 ...我试图在flash中创建2个场景 - 其中一个我的movieclip从它附近离开鼠标时远离它的地方,其他影片剪辑被鼠标吸引的地方。我在actionscript 2上找到了答案,但是我不能在as3文件中使用它... 任何帮助或想法? 干杯!Movieclip对鼠标的吸引/排斥
0
A
回答
2
下面是一个关于鼠标位置被“推”和“拉”的显示对象的例子。
Main.as(文档类):
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
public class Main extends Sprite
{
public static var PULL:String = "pull";
public static var PUSH:String = "push";
private var _circle:Circle;
private var _force:String;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
_circle = new Circle();
addChild(_circle);
_force = PULL;
stage.addEventListener(MouseEvent.MOUSE_DOWN, onStageMouseDown);
}// end function
private function onStageMouseDown(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_UP, onStageMouseUp);
stage.addEventListener(Event.ENTER_FRAME, onStageEnterFrame);
}// end function
private function onStageMouseUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_UP, onStageMouseUp);
stage.removeEventListener(Event.ENTER_FRAME, onStageEnterFrame);
_force = (_force == PULL) ? PUSH : PULL;
}// end function
private function onStageEnterFrame(e:Event):void
{
var point1:Point = new Point(_circle.x, _circle.y);
var point2:Point = new Point(stage.mouseX, stage.mouseY);
var point3:Point = point2.subtract(point1);
point3.normalize(10);
if (_force == PULL) {
_circle.x += point3.x;
_circle.y += point3.y;
} else if (_force == PUSH) {
_circle.x -= point3.x;
_circle.y -= point3.y;
}// end else if
}// end function
}// end class
}// end package
import flash.display.Sprite;
import flash.events.Event;
class Circle extends Sprite {
public function Circle() {
draw();
}// end function
private function draw():void {
this.graphics.lineStyle(1);
this.graphics.beginFill(0xFFFFFF);
this.graphics.drawCircle(0, 0, 20);
this.graphics.endFill();
}// end function
}// end class
在init()
方法我们新的显示对象添加到阶段,这是我们将“拉”以及显示对象“推动”关于鼠标的位置。
_circle = new Circle();
addChild(_circle);
然后我们设置_force
属性我们PULL
不变。 _force
属性将决定显示对象是“拉”还是“推”。
_force = PULL;
接下来我们将我们的鼠标事件监听器添加到舞台上。在MouseEvent.MOUSE_DOWN
上,我们称之为onStageMouseDown()
事件处理程序。当处理程序被调用时,我们将一个Event.ENTER_FRAME
和MouseEvent.MOUSE_UP
事件监听器添加到舞台上。
private function onStageMouseDown(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_UP, onStageMouseUp);
stage.addEventListener(Event.ENTER_FRAME, onStageEnterFrame);
}// end function
当MouseEvent.MOUSE_UP
事件处理函数被调用时,先前的Event.ENTER_FRAME
和MouseEvent.MOUSE_UP
事件侦听器从舞台上删除。然后根据_force
属性的值,其值在PUSH
和PULL
之间交替。
private function onStageMouseUp(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_UP, onStageMouseUp);
stage.removeEventListener(Event.ENTER_FRAME, onStageEnterFrame);
_force = (_force == PULL) ? PUSH : PULL;
}// end function
最后,onStageEnterFrame
事件处理程序。这是我们计算显示对象相对于鼠标的新位置的地方。
有不同的方式去做这件事,但我决定用Point
类来简化事情。首先,我们必须获得显示对象位置的Point
对象和鼠标位置的另一个对象Point
。
var point1:Point = new Point(_circle.x, _circle.y);
var point2:Point = new Point(stage.mouseX, stage.mouseY);
接下来我们要开始使用Point
对象的subtract()
方法点之间的差异。
var point3:Point = point2.subtract(point1);
有了这个新的点,我们可以使用Point
对象的normalize()
方法是按比例的显示对象的位置和鼠标的为设定的长度的位置之间的线段。
point3.normalize(10);
最后取决于_force属性的值,我们要么减去或者从显示对象的x
和y
属性添加该点的x
和y
性质。
相关问题
- 1. 鼠标移近时排斥对象
- 2. Three.js/Physijs中物体的吸引力/排斥力
- 3. Actionscript 3 Movieclip来驱除鼠标光标
- 4. 触发鼠标单击重叠的movieclip
- 5. 相互排斥对
- 6. 使MovieClip可点击鼠标事件
- 7. Movieclip内容激活鼠标事件
- 8. 如何从排斥标准
- 9. 引用Movieclip中的movieclip命中
- 10. 移动于其他的movieclip鼠标COORDS的动画片段位置相对
- 11. 气泡排斥
- 12. 与排斥
- 13. Box2d - 给对象吸引力/重力
- 14. 从外部引用动态MovieClip Movieclip
- 15. 在AS3上使用鼠标平板的Fluid MovieClip
- 16. Box2d BlackHole吸引力
- 17. GROUP_CONCAT自我排斥
- 18. 创建从排斥
- 19. 补贴滚动回吮吸ST终端支持鼠标滚轮
- 20. 的jQuery可排序使用鼠标松开,鼠标按下
- 21. 如何防止按钮/ movieclip干扰鼠标事件
- 22. 如何根据鼠标位置更改MovieClip透明度?
- 23. Maven的排斥是持续
- 24. 将根目录/舞台对齐Movieclip Movieclip
- 25. 对鼠标移动
- 26. 抽吸引理中的“抽吸长度”究竟是什么?
- 27. jQuery的放大对鼠标
- 28. 鼠标下的对象?
- 29. GL_QUADS吸引,而不是recangle
- 30. NinjectDependencyResolver如何被吸引?
你的问题是相当本地化的。我相信你可以在那里找到大量的例子。如果你不熟悉as3,但想获得一些实用程序,我建议看看[Hype](http://www.hypeframework.org/)。回到你的问题试试[this](http://www.hypeframework.org/01_background/content/mousefollow-as3/),你所需要的只是一个方向变量,你在放松后乘以一个方向变量,它的值为1 -1排斥。 –
是的,我真的是新的闪光灯...感谢您的帮助:) – Dan434