我真的是新來的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